External API
Introduction
The external API inside Nextcloud allows third party developers to access data provided by Nextcloud apps. Nextcloud follows the Open Collaboration Services specification.
Usage
Registering methods
Methods are registered inside the appinfo/routes.php
by returning an
array holding the endpoint meta data.
<?php
return [
'ocs' => [
// Apps
['name' => 'Bar#getFoo', 'url' => '/foobar', 'verb' => 'GET'],
],
];
Returning data
Once the API backend has matched your URL, your callable function as defined in BarController::getFoo will be executed. The AppFramework will make sure that send parameters are provided to the method based on its declaration.
Be sure to extend the OCP\AppFramework\OCSController
from the AppFramework.
Your functions then should returns a OCP\AppFramework\Http\DataResponse
. The
AppFramework will then take care formatting the response properly.
Exceptions
To throw an exception to the user in the OCS response. You can throw an
OCP\AppFramework\OCS\OCSException
. You can set the message and code.
There are 3 commonly used exceptions already available:
OCSBadRequestException
OCSForbiddenException
OCSNotFoundException
Authentication & basics
The requests to the OCS endpoint often have to be authenticated.
curl -u user:password https://example.com/ocs/v2.php/apps/yourapp/foobar
Output
The output defaults to XML. If you want to get JSON append this to the URL:
?format=json
Or set the proper Accept header:
Accept: application/json
Output from the application is wrapped inside a data element:
XML:
<?xml version="1.0"?>
<ocs>
<meta>
<status>ok</status>
<statuscode>100</statuscode>
<message/>
</meta>
<data>
<!-- data here -->
</data>
</ocs>
JSON:
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 100,
"message": null
},
"data": {
// data here
}
}
}
Statuscodes
The statuscode can be any of the following numbers:
100 - successful
996 - server error
997 - not authorized
998 - not found
999 - unknown error
Changing API and backwards compatibility
We aim to keep our API as stable as possible to avoid breaking third-party apps. Before an API is allowed to be removed, it should be marked as deprecated for at least 2 years (6 Nextcloud releases) before it gets removed.
Changing the API should be discussed in a github issue in our server repo. A pull request is most welcome.