comparison mod_rest/openapi.yaml @ 4474:949db0714b5f

mod_rest: Add an OpenAPI specification
author Kim Alvefur <zash@zash.se>
date Sat, 27 Feb 2021 02:05:06 +0100
parents
children 125279f4a5b8
comparison
equal deleted inserted replaced
4473:3b50a9a75fb6 4474:949db0714b5f
1 ---
2 openapi: 3.0.1
3 info:
4 title: mod_rest API
5 description: |
6 API for sending and receiving stanzas, in a REST-ish fashion or by
7 responding to webhooks. Multiple formats supported, including native XML
8 and a simplified JSON mapping.
9 version: 0.1.0
10 license:
11 name: MIT
12 paths:
13 /rest:
14 post:
15 requestBody:
16 required: true
17 content:
18 application/x-www-form-urlencoded:
19 schema:
20 description: A subset of the JSON schema, only top level string fields.
21 application/xmpp+xml:
22 schema:
23 description: Single XMPP stanza in XML format.
24 application/json:
25 schema:
26 $ref: '#/components/schemas/stanza'
27 security:
28 - basic: []
29 - token: []
30 summary: Send stanzas and receive responses. Webhooks work the same way.
31 responses:
32 200:
33 content:
34 text/plain:
35 schema:
36 description: Plain text response used as message body.
37 example: Hello
38 type: string
39 application/x-www-form-urlencoded:
40 schema:
41 description: A subset of the JSON schema, only top level string fields.
42 example: body=Hello
43 application/xmpp+xml:
44 schema:
45 description: Single XMPP stanza in XML format.
46 example: <message><body>Hello</body></message>
47 application/json:
48 schema:
49 $ref: '#/components/schemas/stanza'
50 description: The stanza was sent and returned a response.
51 401:
52 description: No credentials or auth token were provided.
53 202:
54 description: The stanza was sent without problem, and without response,
55 so an empty reply.
56 403:
57 description: Provided credentials or token not accepted.
58 400:
59 description: There was a syntax problem in the payload.
60 422:
61 description: The was a problem with the format (but not the syntax) of the
62 payload.
63 415:
64 description: Unsupported mediatype.
65 components:
66 schemas:
67 stanza:
68 properties:
69 delay:
70 type: string
71 description: Timestamp of when a stanza was delayed, in ISO 8601 / XEP-0082
72 format.
73 state:
74 enum:
75 - active
76 - inactive
77 - gone
78 - composing
79 - paused
80 description: Chat state notifications, e.g. "is typing..."
81 type: string
82 example: composing
83 thread:
84 type: string
85 description: Message thread identifier
86 status:
87 type: string
88 description: Textual status message.
89 id:
90 type: string
91 description: Reasonably unique id. mod_rest generates one if left out.
92 replace:
93 type: string
94 description: ID of message being replaced (e.g. for corrections)
95 from:
96 description: the sender
97 type: string
98 example: bob@localhost.example
99 body:
100 description: Human-readable chat message
101 type: string
102 example: Hello, World!
103 command:
104 oneOf:
105 - type: string
106 - type: object
107 properties:
108 data:
109 $ref: '#/components/schemas/stanza/properties/formdata'
110 action:
111 type: string
112 note:
113 type: object
114 properties:
115 text:
116 type: string
117 type:
118 type: string
119 enum:
120 - info
121 - warn
122 - error
123 form:
124 $ref: '#/components/schemas/stanza/properties/dataform'
125 sessionid:
126 type: string
127 status:
128 type: string
129 node:
130 type: string
131 actions:
132 type: object
133 properties:
134 complete:
135 type: boolean
136 prev:
137 type: boolean
138 next:
139 type: boolean
140 execute:
141 type: string
142 description: Ad-hoc commands.
143 show:
144 description: indicator of availability, ie away or not
145 type: string
146 enum:
147 - away
148 - chat
149 - dnd
150 - xa
151 stats:
152 description: Statistics
153 type: array
154 items:
155 type: object
156 properties:
157 name:
158 type: string
159 unit:
160 type: string
161 value:
162 type: string
163 priority:
164 type: string
165 description: presence priority
166 kind:
167 description: Which kind of stanza
168 type: string
169 enum:
170 - message
171 - presence
172 - iq
173 to:
174 description: recipient
175 type: string
176 example: alice@example.com
177 type:
178 description: Stanza type
179 type: string
180 enum:
181 - chat
182 - normal
183 - headline
184 - groupchat
185 - get
186 - set
187 - result
188 - available
189 - unavailable
190 - subscribe
191 - subscribed
192 - unsubscribe
193 - unsubscribed
194 lang:
195 description: Language code
196 type: string
197 example: en
198 formdata:
199 additionalProperties:
200 oneOf:
201 - type: string
202 - type: array
203 items:
204 type: string
205 type: object
206 description: Simplified data form
207 join:
208 description: For joining Multi-User-Chats
209 type: boolean
210 enum:
211 - true
212 dataform:
213 properties:
214 title:
215 type: string
216 fields:
217 type: array
218 items:
219 type: object
220 properties:
221 value:
222 oneOf:
223 - type: string
224 - type: array
225 items:
226 type: string
227 type:
228 type: string
229 label:
230 type: string
231 desc:
232 type: string
233 required:
234 type: boolean
235 var:
236 type: string
237 type:
238 type: string
239 enum:
240 - form
241 - submit
242 - cancel
243 - result
244 instructions:
245 type: string
246 description: Data form
247 type: object
248 items:
249 oneOf:
250 - description: An items query or empty list
251 type: boolean
252 enum:
253 - true
254 - type: string
255 description: A query with a node, or an empty reply list with a node
256 - description: List of items referenced
257 type: array
258 items:
259 properties:
260 jid:
261 type: string
262 description: Address of item
263 node:
264 type: string
265 name:
266 type: string
267 description: Descriptive name
268 required:
269 - jid
270 type: object
271 description: List of references to other entities
272 version:
273 oneOf:
274 - type: boolean
275 - properties:
276 version:
277 type: string
278 name:
279 type: string
280 os:
281 type: string
282 required:
283 - name
284 - version
285 type: object
286 description: Software version query
287 payload:
288 required:
289 - datatype
290 - data
291 properties:
292 data:
293 type: object
294 datatype:
295 type: string
296 description: A piece of arbitrary JSON with a type field attached
297 type: object
298 disco:
299 oneOf:
300 - type: boolean
301 description: Either a query, or an empty response
302 - type: string
303 description: A query with a node, or an empty response with a node
304 - properties:
305 features:
306 description: List of URIs indicating supported features
307 type: array
308 items:
309 type: string
310 identities:
311 items:
312 type: object
313 properties:
314 name:
315 type: string
316 type:
317 type: string
318 category:
319 type: string
320 description: List of abstract identities or types that describe the
321 entity
322 type: array
323 example:
324 - name: Prosody
325 type: im
326 category: server
327 node:
328 type: string
329 extensions:
330 type: object
331 description: A full response
332 type: object
333 description: Discover supported features
334 oob_url:
335 type: string
336 description: URL of an attached media file.
337 html:
338 description: HTML version of 'body'
339 type: string
340 example: <body><p>Hello!</p></body>
341 subject:
342 description: Subject of message or group chat
343 type: string
344 example: Talking about stuff
345 ping:
346 description: A ping.
347 type: boolean
348 enum:
349 - true
350 nick:
351 type: string
352 description: Nickname of the sender
353 type: object
354 example:
355 body: Hello
356 type: chat
357 kind: message
358 state: active
359 to: alice@example.com
360 securitySchemes:
361 token:
362 description: Tokens from mod_http_oauth2.
363 scheme: Bearer
364 type: http
365 basic:
366 description: Use JID as username.
367 scheme: Basic
368 type: http
369 ...