Ajouts détails sur config. d'un utilisateur pour l'API

This commit is contained in:
Emmanuel Viennet 2022-04-26 13:48:25 +02:00
parent 42f4fe05ff
commit 5b1ad81249

View File

@ -1,5 +1,5 @@
# API pour ScoDoc 9
## API pour ScoDoc 9
L'API ScoDoc permet à des applications tierces d'interroger ScoDoc. Elle offre un accès aux informations aux formats XML et JSON.
La version ScoDoc 9 a introduit une nouvelle API avec un nouveau mécanisme d'authentification.
@ -24,45 +24,51 @@ Les objets ScoDoc manipulables sont identifiés par des id.
L'URL complète est de la forme: `https://scodoc.example.com/ScoDoc/api/fonction`.
# Fonctions de l'API ScoDoc 7 portées en ScoDoc 9
## Configuration de ScoDoc pour utiliser l'API
L'ancienne API ScoDoc 7 est décrite ici: [ScoDocAPI](ScoDocAPI.md)
Il est nécessaire de disposer d'un compte utilisateur avec les droits adéquats.
Afin de garantir l'interopérabilité avec les clients ScoDoc 7 (ENT, etc), les
fonctions suivantes sont disponibles avec le mécanisme d'authentification
basique de ScoDoc 7. Elles sont considérées comme *obsolètes* ("deprecated") et
disparaitront en juillet 2022.
En général, il est recommandé de créer un rôle, de lui attribuer les permissions
que l'on veut utiliser, puis de créer un utilisateur ayant ce rôle.
Certaines ont plusieurs "routes" (URl), car ScoDoc 7 tolérait divers accès.
En ligne de commande, cela peut se faire comme suit (voir détail des commandes
[sur le guide de configuration](GuideConfig.md)).
- `Absences/XMLgetBilletsEtud` (deviendra `api/absences/billets/etud/ etudid>`)
- `Absences/AddBilletAbsence` (deviendra `api/absences/billet/add`)
- `Absences/XMLgetAbsEtud` (deviendra `api/absences/ etudid>`, en json)
- `Notes/evaluation_listenotes` (non existante en ScoDoc9, trop complexe)
- `Notes/formsemestre_id` (deviendra `api/formsemestre`)
- `Notes/formsemestre_bulletinetud` (deviendra `api/etud/<etudid>/bul/<formsemestre_id>`)
- `Notes/XMLgetFormsemestres` (non existante en ScoDoc9, redondant avec `api/formsemestre` ?)
- `etud_info` ou `XMLgetEtudInfos` ou `Absences/XMLgetEtudInfos` ou `Notes/XMLgetEtudInfos` (deviendra `/api/etud/<etudid>`)
- `groups_view` (deviendra `groups`)
```
# se connecter comme utilisateur scodoc
su - scodoc
Les routes ci-dessus s'entendent à partir de l'URL de base de votre ScoDoc, c'est
à dire `https://votre.site.fr/ScoDoc/<dept>/Scolarite/`, et répondent en GET et
en POST.
# Créer un rôle
flask create-role LecteurAPI
# Lui donner les droits nécessaires: ici APIView
flask edit-role LecteurAPI -a APIView
Note:
- `Absences/listeBillets` est un formulaire et ne fait pas partie de l'API.
# Créer un nouvel utilisateur avec ce rôle:
flask user-create lecteur_api LecteurAPI @all
# Fonctions d'API ScoDoc 9 (work in progress)
# Ou bien, si on veut utiliser un compte existant:
# associer notre rôle à un utilisateur
flask user-role lecteur_api -a LecteurAPI
# Au besoin, changer le mot de passe de l'utilisateur
# (on aura besoin de ce mot de passe dans la configuration du client d'API)
flask user-password lecteur_api
...
```
## Fonctions d'API ScoDoc 9 (work in progress)
Basé sur le ticket [#149](https://scodoc.org/git/viennet/ScoDoc/issues/149)
La documentation ci-dessous concerne la **future** version De ScoDoc.
La documentation ci-dessous concerne la **future** version de ScoDoc (9.3, avec
parties expérimentales progressivement mises en production à partir de 9.2.12).
## Accès à l'API REST
### Accès à l'API REST
Elle sera accessible à l'adresse: https://scodoc.monsite.tld/ScoDoc/api/fonction
### Authentification
#### Authentification
Lors de votre authentification (_connection avec login et mdp_) à Scodoc, il
vous sera attribué un jeton (token jwt _généré automatiquement_) vous permettant
@ -87,7 +93,7 @@ La réponse doit ressembler à ceci:
Vous trouverez dans `/opt/scodoc/tests/api/exemple-api-basic.py` un exemple
complet en python d'interrogation de l'API.
### Codes HTTP
#### Codes HTTP
Chaque appel à l'API donne lieu à une réponse retournant un code spécifique en
fonction du résultat obtenu. L'analyse de ce code vous permet de vous assurer
que la requête a été traitée avec succès.
@ -105,7 +111,7 @@ Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succ
* [503](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/503) : L'API est momentanément indisponible, réessayez dans quelques minutes.
## Départements
### Départements
* **`departements`**
* **Méthode:** GET
* **Paramètres:** `viewable` (optionnel, si faux liste aussi les
@ -142,7 +148,7 @@ Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succ
* XXX obtenir la liste des référentiels
## Etudiants
### Etudiants
* **`etud_dept`**
* **Méthode:** GET
* **Paramètres:** `code_nip`
@ -452,7 +458,7 @@ formsemestre_id": "SEM12345",
}
```
## UE
### UE
* **`UEs`**
* **Méthode:** GET
* **Paramètres:** `dept`, `̀semestre`
@ -463,7 +469,7 @@ formsemestre_id": "SEM12345",
## Semestres de formation
### Semestres de formation
Les sessions de formation (dénommées "semestres" même si elles durent une année ou un mois) sont représentées par les `formsemestre`.
* **`formsemestre`**
@ -493,7 +499,7 @@ Les sessions de formation (dénommées "semestres" même si elles durent une ann
]
```
### Note sur les identifiants de sessions
#### Note sur les identifiants de sessions
Le `session_id` peut être utilisé pour identifier de façon prévisible et
(presque) unique une session dans un établissement, ce qui est utile
notamment pour interfacer ScoDoc à d'autres logiciels (par exemple gestion d'emplois
@ -514,7 +520,7 @@ informations suivantes:
**Exemple:** `INFO-DUT-FI-S1-2014` équivaut à un semestre S1 d'un DUT informatique de 2014 en formation initiale (FI)
## Modules de formation
### Modules de formation
Les moduleimpl sont les modules d'un semestre, ou les ressources, ou les SAÉs.
On peut récupérer soit un module par son id, soit la listes des modules d'un semestre.
@ -530,7 +536,7 @@ On peut récupérer soit un module par son id, soit la listes des modules d'un s
## Groupes et partitions
### Groupes et partitions
L'ensemble des étudiants d'un semestre peut être réparti selon une ou
plusieurs partitions (types de groupes). Chaque partition est constituée
@ -664,7 +670,7 @@ d'un nombre quelconque de groupes d'étudiants.
TODO: à changer, passer les paramètres dans le corps de la requête
## Bulletins de notes
### Bulletins de notes
* **`evaluations`**
* **Méthode:** GET
* **Paramètres:** `moduleimpl_id`
@ -702,7 +708,7 @@ d'un nombre quelconque de groupes d'étudiants.
TODO vérifier et passer les valeurs dans le corps.
## Absences
### Absences
**Remarques**, les dates sont au format iso `yyyy-mm-dd`. Les dates de fin ne sont pas incluses. Et `demi_journee`= 2 si journée complète, =1 si uniquement le matin, =0 si uniquement l'après-midi.
@ -762,7 +768,7 @@ d'un nombre quelconque de groupes d'étudiants.
]
```
## Logos
### Logos
* **`liste des logos globaux`**
* **Méthode:** GET
@ -798,6 +804,33 @@ d'un nombre quelconque de groupes d'étudiants.
* **Résultat :** l'image (format png ou jpg)
## En savoir plus
### En savoir plus
Voir exemples d'utilisation de l'API en Python, dans `tests/api/`.
## Fonctions de l'API ScoDoc 7 portées en ScoDoc 9
L'ancienne API ScoDoc 7 est décrite ici: [ScoDocAPI](ScoDocAPI.md)
Afin de garantir l'interopérabilité avec les clients ScoDoc 7 (ENT, etc), les
fonctions suivantes sont disponibles avec le mécanisme d'authentification
basique de ScoDoc 7. Elles sont considérées comme *obsolètes* ("deprecated") et
disparaitront en juillet 2022.
Certaines ont plusieurs "routes" (URl), car ScoDoc 7 tolérait divers accès.
- `Absences/XMLgetBilletsEtud` (deviendra `api/absences/billets/etud/ etudid>`)
- `Absences/AddBilletAbsence` (deviendra `api/absences/billet/add`)
- `Absences/XMLgetAbsEtud` (deviendra `api/absences/ etudid>`, en json)
- `Notes/evaluation_listenotes` (non existante en ScoDoc9, trop complexe)
- `Notes/formsemestre_id` (deviendra `api/formsemestre`)
- `Notes/formsemestre_bulletinetud` (deviendra `api/etud/<etudid>/bul/<formsemestre_id>`)
- `Notes/XMLgetFormsemestres` (non existante en ScoDoc9, redondant avec `api/formsemestre` ?)
- `etud_info` ou `XMLgetEtudInfos` ou `Absences/XMLgetEtudInfos` ou `Notes/XMLgetEtudInfos` (deviendra `/api/etud/<etudid>`)
- `groups_view` (deviendra `groups`)
Les routes ci-dessus s'entendent à partir de l'URL de base de votre ScoDoc, c'est
à dire `https://votre.site.fr/ScoDoc/<dept>/Scolarite/`, et répondent en GET et
en POST.
Note:
- `Absences/listeBillets` est un formulaire et ne fait pas partie de l'API.