Pages enfant
  • MDWP -2- APIs Pégase

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

Sommaire

...

Architecture

MDW est autorisé à interroger les APIs Pégase en s'identifiant à l'aide d'un token (JWT). Ce dernier est obtenu en s'authentifiant (username + passwordd) auprès du serveur OAuth dédié.

...

Info
Le paramètre pegase.accesstoken.duration (application.properties) permet d'indiquer la durée (en heure) de conservation du token.

APIs utilisées

Exemple de configuration

Voici un exemple des URLs à configurer dans la vue "Configuration" de l'application

APIvariablesURL exemple
OAuth
url_authn_app_ticketshttps://authn-app.univ.pc-scol.fr/cas/v1/tickets
INS EXT
url_api_ins_ext
https://ins.univ.pc-scol.fr/api/ins/ext/v1
INS
url_api_inshttps://ins.univ.pc-scol.fr/api/v5/ins
CHC
url_api_chc
https://chc.univ.pc-scol.fr/api/chc/v6
COC
url_api_cochttps://coc.univ.pc-scol.fr/api/coc/publication/v2
PAI
url_api_pai
https://pai.univ.pc-scol.fr/api/v1

Méthodes utilisées

URL (voir variables ci-dessus)Module/APIMéthodeUtilisation

url_authn_app_tickets

serveur OAuth
Récupération du Jeton JWT pour authentification des API
url_api_ins_ext/gestion/inscription/${etab}/${codeApprenant}INS EXTlireInscriptionsRécupération du dossier de l'apprenant et de ses inscriptions
url_api_ins/gestion/inscriptions/${etab}/${codeApprenant}/${codeVoeu}/certificat-de-scolariteINSimprimerCertificatDeScolariteRécupération du certificat de scolarité
url_api_ins_ext/gestion/inscriptions/${etab}/${codeApprenant}/${codeVoeu}/${codePiece}/contenuINS EXTcontenuPieceRécupération de la photo de l'étudiant

url_api_chc/cursus-dca?codeApprenant={codeApprenant}

CHC

lireCursusApprenant

Récupération du cursus
url_api_coc/etablissements/${etab}/periodes/${codePeriode}/apprenants/${codeApprenant}/chemins/${chemin}COClisterCursusPubliableApprenantRécupération des notes et résultats de l'étudiant
url_api_pai/pai/attestation-de-paiement/${etab}/${codeApprenant}/${codePeriode}PAIimprimerAttestationDePaiementRécupération de l'attestation de paiement


Tester une API

Nous allons voir comment tester le bon fonctionnement d'une API en la requêtant "à la main".

Info
Plutôt que d'utiliser la commande "curl" pour executer les requêtes http, il possible d'utiliser un outil comme Insomnia afin de se faciliter la tâche.

Appeler une API s'effectue via une requête HTTP.

Pour être autorisé à appeler l'API d'un module Pégase, il faut préalablement avoir récupéré un token d'authentification.

Par exemple pour tester la méthode lireInscriptions de l'API INS (qui retourne la quasi totalité du dossier), il faut :

  1. Faire un premier appel (POST) au serveur OAuth pour récupérer le token
  2. Utiliser ce token pour appeler l'API (GET)

Récupération du token

Bloc de code
POST https://authn-app.[univ].pc-scol.fr/cas/v1/tickets?username=[username]&password=[password]

Le username et le password à passer sont ceux permettant d'identifier MDW auprès du serveur OAuth de Pégase.

Ces informations correspondent aux paramètres suivant dans application.properties :

  • pegase.accesstoken.url
  • pegase.accesstoken.username
  • pegase.accesstoken.password

Appel de l'API

Bloc de code
GET https://ins.[univ].pc-scol.fr/api/v5/ins/gestion/inscription/[codeEtablissement]/[codeApprenant]/

