Paillasse/portail/public/openapi/v1.yaml

176 lines
4.8 KiB
YAML
Raw Normal View History

openapi: 3.0.3
info:
title: Syllabus — API publique
version: "1.0"
description: >
Catalogue en lecture seule (labs, banque de quiz officielle, cours).
Aucune donnée d'élève. Jeton créé depuis /jetons-api (compte prof).
contact:
email: adam@belkacemi.me
servers:
- url: https://syllabuslab.fr/api/v1
security:
- bearerAuth: []
paths:
/labs:
get:
summary: Liste des labs du catalogue
operationId: listerLabs
tags: [Labs]
responses:
"200":
description: Liste des labs
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/Lab"
/labs/{identifiant}:
get:
summary: Détail d'un lab
operationId: lireLab
tags: [Labs]
parameters:
- $ref: "#/components/parameters/IdentifiantLab"
responses:
"200":
description: Le lab
content:
application/json:
schema:
type: object
properties:
data:
$ref: "#/components/schemas/Lab"
"404":
description: Lab introuvable
/quiz:
get:
summary: Liste des quiz de la banque officielle
operationId: listerQuiz
tags: [Quiz]
responses:
"200":
description: Liste des quiz (métadonnées seulement, jamais les questions)
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/Quiz"
/quiz/{id}:
get:
summary: Détail d'un quiz (métadonnées)
operationId: lireQuiz
tags: [Quiz]
parameters:
- name: id
in: path
required: true
schema:
type: integer
responses:
"200":
description: Le quiz
content:
application/json:
schema:
type: object
properties:
data:
$ref: "#/components/schemas/Quiz"
"404":
description: Quiz introuvable ou non partagé
/cours:
get:
summary: Liste des cours du catalogue
operationId: listerCours
tags: [Cours]
responses:
"200":
description: Liste des cours (sans le contenu complet)
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/CoursResume"
/cours/{identifiant}:
get:
summary: Détail d'un cours, avec son contenu
operationId: lireCours
tags: [Cours]
parameters:
- name: identifiant
in: path
required: true
schema:
type: string
example: 08-deux-lan-routeur
responses:
"200":
description: Le cours
content:
application/json:
schema:
type: object
properties:
data:
$ref: "#/components/schemas/Cours"
"404":
description: Cours introuvable
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Jeton créé depuis /jetons-api. 60 requêtes par minute et par jeton.
parameters:
IdentifiantLab:
name: identifiant
in: path
required: true
schema:
type: string
example: 08-deux-lan-routeur
schemas:
Lab:
type: object
properties:
identifiant: { type: string, example: 08-deux-lan-routeur }
titre: { type: string, example: Deux LAN et un routeur }
niveau: { type: string, nullable: true, example: decouverte }
duree_min: { type: integer, nullable: true, example: 45 }
competences:
type: array
items: { type: string }
example: [adressage-ipv4, routage-statique]
Quiz:
type: object
properties:
id: { type: integer, example: 7 }
titre: { type: string, example: Un serveur web et son client }
theme: { type: string, nullable: true, example: SRV }
questions_count: { type: integer, example: 6 }
CoursResume:
type: object
properties:
identifiant: { type: string, example: 08-deux-lan-routeur }
titre: { type: string, example: Deux LAN et un routeur }
Cours:
allOf:
- $ref: "#/components/schemas/CoursResume"
- type: object
properties:
contenu_markdown: { type: string }