Web Services Definition » History » Version 40
Kurt Gerber, 01 May 2020 10:44
1 | 10 | Kurt Gerber | h1. API / Web Services Requirements |
---|---|---|---|
2 | 2 | Kurt Gerber | |
3 | h2. Request services |
||
4 | 11 | Kurt Gerber | |
5 | 1 | Kurt Gerber | The existing API is documented here: https://qcat.readthedocs.io/en/latest/api/docs.html |
6 | |||
7 | 12 | Kurt Gerber | h3. Required missing request services: |
8 | 10 | Kurt Gerber | |
9 | 12 | Kurt Gerber | * There is an endpoint to get the configuration for a specific questionnaire and edition: https://https://qcat.wocat.net/en/api/v2/configuration/technologies/2018/ |
10 | 10 | Kurt Gerber | |
11 | 30 | Sebastian Manger | 1. Whithout the 'edition' endpoint, it should respond with an array of available editions. |
12 | 10 | Kurt Gerber | |
13 | 30 | Sebastian Manger | *Endpoint:* @/api/v2/configuration/technologies/@ |
14 | 1 | Kurt Gerber | |
15 | 30 | Sebastian Manger | *Allowed method:* @GET@ |
16 | 1 | Kurt Gerber | |
17 | 30 | Sebastian Manger | *Request Header:* |
18 | * @Authorization: Token AUTH_TOKEN@ |
||
19 | * @Accept: application/json@ or @Accept: application/xml@ |
||
20 | * @Content-Type: application/json@ or @Content-Type: application/xml@ |
||
21 | 1 | Kurt Gerber | |
22 | 30 | Sebastian Manger | *Response:* List of editions for given configuration, e.g. |
23 | * @ {"editions": ["2018", "2006"] @ |
||
24 | 1 | Kurt Gerber | |
25 | |||
26 | 30 | Sebastian Manger | 2. Without the specific configuration endpoint (like 'technologies'), the response should be an array of available configurations. |
27 | 1 | Kurt Gerber | |
28 | |||
29 | 30 | Sebastian Manger | *Endpoint:* @/api/v2/configuration/@ |
30 | 1 | Kurt Gerber | |
31 | 30 | Sebastian Manger | *Allowed method:* @GET@ |
32 | 1 | Kurt Gerber | |
33 | 30 | Sebastian Manger | *Request Header:* |
34 | * @Authorization: Token AUTH_TOKEN@ |
||
35 | * @Accept: application/json@ or @Accept: application/xml@ |
||
36 | * @Content-Type: application/json@ or @Content-Type: application/xml@ |
||
37 | 16 | Kurt Gerber | |
38 | 30 | Sebastian Manger | *Response:* List of configurations, e.g. |
39 | * @ {"configurations": ["technologies", "approaches", "unccd"] @ |
||
40 | 17 | Kurt Gerber | |
41 | 30 | Sebastian Manger | h2. Requirements for services to add / update cases |
42 | 15 | Kurt Gerber | |
43 | 30 | Sebastian Manger | The following new webservice endpoints must be developed. |
44 | 19 | Kurt Gerber | |
45 | 30 | Sebastian Manger | h3. 1. Authentification endpoint |
46 | 36 | Kurt Gerber | |
47 | 35 | Kurt Gerber | * See the following page for further specifications: [[API Authentification ]] |
48 | 30 | Sebastian Manger | This needs a new technical concept. Goals: |
49 | 15 | Kurt Gerber | |
50 | 30 | Sebastian Manger | * Existing authentication must still work (without need to refresh the token), but only for "non-app" requests |
51 | * Requests from the "app" must periodically refresh the authentication |
||
52 | * For all requests from the app, the header "User-Agent: app" (or something similar) must be set. |
||
53 | 1 | Kurt Gerber | |
54 | 33 | Kurt Gerber | Current idea: provide a new authentication backend; skip existing authentication for requests from the app based on some POST flag. |
55 | 34 | Kurt Gerber | |
56 | 33 | Kurt Gerber | |
57 | 32 | Kurt Gerber | |
58 | 1 | Kurt Gerber | h3. 2. Endpoint to create new case |
59 | 17 | Kurt Gerber | |
60 | 14 | Kurt Gerber | |
61 | 17 | Kurt Gerber | *Endpoint:* @/api/v2/en/questionnaires/<configuration>/<edition>/create@ |
62 | 1 | Kurt Gerber | |
63 | 18 | Kurt Gerber | *Allowed method:* @POST@ |
64 | 17 | Kurt Gerber | |
65 | 27 | Kurt Gerber | *POST data:* a valid questionnaire based on the corresponding "configuration template":https://qcat.readthedocs.io/en/latest/api/v2.html#structure-of-configuration |
66 | 17 | Kurt Gerber | |
67 | 1 | Kurt Gerber | *Request Header:* |
68 | 19 | Kurt Gerber | * @Authorization: Token AUTH_TOKEN@ |
69 | * @usertoken: <usertoken>@ |
||
70 | * @Accept: application/json@ or @Accept: application/xml@ |
||
71 | * @Content-Type: application/json@ or @Content-Type: application/xml@ |
||
72 | |||
73 | |||
74 | *Response:* |
||
75 | 20 | Kurt Gerber | <pre><code class="json"> |
76 | 19 | Kurt Gerber | {"success":"true", |
77 | 20 | Kurt Gerber | "code": "technologies_4534" |
78 | 22 | Kurt Gerber | } |
79 | 20 | Kurt Gerber | </code></pre> |
80 | |||
81 | |||
82 | h3. 3. image/file upload |
||
83 | |||
84 | This should be handled the same as already done the ui version. |
||
85 | |||
86 | Adding an image uploads it directly with POST to https://qcat.wocat.net/en/upload |
||
87 | |||
88 | As response it gets a JSON like this: |
||
89 | <pre><code class="json"> |
||
90 | { |
||
91 | "success": true, |
||
92 | "uid": "cfb23a06-385a-47c5-8a94-83cae1fd90b7", |
||
93 | "interchange": [ |
||
94 | "[/upload/9d/a/9da8b521-7130-48df-ba31-549016a748e5.jpg, (default)]", |
||
95 | "[/upload/0a/3/0a3fea13-1485-4ec8-92ee-351eef561d2d.jpg, (small)]", |
||
96 | "[/upload/17/0/170251f9-a9ea-4945-a714-0beaebb7c750.jpg, (medium)]", |
||
97 | 19 | Kurt Gerber | "[/upload/cf/b/cfb23a06-385a-47c5-8a94-83cae1fd90b7.jpg, (large)]" |
98 | 1 | Kurt Gerber | ], |
99 | "url": "/upload/cf/b/cfb23a06-385a-47c5-8a94-83cae1fd90b7.jpg" |
||
100 | } |
||
101 | </code></pre> |
||
102 | 25 | Kurt Gerber | |
103 | The value of the key "uid" is what is then really stored in the 'image' key field of the corresponding questionnaire. |
||
104 | |||
105 | h3. 4. Endpoint to edit a case |
||
106 | |||
107 | 37 | Kurt Gerber | *Endpoint:* @/api/v2/en/questionnaires/{configuration}/{edition}/{identifier}/@ |
108 | 1 | Kurt Gerber | |
109 | 40 | Kurt Gerber | * Downloading last version of a single case which the respective user is authorised to see |
110 | 25 | Kurt Gerber | |
111 | 27 | Kurt Gerber | |
112 | 37 | Kurt Gerber | |
113 | 25 | Kurt Gerber | *Request header:* |
114 | * @Authorization: Token AUTH_TOKEN@ |
||
115 | * @usertoken: <usertoken>@ |
||
116 | * @Accept: application/json@ or @Accept: application/xml@ |
||
117 | * @Content-Type: application/json@ or @Content-Type: application/xml@ |
||
118 | 1 | Kurt Gerber | |
119 | 25 | Kurt Gerber | *Allowed method:* @GET, POST@ |
120 | |||
121 | 1 | Kurt Gerber | *GET:* |
122 | |||
123 | 37 | Kurt Gerber | * Response would be the latest version of a case |
124 | |||
125 | 25 | Kurt Gerber | *POST:* |
126 | |||
127 | 39 | Kurt Gerber | For an adapted locking mechanism see [[API_Authentification_#Case-locking-mechanism|Case-locking mechanism]] |
128 | 37 | Kurt Gerber | |
129 | 25 | Kurt Gerber | *POST data:* a valid, updated questionnaire based on the corresponding "configuration template":https://qcat.readthedocs.io/en/latest/api/v2.html#structure-of-configuration |
130 | |||
131 | 1 | Kurt Gerber | *Response:* |
132 | 25 | Kurt Gerber | <pre><code class="json"> |
133 | {"success":"true", |
||
134 | "code": "technologies_4534" |
||
135 | } |
||
136 | </code></pre> |
||
137 | |||
138 | h3. 5. Endpoint to get mydata |
||
139 | |||
140 | *Endpoint:* @/api/v2/en/questionnaires/mydata@ |
||
141 | |||
142 | 27 | Kurt Gerber | *Allowed method:* @GET@ |
143 | 25 | Kurt Gerber | |
144 | *Request Header:* |
||
145 | * @Authorization: Token AUTH_TOKEN@ |
||
146 | * @usertoken: <usertoken>@ |
||
147 | 1 | Kurt Gerber | * @Accept: application/json@ or @Accept: application/xml@ |
148 | * @Content-Type: application/json@ or @Content-Type: application/xml@ |
||
149 | |||
150 | *Response:* List of public or draft cases of which the user is the compiler |