1803
|
1 --- |
|
2 labels: |
|
3 summary: 'HTTP access to prosody’s storage mechanism' |
|
4 ... |
|
5 |
|
6 Introduction |
|
7 ------------ |
|
8 |
|
9 This module gives HTTP access to prosody’s storage mechanism. It uses |
|
10 normal HTTP verbs and [Basic HTTP |
|
11 authentication](http://tools.ietf.org/html/rfc2617), so you could call |
|
12 it RESTful if you like buzzwords. |
|
13 |
|
14 Syntax |
|
15 ------ |
|
16 |
|
17 To Fetch data, issue a normal GET request |
|
18 |
|
19 GET /data[/<host>/<user>]/<store>[/<format>] HTTP/1.1 |
|
20 Authorization: <base64(authzid:password)> |
|
21 |
|
22 OR |
|
23 |
|
24 PUT|POST /data[/<host>/<user>]/<store> HTTP/1.1 |
|
25 Content-Type: text/x-lua | application/json |
|
26 |
|
27 <data> |
|
28 |
|
29 These map to `datamanager.method(user, host, store, data)`, where choice |
|
30 of `method` and its parameters are explained below. |
|
31 |
|
32 ### Verbs |
|
33 |
|
34 Verb Meaning datamanager method |
|
35 -------- ------------------------------- --------------------------- |
|
36 `GET` Just fetch data `load()` or `list_load()` |
|
37 `PUT` Replace all data in the store `store()` |
|
38 `POST` Append item to the store `list_append()` |
|
39 |
|
40 Note: In a `GET` request, if `load()` returns `nil`, `list_load()` will |
|
41 be tried instead. |
|
42 |
|
43 ### Fields |
|
44 |
|
45 Field Description Default |
|
46 ---------- ----------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------- |
|
47 `host` Which virtual host to access Required. If not set in the path, the domain-part of the authzid is used. |
|
48 `user` Which users storage to access Required. If not set in the path, uses the node part of the authzid. |
|
49 `store` Which storage to access. Required. |
|
50 `format` Which format to serialize to. `json` and `lua` are supported. When uploading data, the `Content-Type` header is used. `json` |
|
51 `data` The actual data to upload in a `PUT` or `POST` request. `nil` |
|
52 |
|
53 Note: Only admins can change data for users other than themselves. |
|
54 |
|
55 ### Example usage |
|
56 |
|
57 Here follows some example usage using `curl`. |
|
58 |
|
59 Get your account details: |
|
60 |
|
61 curl http://prosody.local:5280/data/accounts -u user@example.com:secr1t |
|
62 {"password":"secr1t"} |
|
63 |
|
64 Set someones account details: |
|
65 |
|
66 curl -X PUT http://prosody.local:5280/data/example.com/user/accounts -u admin@host:r00tp4ssw0rd --header 'Content-Type: application/json' --data-binary '{"password":"changeme"}' |
|
67 |
|
68 ### Client library |
|
69 |
|
70 - https://metacpan.org/module/Prosody::Mod::Data::Access |
|
71 |
|
72 ### TODO |
|
73 |
|
74 - Use `Accept` header. |