API Idéfix

Mis à jour le 2022-01-26

Ce document décrit l'interface de programmation (en anglais, abbrévié API) offerte par le SRAM pour récupérer des fichiers au format Idéfix. Le format de ces documents est lui-même décrit par un schéma XSD.

Cet API permet de demander la production des fichiers ainsi que leur récupération à partir d'un même serveur. L'API se conforme au style d'architecture REST, offrant des ressources à des URLs spécifiques sur un serveur Web et acceptant une série d'actions sur ces ressources. Une familiarité avec ce style d'architecture est recommandé avant la lecture de ce document.

#Hôtes et version

L'interface programmaticale est hébergée au sein du site classer-direct-sram.qc.ca et est disponible à partir de l'URL https://classer-direct-sram.qc.ca/v1. Le préfixe de chemin v1 ici indique la version de l'API qui se retrouve à cette adresse (1). Tout changement important à l'interface programmaticale entrainera une augmentation de ce numéro de version, permettant l'existence concurrente de plusieurs versions.

Les chemins d'URLs contenus dans ce document et servant à décrire les diverses ressources pouvant être manipulées assument toutes appartenir à ce serveur.

Le serveur doit être accédé par HTTPS, et donc par le port 443.

#Format

L'API utilise le format de données JSON encodé selon l'encodage de caractères UTF-8, à l'exception des fichiers Idéfix eux-mêmes qui sont des documents au format XML.

À moins qu'il en soit indiqué autrement, le corps des requêtes POST et PUT doit être un objet JSON. Les requêtes de type POST et DELETE ont plutôt leurs paramètres passés dans la query string. Un array passé dans une query string l'est en créant une chaine dont les éléments sont séparés par des virgules. Par exemple, la chaine AB,CD,EF dans une query string correspond, en JSON à:

["AB", "CD", "EF"]

#Gestion des erreurs

Toutes les méthodes, en plus d’un code de retour HTTP approprié, retournent, lorsque le Content-Type est application/json et qu’une erreur s'est produite un objet JSON décrivant l'erreur:

{
  "code": 1001,
  "message": "Query string invalide"
}

Quand il y a des champs impliqués dans l'erreur, par exemple des paramètres sont invalides, l'objet retourné pourrait inclure un attribut erreurs indiquant quels champs sont en erreur:

{
  "code": 1001,
  "message": "Query string invalide",
  "erreurs": [
    {
      "champ": "session",
      "code": 1002,
      "message": "Cette valeur est requise."
    }, {
      "champ": "tour",
      "code": 1002,
      "message": "Cette valeur doit être un entier entre 1 et 4 ou la chaine 'ls24'."
    }
  ]
}

#Authentification

L'accès aux fonctions du système requiert qu'une clé d'API soit envoyée avec chaque requête au système. Cette clé est rattachée à un utilisateur, soit une personne ou un système, et reçoit un sous-ensemble des permissions de l'utilisateur. Dans ce cas-ci, la permission d'accéder aux fonctions Idéfix du système Classer-Direct. Les collèges auxquels une clé donne accès sont ceux auxquels l'utilisateur a accès. Chaque clé est une séquence de caractères alphanumériques et d'un seul point, par exemple:

3mB7rdca.WXf2Ny86DJL7zVZB7pbT

Pour des raisons de sécurité, la clé est souvent identifiée uniquement par la partie précédent le point. Par contre, la clé entière doit être fournie au système Classer-Direct afin d'avoir accès à ses fonctions.

La clé est passée au système via l'entête HTTP Authorization avec le schème Bearer. La clé ne doit pas être encodée en base64 ou tout autre encodage spécial. Pour la clé mentionnée ci-haut, cela donnerait:

Authorization: Bearer 3mB7rdca.WXf2Ny86DJL7zVZB7pbT

Une clé peut être activée et désactivée par l'utilisateur associé à la clé et n'est plus valide dès que les permissions pour cette utilisateur sont retirés par le SRAM. Il est donc préférable d'utiliser une clé pour chaque utilisateur du programme effectuant l'accès aux fichiers Idéfix, plutôt qu'une clé par application et ce, même si la précédente version du système utilisait un utilisateur SRAM par collège dont le nom et le mot de passe était partagé par tous les utilisateurs effectifs du système. Dans le cas où cela s'avèrerait techniquement impossible, le SRAM permet aussi l'emploi d'un utilisateur par collège. Dans tous les cas, le client travaillant dans un collège devrait être celui qui a accès à la clé d'API, l'entrant à un endroit approprié dans l'application, plutôt que le développeur de l'application. La gestion de la clé d'API se fait par l'entremise du site Voute et sa création initiale requiert une demande d'accès au SRAM.

