[Owncloud] ownCloud API
Tom Needham
tom at owncloud.com
Tue Jun 26 17:03:22 UTC 2012
On 26 Jun 2012, at 16:30, Michael Gapczynski wrote:
> On Tuesday, June 26, 2012 05:22:25 PM Georg Ehrke wrote:
>> Am 26.06.2012 um 17:17 schrieb Tom Needham:
>>> On 26 Jun 2012, at 16:06, Michael Gapczynski wrote:
>>>> We've briefly discussed the implementation of a REST API for ownCloud,
>>>> but
>>>> haven't formed any distinct plans for it. I believe we need to set
>>>> something in place now so developers can start using it and have some
>>>> nice
>>>> desktop and mobile integration for the next release. Besides desktop and
>>>> mobile clients, two Google Summer of Code students also require an API to
>>>> complete their projects.
>>>>
>>>> What we need is a REST API that can handle user authentication and
>>>> ownCloud
>>>> instance to instance communication. My idea is that the API is defined by
>>>> the apps, in which they register actions and requests for the API to
>>>> listen to. The API will handle the authentication and pass on the
>>>> actions and requests back to the apps. To ensure a stable API, I believe
>>>> that actions and requests should be defined in appinfo/info.xml and
>>>> registered when the app is enabled.
>>>>
>>>> An example of an action to revert a file back to a previous version:
>>>>
>>>> files_versions/appinfo/info.xml:
>>>> <api>
>>>>
>>>> <action>
>>>>
>>>> <name>revert</name>
>>>> <parameter>
>>>>
>>>> <type>string</type>
>>>> <name>file</name>
>>>>
>>>> </parameter>
>>>> <parameter>
>>>>
>>>> <type>int</type>
>>>> <name>revision</name>
>>>>
>>>> </parameter>
>>>> <class>OCA_Versions</class>
>>>> <function>rollback</function>
>>>>
>>>> </action>
>>>>
>>>> </api>
>>>>
>>>> The call to the action by a client using the API:
>>>> POST API/action/revert/
>>>> file:test.txt
>>>> revision:1340670981
>>>
>>> Should we include the app name in the url, for example, POST
>>> API/files_versions/action/revert. Otherwise, what happens if two apps
>>> register the same action? Or is it your intention that we do auth with
>>> OAuth and so the API will know what app is communicating with it?>
>>>> An example of a request to retrieve the recent versions of a file:
>>>>
>>>> files_versions/appinfo/info.xml:
>>>> <api>
>>>>
>>>> <request>
>>>>
>>>> <name>versions</name>
>>>> <parameter>
>>>>
>>>> <type>string</type>
>>>> <name>file</name>
>>>>
>>>> </parameter>
>>>> <class>OCA_Versions</class>
>>>> <function>getVersions</function>
>>>>
>>>> </request>
>>>>
>>>> </api>
>>>>
>>>> The call to the request by a client using the API:
>>>> GET API/request/versions?file=test.txt
>>>
>>> Likewise for this URL obviously.
>>>
>>>> Returns XML or JSON
>>
>> JSON might be the best solution. Just call json_decode and you got an easy
>> to handle array.
>>>> The API would also need to handle returning the proper http status codes
>>>> and converting the data into XML or JSON.
>>>>
>>>> Our options are to create a REST API as part of remote.php (or a
>>>> different
>>>> location such as api.php) that can handle authentication of users or
>>>> extend
>>>> the Open Collaboration Services (OCS) API written by Frank. I'm thinking
>>>> that we shouldn't go through OCS in order to avoid confusion about what
>>>> the API actually is.
>>>
>>> Yes I'd say api.php would be most logical and least confusing.
>>
>> I totally agree to a separated api.php.
>> What is about OAuth (2) for authentication?
>
> I initially was thinking of using OAuth, but I'm not so sure anymore. WebDAV
> uses username, password and this API will not replace WebDAV. If we use OAuth
> for authentication the official mobile apps would need the username and
> password for WebDAV access and also go through OAuth for the API. This seems
> like too much work for me.
I have been looking at getting the official mobile apps to connect to ownCloud using QR codes so there is no need for typing. I need to read more into OAuth but I think we could send the token through the QR code and save the user having to type in anything.
>
> I would prefer if official apps could just use username, password
> authentication and any 3rd party be forced to use OAuth. I'm not sure how to
> do this though without a 3rd party going through the same route as an official
> app.
>
>>
>>>> Please share your thoughts.
>>>>
>>>>
>>>> Michael
>>>> _______________________________________________
>>>> Owncloud mailing list
>>>> Owncloud at kde.org
>>>> https://mail.kde.org/mailman/listinfo/owncloud
>>>
>>> _______________________________________________
>>> Owncloud mailing list
>>> Owncloud at kde.org
>>> https://mail.kde.org/mailman/listinfo/owncloud
>>
>> _______________________________________________
>> Owncloud mailing list
>> Owncloud at kde.org
>> https://mail.kde.org/mailman/listinfo/owncloud
More information about the Owncloud
mailing list