Ajouter la chaîne "Bearer " (attention à bien ajouter l'espace) au début du token et le passer dans un header nommé "Authorization".

Info
Via Postman le passage du token se fait facilement depuis l'onglet "Authorization" (Type "OAuth 2.0")

L'url de l'API et le code établissement correspondent aux paramètres suivant dans application.properties :

  • pegase.api.ins.url
  • pegase.etablissement


Génération des classes clientes java

MDW embarque directement dans son code les classes java clientes utilisées pour interroger les APIs. Il n'y a pas de dépendance vers une librairie externe.

...

Dans un soucis de transparence et afin de permettre de rejouer cette procédure (normalement pas nécessaire), voici, ci-dessous, la démarche utilisée lors du développement.

Installation d'OpenAPI Generator

Télécharger la version zip de node (https://nodejs.org/en/download/) et dézipper puis :

Bloc de code
languagebash
# Se rendre dans le répertoire d'installation
cd E:/node-v14.16.0-win-x64

# Installer openapi-generator-cli
npm install @openapitools/openapi-generator-cli
npm install @openapitools/openapi-generator-cli -g

# Forcer l'utilisation de la version 5.4.0  
# /!\ IMPORTANT /!\  A vérifier avant chaque génération sous peine d'obtenir des imports non valides
openapi-generator-cli version-manager set 5.4.0

# Aide sur la config
npx @openapitools/openapi-generator-cli config-help -g jav

Génération du client java

Exemple pour générer les classes de clients java des principales API :

Copier les YML descripteurs des APIs Pégase dans C:\tmp\YML et lancer depuis le répertoire où se trouve le YAML une génération des classes java :

Bloc de code
languagebash
titleGénération des clients java à partir des yaml
# Forcer l'utilisation de la version 5.4.0  
# /!\ IMPORTANT /!\  A vérifier avant chaque génération sous peine d'obtenir des imports non valides
openapi-generator-cli version-manager set 5.4.0

# INS EXT YAML
npx @openapitools/openapi-generator-cli generate -i inscription-ext-api-v1-1.2.0.yaml -g java -o C:/tmp/openapi-generator/ -p apiPackage=fr.univlorraine.pegase.api.insext -p modelPackage=fr.univlorraine.pegase.model.insext -p dateLibrary=java17-localdatetime

# INS GESTION YAML 
npx @openapitools/openapi-generator-cli generate -i ins-gestion-api-v5-1620.0.0.yaml -g java -o C:/tmp/openapi-generator/ -p apiPackage=fr.univlorraine.pegase.api.insgestion -p modelPackage=fr.univlorraine.pegase.model.insgestion -p dateLibrary=java8java17-localdatetime
 
# CHC YAML
npx @openapitools/openapi-generator-cli generate -i chc-application-api-v5v6-6.2.4.0.yml -g java -o C:/tmp/openapi-generator/ -p apiPackage=fr.univlorraine.pegase.api.chc -p modelPackage=fr.univlorraine.pegase.model.chc -p dateLibrary=java8java17-localdatetime --skip-validate-spec

   
# COC PAIPUBLICATION YAML 
npx @openapitools/openapi-generator-cli generate -i paicoc-publication-api-v1v2-162.0.0.yamlyml -g java -o C:/tmp/openapi-generator/ -p apiPackage=fr.univlorraine.pegase.api.paicoc -p modelPackage=fr.univlorraine.pegase.model.paicoc -p dateLibrary=java8java17-localdatetime --skip-validate-spec
 
# COC GESTIONPAI YAML
npx @openapitools/openapi-generator-cli generate -i coc-publicationpai-api-v1-121.10.0.ymlyaml -g java -o C:/tmp/openapi-generator/ -p apiPackage=fr.univlorraine.pegase.api.cocpai -p modelPackage=fr.univlorraine.pegase.model.cocpai -p dateLibrary=java8java17-localdatetime --skip-validate-spec

Récupérer le code généré dans le projet

Pour chaque API, récupérer Récupérer les classes des générées dans les répertoires :

  • / src/main/java/fr/univlorraine/pegase/api

  • /{NOM_API}
  • /src/main/java/fr/univlorraine/pegase/model

  • /{NOM_API}

Modification des classes générées

Il peut être nécessaire d'apporter des modifications au code généré.

Exemple :

  • Corriger l'assignation aux énumérations dans les constructeurs des classes qui le nécessite. Par exemple, le code :

    Bloc de code
    this.canalCommunication = this.getClass().getSimpleName();

    devient

    Bloc de code
    this.canalCommunication = CanalCommunicationEnum.fromValue(this.getClass().getSimpleName());


  • Supprimer l'attribut est1 et la constante SERIALIZED_NAME_EST1 de la classe Periode
  • Remplacer dans les classes qui le nécessite, le code :

    Bloc de code
    @javax.annotation.Generated

    par 

    Bloc de code
    @jakarta.annotation.Generated


Implémentation

Pour des exemples d'appels aux APIs effectués grâce aux classes générées ci-dessus, voir le code source du PegaseService sur github : https://github.com/EsupPortail/esup-mdw-pegase/blob/master/src/main/java/fr/univlorraine/mondossierweb/service/PegaseService.java

APIs utilisées

...

Tester une API

Nous allons voir comment tester le bon fonctionnement d'une API en la requêtant "à la main".

Info
Plutôt que d'utiliser la commande "curl" pour executer les requêtes http, il possible d'utiliser un outil comme Postman afin de se faciliter la tâche.

Appeler une API s'effectue via une requête HTTP.

Pour être autorisé à appeler l'API d'un module Pégase, il faut préalablement avoir récupéré un token d'authentification.

Par exemple pour tester la méthode lireInscriptions de l'API INS (qui retourne la quasi totalité du dossier), il faut :

  1. Faire un premier appel (POST) au serveur OAuth pour récupérer le token
  2. Utiliser ce token pour appeler l'API (GET)

Récupération du token

Bloc de code
POST https://authn-app.[univ].pc-scol.fr/cas/v1/tickets?username=[username]&password=[password]

Le username et le password à passer sont ceux permettant d'identifier MDW auprès du serveur OAuth de Pégase.

Ces informations correspondent aux paramètres suivant dans application.properties :

  • pegase.accesstoken.url
  • pegase.accesstoken.username
  • pegase.accesstoken.password

Appel de l'API

Bloc de code
GET https://ins.[univ].pc-scol.fr/api/v5/ins/gestion/inscription/[codeEtablissement]/[codeApprenant]/

Ajouter la chaîne "Bearer " (attention à bien ajouter l'espace) au début du token et le passer dans un header nommé "Authorization".

Info
Via Postman le passage du token se fait facilement depuis l'onglet "Authorization" (Type "OAuth 2.0")

L'url de l'API et le code établissement correspondent aux paramètres suivant dans application.properties :

...