#Limites de rythme

Pour l'instant, le SRAM n'impose aucune limite explicite sur le nombre de requêtes pouvant être effectuées dans une période donnée. Il se réserve cependant le droit d'imposer une telle limite sans préavis. Dans quel cas, les requêtes retourneraient le code HTTP 429 Too Many Requests.

Afin d'éviter l'imposition de telles limites, cependant, nous vous demandons de vous limiter à au plus une requête par seconde par client (ex.: par cégep ou par poste de travail). De plus, puisque la génération de fichiers peut prendre jusqu'à plusieurs minutes, vous ne devriez pas appeler la ressource pour le contenu d'un fichier moins de 10 secondes après avoir obtenu le code 404 Not Found ou 450 pour cette exacte ressource.

#Principe général

Le système reçoit des requêtes de génération de fichiers Idéfix. Une requête peut ne générer aucun fichier, en générer un seul ou en générer plusieurs. Ces requêtes sont ajoutées au système immédiatement via l'API, mais les fichiers à produire pour une requête donnée sont traités un à la fois par le système. Le programme qui interface via l'API devrait donc minimalement procéder selon les étapes suivantes:

  1. Demander l'ajout d'une requête de fichiers Idéfix (POST /v1/idefix);
  2. Obtenir le détail de la requête ajoutée (GET /v1/idefix/{id_requete});
  3. Pour chaque fichier à générer pour la requête:
    1. Demander le contenu du fichier (GET /v1/idefix/{id_requete}/fichiers/{id_fichier}/contenu);
    2. Si code de la réponse est 200, le corps de la réponse sera le fichier Idéfix produit et le programme peut passer au prochain fichier;
    3. Sinon, attendre au moins 10 secondes;
    4. Répéter la demande de contenu.

Les requêtes et les fichiers périmés n'ont pas besoin d'être explicitement supprimés par l'appelant; ceux-ci sont automatiquement retirés après un certain temps.

#Actions

VerbeCheminAction
GET/v1/idefixLister les requêtes
POST/v1/idefixAjouter une requête
GET/v1/idefix/{id_requete}Obtenir le détail d'une requête
GET/v1/idefix/{id_requete}/fichiersLister les fichiers produits par une requête
GET/v1/idefix/{id_requete}/fichiers/{id_fichier}Obtenir le détail d'un fichier à produire
GET/v1/idefix/{id_requete}/fichiers/{id_fichier}/contenuObtenir le contenu d'un fichier

#Lister les requêtes

Chemin: /v1/idefix
Verbe HTTP: GET
Entête Accept: application/json

Description:

Retourne les requêtes de fichiers Idéfix demandées par l'utilisateur associé à la clé d'API utilisée. Les requêtes peuvent être filtrées par les paramètres ayant été spécifié lors de leur ajout au système.

Les requêtes désuettes qui ont été retirées par le système ne sont pas listées et aucune pagination n'est offerte.

Paramètres (query string):

colleges
type: array de strings optionnel

Les codes des collèges auxquels limiter les résultats.

session
type: string optionnel

L'année-session, sous forme numérique (ex.: 20223), à laquelle limiter les résultats.

tour
type: integer ou string optionnel

Le tour (1 à 4) auquel limiter les résultats ou la chaine "ls24" pour limiter aux requêtes ayant été demandée dans le format LS24 plutôt qu'à un tour donné.

typeAdmission
type: string optionnel

Le type d'admission ("REG", "INT", "FCO") auquel limiter les résultats.

Résultat:

Un array d'objets JSON ayant les attributs suivants:

Attribut Type Description
id integer L'identifiant unique de la requête.
href string Un URL pointant vers la ressource de la requête.
dateHeureAjout string La date et l'heure auxquelles la requête a été ajoutée au système, sous le format AAAA-MM-JJ HH:mm:ss.

Erreurs:

#Ajouter une requête

Chemin: /v1/idefix
Verbe HTTP: POST
Entête Accept: application/json

Description:

Ajoute une requête de production de fichiers au système. Le système retourne immédiatement la ressource correspondante, mais les fichiers seront produits au fur-et-à-mesure que les ressources seront disponibles pour le faire. Normalement, une requête produira un fichier par collège, session et tour ayant des candidats concernés.

Paramètres (corps):

colleges
type: array de strings

Les codes des collèges auxquels limiter les fichiers produits.

groupe
type: string optionnel

Le nom du groupe de la formation continue auquel limiter les fichiers.

nosDaSession
type: array de strings optionnel

La liste des numéros de DA session des dossiers à inclure dans les fichiers produits. Aucun numéro ne peut être présent plus d'une fois dans la liste.

