Comparison

mod_rest/res/openapi.yaml @ 4528:fd15e7f00ff5

mod_rest: Move openapi spec into res/ dir to get it included in rocks
author Kim Alvefur <zash@zash.se>
date Tue, 23 Mar 2021 20:27:44 +0100
parent 4527:mod_rest/openapi.yaml@9a6aaba3d5ef
child 4529:c6d44e1fb4d9
comparison
equal deleted inserted replaced
4527:9a6aaba3d5ef 4528:fd15e7f00ff5
1 ---
2 openapi: 3.0.1
3
4 info:
5 title: mod_rest API
6 version: 0.3.2
7 description: |
8 API for sending and receiving stanzas, in a REST-ish fashion or by
9 responding to webhooks. Multiple formats supported, including native XML
10 and a simplified JSON mapping.
11 license:
12 name: MIT
13
14 paths:
15
16 /rest:
17 post:
18 summary: Send stanzas and receive responses. Webhooks work the same way.
19 tags:
20 - generic
21 security:
22 - basic: []
23 - token: []
24 requestBody:
25 $ref: '#/components/requestBodies/common'
26 responses:
27 200:
28 $ref: '#/components/responses/success'
29 202:
30 $ref: '#/components/responses/sent'
31
32 /rest/{kind}/{type}/{to}:
33 post:
34 summary: Even more RESTful mapping with certain components in the path.
35 tags:
36 - generic
37 security:
38 - basic: []
39 - token: []
40 parameters:
41 - $ref: '#/components/parameters/kind'
42 - $ref: '#/components/parameters/type'
43 - $ref: '#/components/parameters/to'
44 requestBody:
45 $ref: '#/components/requestBodies/common'
46 responses:
47 200:
48 $ref: '#/components/responses/success'
49
50 /rest/ping/{to}:
51 get:
52 tags:
53 - query
54 summary: Ping a local or remote server or other entity
55 security:
56 - basic: []
57 - token: []
58 parameters:
59 - $ref: '#/components/parameters/to'
60 responses:
61 200:
62 description: Test reachability of some address
63 content:
64 application/json:
65 schema:
66 $ref: '#/components/schemas/iq_pong'
67 application/xmpp+xml:
68 schema:
69 $ref: '#/components/schemas/iq_pong'
70
71
72 /rest/version/{to}:
73 get:
74 tags:
75 - query
76 summary: Ask what software version is used.
77 security:
78 - basic: []
79 - token: []
80 parameters:
81 - $ref: '#/components/parameters/to'
82 responses:
83 200:
84 description: Version query response
85 content:
86 application/json:
87 schema:
88 $ref: '#/components/schemas/iq_result_version'
89 application/xmpp+xml:
90 schema:
91 $ref: '#/components/schemas/iq_result_version'
92
93 /rest/disco/{to}:
94 get:
95 tags:
96 - query
97 summary: Query a remote entity for supported features
98 security:
99 - basic: []
100 - token: []
101 parameters:
102 - $ref: '#/components/parameters/to'
103 responses:
104 200:
105 $ref: '#/components/responses/success'
106
107 /rest/items/{to}:
108 get:
109 tags:
110 - query
111 summary: Query an entity for related services, chat rooms or other items
112 security:
113 - basic: []
114 - token: []
115 parameters:
116 - $ref: '#/components/parameters/to'
117 responses:
118 200:
119 $ref: '#/components/responses/success'
120
121 components:
122 schemas:
123 stanza:
124 type: object
125 example:
126 body: Hello
127 type: chat
128 kind: message
129 to: alice@example.com
130 state: active
131
132 properties:
133 kind:
134 $ref: '#/components/schemas/kind'
135 type:
136 $ref: '#/components/schemas/type'
137 to:
138 $ref: '#/components/schemas/to'
139 from:
140 $ref: '#/components/schemas/from'
141 id:
142 $ref: '#/components/schemas/id'
143 lang:
144 $ref: '#/components/schemas/lang'
145
146 body:
147 $ref: '#/components/schemas/body'
148 subject:
149 $ref: '#/components/schemas/subject'
150 thread:
151 $ref: '#/components/schemas/thread'
152
153 show:
154 $ref: '#/components/schemas/show'
155 status:
156 $ref: '#/components/schemas/status'
157 priority:
158 $ref: '#/components/schemas/priority'
159
160 state:
161 $ref: '#/components/schemas/state'
162 nick:
163 $ref: '#/components/schemas/nick'
164 delay:
165 $ref: '#/components/schemas/delay'
166 replace:
167 $ref: '#/components/schemas/replace'
168
169 join:
170 $ref: '#/components/schemas/join'
171
172 html:
173 $ref: '#/components/schemas/html'
174
175 ping:
176 $ref: '#/components/schemas/ping'
177 version:
178 $ref: '#/components/schemas/version'
179 disco:
180 $ref: '#/components/schemas/disco'
181 items:
182 $ref: '#/components/schemas/items'
183 command:
184 $ref: '#/components/schemas/command'
185
186 oob_url:
187 $ref: '#/components/schemas/oob_url'
188 payload:
189 $ref: '#/components/schemas/payload'
190 dataform:
191 $ref: '#/components/schemas/dataform'
192 formdata:
193 $ref: '#/components/schemas/formdata'
194 stats:
195 $ref: '#/components/schemas/stats'
196 error:
197 $ref: '#/components/schemas/error'
198
199 iq_pong:
200 description: Test reachability of some XMPP address
201 type: object
202 xml:
203 name: iq
204 properties:
205 type:
206 type: string
207 enum:
208 - result
209 xml:
210 attribute: true
211
212 iq_result_version:
213 description: Version query response
214 type: object
215 xml:
216 name: iq
217 properties:
218 type:
219 type: string
220 enum:
221 - result
222 xml:
223 attribute: true
224 version:
225 $ref: '#/components/schemas/version'
226
227 kind:
228 description: Which kind of stanza
229 type: string
230 enum:
231 - message
232 - presence
233 - iq
234
235 type:
236 description: Stanza type
237 type: string
238 enum:
239 - chat
240 - normal
241 - headline
242 - groupchat
243 - get
244 - set
245 - result
246 - available
247 - unavailable
248 - subscribe
249 - subscribed
250 - unsubscribe
251 - unsubscribed
252
253 to:
254 description: recipient
255 example: alice@example.com
256 type: string
257
258 from:
259 description: the sender
260 example: bob@localhost.example
261 type: string
262
263 id:
264 description: Reasonably unique id. mod_rest generates one if left out.
265 type: string
266
267 lang:
268 description: Language code
269 example: en
270 type: string
271
272 body:
273 description: Human-readable chat message
274 example: Hello, World!
275 type: string
276
277 subject:
278 description: Subject of message or group chat
279 example: Talking about stuff
280 type: string
281
282 thread:
283 description: Message thread identifier
284 type: string
285
286 show:
287 description: indicator of availability, ie away or not
288 type: string
289 enum:
290 - away
291 - chat
292 - dnd
293 - xa
294
295 status:
296 description: Textual status message.
297 type: string
298
299 priority:
300 description: Presence priority
301 type: string
302
303 state:
304 description: Chat state notifications, e.g. "is typing..."
305 type: string
306 enum:
307 - active
308 - inactive
309 - gone
310 - composing
311 - paused
312 example: composing
313
314 nick:
315 type: string
316 description: Nickname of the sender
317
318 delay:
319 type: string
320 description: Timestamp of when a stanza was delayed, in ISO 8601 / XEP-0082
321 format.
322
323 replace:
324 type: string
325 description: ID of message being replaced (e.g. for corrections)
326
327 join:
328 description: For joining Multi-User-Chats
329 type: boolean
330 enum:
331 - true
332
333 html:
334 description: HTML version of 'body'
335 example: <body><p>Hello!</p></body>
336 type: string
337
338 ping:
339 description: A ping.
340 type: boolean
341 enum:
342 - true
343 xml:
344 name: ping
345 namespace: urn:xmpp:ping
346
347 version:
348 type: object
349 description: Software version query
350 properties:
351 name:
352 type: string
353 example: My Software
354 version:
355 type: string
356 example: 1.0.0
357 os:
358 type: string
359 example: Linux
360 required:
361 - name
362 - version
363 xml:
364 name: query
365 namespace: jabber:iq:version
366
367 disco:
368 description: Discover supported features
369 oneOf:
370 - description: A full response
371 type: object
372 properties:
373 features:
374 description: List of URIs indicating supported features
375 type: array
376 items:
377 type: string
378 identities:
379 description: List of abstract identities or types that describe the
380 entity
381 type: array
382 example:
383 - name: Prosody
384 type: im
385 category: server
386 items:
387 type: object
388 properties:
389 name:
390 type: string
391 type:
392 type: string
393 category:
394 type: string
395 node:
396 type: string
397 extensions:
398 type: object
399 - description: A query with a node, or an empty response with a node
400 type: string
401 - description: Either a query, or an empty response
402 type: boolean
403
404 items:
405 description: List of references to other entities
406 oneOf:
407 - description: List of items referenced
408 type: array
409 items:
410 properties:
411 jid:
412 type: string
413 description: Address of item
414 node:
415 type: string
416 name:
417 type: string
418 description: Descriptive name
419 required:
420 - jid
421 type: object
422 - type: string
423 description: A query with a node, or an empty reply list with a node
424 - description: An items query or empty list
425 type: boolean
426 enum:
427 - true
428
429 command:
430 description: Ad-hoc commands.
431 oneOf:
432 - type: object
433 properties:
434 data:
435 $ref: '#/components/schemas/formdata'
436 action:
437 type: string
438 note:
439 type: object
440 properties:
441 text:
442 type: string
443 type:
444 type: string
445 enum:
446 - info
447 - warn
448 - error
449 form:
450 $ref: '#/components/schemas/dataform'
451 sessionid:
452 type: string
453 status:
454 type: string
455 node:
456 type: string
457 actions:
458 type: object
459 properties:
460 complete:
461 type: boolean
462 prev:
463 type: boolean
464 next:
465 type: boolean
466 execute:
467 type: string
468 - type: string
469 description: Call a command by 'node' id, without arguments
470
471 oob_url:
472 description: URL of an attached media file.
473 example: https://media.example.net/thisfile.jpg
474 type: string
475
476 payload:
477 description: A piece of arbitrary JSON with a type field attached
478 type: object
479 required:
480 - datatype
481 - data
482 properties:
483 data:
484 example: '{"some":"json"}'
485 type: object
486 datatype:
487 example: urn:example:my-json#payload
488 type: string
489
490 dataform:
491 description: Data form
492 type: object
493 properties:
494 title:
495 description: Title of the form
496 example: TPS Report
497 type: string
498 fields:
499 type: array
500 items:
501 description: Form field
502 type: object
503 properties:
504 value:
505 description: Field value
506 oneOf:
507 - type: string
508 - type: array
509 items:
510 type: string
511 type:
512 description: Type of form field
513 type: string
514 label:
515 description: Descriptive label for the field
516 type: string
517 desc:
518 description: Longer description, i.e. that would go in a tooltip
519 type: string
520 required:
521 description: Whether the field must be included in the form
522 type: boolean
523 var:
524 description: Internal name of the field
525 type: string
526 type:
527 type: string
528 enum:
529 - form
530 - submit
531 - cancel
532 - result
533 instructions:
534 type: string
535
536 formdata:
537 description: Simplified data form carrying only values
538 type: object
539 additionalProperties:
540 oneOf:
541 - type: string
542 - type: array
543 items:
544 type: string
545
546 stats:
547 description: Statistics
548 type: array
549 items:
550 type: object
551 properties:
552 name:
553 type: string
554 unit:
555 type: string
556 value:
557 type: string
558
559 error:
560 description: Description of something gone wrong. See the Stanza Errors section in RFC 6120.
561 type: object
562 properties:
563 type:
564 description: General category of error
565 type: string
566 enum:
567 - auth
568 - cancel
569 - continue
570 - modify
571 - wait
572 condition:
573 description: Specific error condition.
574 type: string
575 # enum: [ full list available in RFC 6120 ]
576 code:
577 description: Legacy numeric error code. Similar to HTTP status codes.
578 type: integer
579 text:
580 description: Description of error intended for human eyes.
581 type: string
582
583 securitySchemes:
584 token:
585 description: Tokens from mod_http_oauth2.
586 scheme: Bearer
587 type: http
588 basic:
589 description: Use JID as username.
590 scheme: Basic
591 type: http
592
593 requestBodies:
594 common:
595 required: true
596 content:
597 application/json:
598 schema:
599 $ref: '#/components/schemas/stanza'
600 application/xmpp+xml:
601 schema:
602 description: Single XMPP stanza in XML format.
603 application/x-www-form-urlencoded:
604 schema:
605 description: A subset of the JSON schema, only top level string fields.
606
607 responses:
608 success:
609 description: The stanza was sent and returned a response.
610 content:
611 application/json:
612 schema:
613 $ref: '#/components/schemas/stanza'
614 application/xmpp+xml:
615 schema:
616 description: Single XMPP stanza in XML format.
617 example: <message><body>Hello</body></message>
618 application/x-www-form-urlencoded:
619 schema:
620 description: A subset of the JSON schema, only top level string fields.
621 example: body=Hello
622 text/plain:
623 schema:
624 description: Plain text response used as message body.
625 example: Hello
626 type: string
627 sent:
628 description: The stanza was sent without problem, and without response,
629 so an empty reply.
630
631 parameters:
632 to:
633 name: to
634 in: path
635 required: true
636 schema:
637 $ref: '#/components/schemas/to'
638 kind:
639 name: kind
640 in: path
641 required: true
642 schema:
643 $ref: '#/components/schemas/kind'
644 type:
645 name: type
646 in: path
647 required: true
648 schema:
649 $ref: '#/components/schemas/type'
650
651 ...