particularite
type: string optionnel

Le code de trois caractères (ex.: "PR1") identifiant la particularité à laquelle limiter les fichiers.

programme
type: string optionnel

Le numéro du programme auquel limiter les fichiers.

session
type: string

L'année-session, sous forme numérique (ex.: 20223), à laquelle limiter les fichiers produits.

tour
type: integer ou string optionnel

Le tour (1 à 4) auquel limiter les fichiers produits ou la chaine "ls24" pour produire les fichiers dans le format LS24 plutôt qu'à un tour donné.

typeAdmission
type: string

Le type d'admission ("REG", "INT", "FCO") auquel limiter les fichiers.

Si nosDaSession est spécifié, colleges et session deviennent optionnels.

Résultat:

Un objet JSON ayant les attributs suivants:

Attribut Type Description
id integer L'identifiant unique de la requête.
href string Un URL pointant vers la ressource de la requête.
dateHeureAjout string La date et l'heure auxquelles la requête a été ajoutée au système, sous le format AAAA-MM-JJ HH:mm:ss.
typeAdmission string Le type d'admission pour lequel des fichiers sont demandés ("REG", "INT", "FCO").
session string ou null L'année-session, sous forme numérique (ex.: 20223), pour laquelle des fichiers sont demandés.
tour integer ou string ou null Le tour (1 à 4) pour lequel les fichiers sont demandés ou la chaine "ls24" si la requête a été demandée dans le format LS24 plutôt qu'à un tour donné.
colleges array de strings ou null La liste des codes de collèges pour lequels les fichiers sont demandés.
programme string ou null Le code du programme pour lequel les fichiers sont demandés.
groupe string ou null Le nom du groupe à la formation continue pour lequel les fichiers sont demandés.
nosDaSession array de strings ou null La liste des numéros de DA session à inclure dans les fichiers demandés.
fichiers array d'objets Un sommaire des fichiers à produire. Chaque objet a les attributs suivants:
  • id (integer): L'identifiant unique du fichier.
  • href (string): Un URL pointant vers la ressource du fichier.

Erreurs:

#Obtenir le détail d'une requête

Chemin: /v1/idefix/{id_requete}
Verbe HTTP: GET
Entête Accept: application/json

Description:

Retourne le détail complet d'une requête de fichiers Idéfix.

Résultat:

Un objet JSON ayant les mêmes attributs que pour l'ajout d'une requête.

Erreurs:

#Lister les fichiers produits par une requête

Chemin: /v1/idefix/{id_requete}/fichiers
Verbe HTTP: GET
Entête Accept: application/json

Description:

Retourne la liste des fichiers qui sont à produire pour la requête donnée.

Résultat:

Un array d'objets JSON ayant les attributs suivants:

Attribut Type Description
id integer L'identifiant unique du fichier.
href string Un URL pointant vers la ressource du fichier.

Erreurs:

#Obtenir le détail d'un fichier à produire

Chemin: /v1/idefix/{id_requete}/fichiers/{id_fichier}
Verbe HTTP: GET
Entête Accept: application/json

Description:

Retourne le détail complet d'un fichier à produire.

Résultat:

Un objet JSON ayant les attributs suivants:

Attribut Type Description
id integer L'identifiant unique du fichier.
href string Un URL pointant vers la ressource du fichier.
session string L'année-session contenue dans le fichier sous forme numérique (ex.: 20223).
tour integer ou string Le tour (1 à 4) contenu dans le fichier ou la chaine "ls24" si le fichier a été demandé dans le format LS24 plutôt qu'à un tour donné.
programme string ou null Le numéro du programme contenu dans le fichier.
particularite string ou null Le code de trois caractères (ex.: "PR1") identifiant la particularité contenue dans le fichier.
groupe string ou null Le nom du groupe à la formation continue contenu dans le fichier.
nosDaSession array de strings La liste des numéros de DA session contenus dans le fichier.
disponible boolean true si le contenu du fichier est prêt à être récupéré.
dateHeure string La date et l'heure auxquelles le fichier à commencé à être produit, sous le format AAAA-MM-JJ HH:mm:ss.
nom string Le nom suggéré pour le fichier.

Erreurs:

#Obtenir le contenu d'un fichier

Chemin: /v1/idefix/{id_requete}/fichiers/{id_fichier}/contenu
Verbe HTTP: GET
Entête Accept:
  • application/xml
  • text/xml

Description:

Retourne le contenu d'un fichier Idéfix si celui-ci est disponible.

Résultat:

Le contenu du fichier Idéfix. Le contenu n'est pas en JSON, mais est plutôt retourné directement.

Erreurs: