diff --git a/config/locales/api_entreprise/fr.yml b/config/locales/api_entreprise/fr.yml index 1e6cc3b99..824102ec2 100644 --- a/config/locales/api_entreprise/fr.yml +++ b/config/locales/api_entreprise/fr.yml @@ -435,7 +435,6 @@ fr: link_specs: 🎛 SpĂ©cifications gĂ©nĂ©rales link_kit: 🚀 Kit de mise en production link_preprod: 🧪 Environnement de test - link_return: Retour Ă  la documentation technique đź›  beta: label: Version beta color: purple-glycine diff --git a/config/locales/api_particulier/documentation.fr.yml b/config/locales/api_particulier/documentation.fr.yml index 22306f5ba..e56189062 100644 --- a/config/locales/api_particulier/documentation.fr.yml +++ b/config/locales/api_particulier/documentation.fr.yml @@ -2,6 +2,239 @@ fr: api_particulier: documentation_pages: + guide_migration: + title: Guide de migration đź“‹ + sections: + - anchor: 'introduction' + title: Introduction + content: |+ + **Ce guide liste les changements effectuĂ©s entre la version 2 de l’API Particulier et la version 3, et vous livre les Ă©lĂ©ments nĂ©cessaires pour effectuer la migration**. + + Les Ă©volutions prĂ©sentĂ©es ici ont Ă©tĂ© guidĂ©es par trois objectifs :  + - assurer une meilleure sĂ©curitĂ© de la donnĂ©e des fournisseurs ; + - normaliser les formats pour faciliter la comprĂ©hension et l’industrialisation ; + - clarifier la documentation et simplifier les routes des diffĂ©rentes modalitĂ©s d'appel ; + - clarifier, documenter les rĂ©ponses et les rendre actionnables par vos logiciels ; + - faire converger l'architecture technique de l'API Particulier avec celle de l'API Entreprise. + + {:.fr-highlight.fr} + > **Votre jeton d'accès reste identique 🔑** + > Pour accĂ©der Ă  la version 3 de l'API Particulier, utilisez le mĂŞme token qu'en V.2. En effet, tant que votre jeton est valide, il est inutile de refaire une demande d'accès car la migration vers la V.3 ne change pas les droits que vous avez dĂ©jĂ  obtenu. + - anchor: 'evolutions-generales' + title: Évolutions gĂ©nĂ©rales + subsections: + - title: 1. Jeton d'accès Ă  paramĂ©trer dans le header + anchor: 'jeton-daccès-Ă -paramĂ©trer-dans-le-header-' + content: |+ + **🚀 Avec la V.3 :** Le jeton est Ă  paramĂ©trer uniquement dans le header de l’appel. + + {:.fr-highlight.fr-highlight--example} + > **Avant** : Le jeton JWT pouvait ĂŞtre un paramètre de l’URL d’appel (query parameter). + + **🤔 Pourquoi ?** + - Respecter les standards de sĂ©curitĂ© ; + - Garantir que le token ne sera pas utilisĂ© dans un navigateur. + + **🧰 Comment ?** + Utilisez un client REST API pour tester les API pendant le dĂ©veloppement. + Des clients sont disponibles gratuitement. API Particulier utilise pour ses propres tests le client Insomnia. Le plus connu sur le marchĂ© est Postman. + Une fois le client installĂ©, vous pouvez directement intĂ©grer notre fichier [Swagger/OpenAPI](<%= developers_openapi_path %>){:target="_blank"} dedans. + + - title: 2. Votre numĂ©ro de SIRET obligatoire dans le "recipient" + anchor: 'votre-numĂ©ro-de-siret-obligatoire-dans-le-recipient' + content: |+ + **🚀 Avec la V.3 :** Le paramètre obligatoire `recipient` de l’URL d’appel devra obligatoirement ĂŞtre complĂ©tĂ© par votre numĂ©ro de SIRET. + + {:.fr-highlight.fr-highlight--example} + > **Avant** : Ce paramètre obligatoire n’était pas contraint en termes de syntaxe. + + **🤔 Pourquoi ?** + - Pour garantir la traçabilitĂ© de l’appel jusqu’au bĂ©nĂ©ficiaire ayant obtenu l’habilitation Ă  appeler l’API Particulier et respecter nos engagements auprès des fournisseurs de donnĂ©es ; + - Nous avions trop d’utilisateurs inscrivant le numĂ©ro de SIRET ou RNA de l’entreprise/association recherchĂ©e. + + {:.fr-highlight.fr-highlight--caution} + > **⚠️ Cas particulier**, _vous ĂŞtes un Ă©diteur ?_ + > Ce n’est pas votre numĂ©ro de SIRET mais celui de votre client public qu’il s’agira de renseigner. API Particulier doit pouvoir tracer pour quelle entitĂ© publique l'appel a Ă©tĂ© passĂ©. + + Pour en savoir plus sur les paramètres obligatoires d'appel, consultez les [spĂ©cifications techniques](<%= developers_path(anchor: 'renseigner-les-paramètres-dappel-et-de-traçabilitĂ©') %>). + + - title: 3. Codes erreurs spĂ©cifiques Ă  chaque situation, actionnables et documentĂ©s + anchor: 'codes-erreurs-spĂ©cifiques-Ă -chaque-situation-actionnables-et-documentĂ©s' + content: |+ + **🚀 Avec la V.3 :** Tous les codes erreur HTTPS sont accompagnĂ©s de codes plus prĂ©cis, spĂ©cifiques Ă  chaque situation d’erreur. Une explication en toutes lettres est Ă©galement donnĂ©e dans la payload. Enfin, dans certains cas, une mĂ©tadonnĂ©e actionnable est disponible. + + Dans l’exemple ci-dessous, la clĂ© `retry_in` permet de relancer un appel après le nombre de secondes indiquĂ©es. + + ###### Exemple de _payload_ d’un code HTTP 502 : + ``` + { + "errors": [ + { + "code": "04501", + "title": "Analyse de la situation du compte en cours", + "detail": "La situation de l'entreprise requiert une + analyse manuelle d'un agent de l'URSSAF. + Une demande d'analyse vient d'ĂŞtre envoyĂ©e, + cela prend au maximum 2 jours.", + "meta": { + "provider": "ACOSS", + "retry_in": 172800 + } + } + ] + } + ``` + + {:.fr-highlight.fr-highlight--example} + > Avant : Seul le code HTTP standard vous Ă©tait fourni. Il pouvait correspondre Ă  de nombreuses situations. + > ###### Exemple de payload d’un code HTTP 502 : + > ``` + > { + > "errors": [ + > "L'ACOSS ne peut rĂ©pondre Ă  votre requĂŞte, rĂ©essayez ultĂ©rieurement (erreur: Analyse de la situation du compte en cours)" + > ] + > } + > ``` + + **🤔 Pourquoi ?** + - Pour prĂ©ciser la nature de l’erreur et vous aider Ă  la comprendre ; + - Pour vous permettre d’actionner automatiquement l’erreur en utilisant le code. + + + **🧰 Comment ?** + Utiliser les libellĂ©s pour comprendre l’erreur rencontrĂ©e, voire automatiser votre logiciel en fonction du code. + La liste de tous les codes erreurs spĂ©cifiques (environ 80) est disponible dans le [Swagger](<%= developers_openapi_path %>){:target="_blank"}. La gestion des erreurs et l'explication des codes retours est dĂ©taillĂ©e dans la [documentation technique gĂ©nĂ©rale](<%= developers_path(anchor: 'code-https-et-gestion-des-erreurs') %>){:target="_blank"}. + + - title: 4. VolumĂ©trie indiquĂ©e dans le header et actionnable + anchor: 'volumĂ©trie-indiquĂ©e-dans-le-header-et-actionnable' + content: |+ + La gestion de la volumĂ©trie est maintenue identique Ă  la dernière Ă©volution de la V.2 et expliquĂ©e dans cette [documentation](<%= developers_path(anchor: 'volumĂ©trie') %>) + + - title: 5. Gestion des Ă©volutions futures + anchor: 'gestion-des-Ă©volutions-futures' + content: |+ + **🚀 Avec la V.3 :** Toutes les API pourront Ă©voluer indĂ©pendamment les unes des autres. Les anciennes versions resteront disponibles si le fournisseur de la donnĂ©e continue de nous transmettre les informations. Le numĂ©ro de version devient donc un paramètre de l’appel et non plus une valeur fixe pour toutes les API. + đź“© Une infolettre annoncera systĂ©matiquement les nouvelles Ă©volutions. + + {:.fr-highlight.fr-highlight--example} + > **Avant** : L’évolution d’un endpoint exigeait la montĂ©e en version de toute l’API. + + **🤔 Pourquoi ?** + - Permettre l’ajout de nouvelles informations sans forcer les fournisseurs de service Ă  monter de version ; + - Continuer de garantir la continuitĂ© des API dans le temps. + + **🧰 Comment ?** + Renseigner directement le numĂ©ro de la version voulue dans l’URL, au mĂŞme endroit qu’avant, par exemple : + ``` + https://particulier.api.gouv.fr/v3/mesri/statut_etudiant/identite + ``` + + - title: 6. Une route spĂ©cifique pour chaque modalitĂ© d'appel + anchor: 'une-route-specifique-pour-chaque-modalite-d-appel' + content: |+ + **🚀 Avec la V.3 :** Chaque modalitĂ© d'appel d'une API a son propre endpoint + + DĂ©sormais avec la V.3. chaque modalitĂ© d'appel a son propre endpoint, matĂ©rialisĂ© ainsi dans l'URL d'appel : + - `/identite`, pour les appels avec les paramètres de l'identitĂ© pivot du particulier ; + - `/france_connect`, pour les appels avec FranceConnect ; + - `/identifiant`, pour les appels avec un numĂ©ro unique spĂ©cifique Ă  l'API. + + {:.fr-highlight.fr-highlight--example} + > **Avant** : Dans la V.2., une seule route existait par API, ce qui signifiait que les diffĂ©rentes modalitĂ©s d'appel Ă©taient toutes documentĂ©es au mĂŞme endroit, entrainant plusieurs difficultĂ©s, dont notamment le fait de ne pas pouvoir rendre obligatoires certains paramètre pourtant obligatoires dans les faits. + + **🤔 Pourquoi ?** + - Clarifier la documentation des paramètres d'appel ; + - Identifier prĂ©cisĂ©mement les paramètres obligatoires ; + - Rendre actionnable le swagger et le fichier OpenAPI. + + **🧰 Comment ?** + Utiliser [le swagger](<%= developers_openapi_path %>){:target="_blank"}. + + - title: 7. Des payloads permettant de repĂ©rer plus facilement les scopes (droits d'accès) + anchor: 'payloads-permettant-de-reperer-les-scopes' + content: |+ + **🚀 Avec la V.3 :** Les scopes sont repĂ©rables plus facilement car ils sont incarnĂ©s par une seule clĂ© (qui peut ĂŞtre une clĂ© parente) et qui dans la mesure du possible se trouve Ă  la racine du tableau `"data"`. Ce changement est particulièrement visible sur l'API statut Ă©tudiant boursier : + + ###### Exemple avec la payload V.3. de l'API Étudiant boursier : + Dans cette payload, les diffĂ©rents scopes pour lesquels vous pouvez demander une habilitation sont très visibles : + + ``` + { + "data": { + "identite": { ## Scope "identitĂ©" + "nom": "Moustaki", + "prenoms": ["Georges", "Claude"], + "date_naissance": "1992-11-29", + "nom_commune_naissance": "Poitiers", + "sexe": "M" + }, + "est_boursier": true, ## Scope "statut" + "periode_versement_bourse": { ## Scope "PĂ©riode de versement" + "date_rentree": "2019-09-01", + "duree": 12 + }, + "etablissement_etudes": { ## Scope "Établissement et ville d'Ă©tudes" + "nom_commune": "Brest", + "nom_etablissement": "Carnot" + }, + "echelon_bourse": "6", ## Scope "Échelon de la bourse" + "email": "georges@moustaki.fr", ## Scope "E-mail + "statut_bourse": { ## Scope "Statut dĂ©finitif de la bourse" + "code": 0, + "libelle": "dĂ©finitif" + } + }, + "links": {}, + "meta": {} + } + ``` + + {:.fr-highlight.fr-highlight--example} + > Avant : Les droits d'accès pouvait couvrir une ou plusieurs clĂ©s dans la payload, il n'y avait pas de règles. Dans certains cas, un scope pouvait mĂŞme indiquer un pĂ©rimètre de particuliers concernĂ©s. + + > ###### Exemple avec la payload V.2. de l'API Étudiant boursier : + > ``` + > { + > "data": { + > "nom": "Moustaki", + > "prenom": "Georges", + > "prenom2": "Claude", + > "date_naissance": "1992-11-29", + > "lieu_naissance": "Poitiers", + > "sexe": "M", + > "boursier": true, + > "echelon_bourse": "6", + > "email": "georges@moustaki.fr", + > "date_de_rentree": "2019-09-01", + > "duree_versement": 12, + > "statut": 0, + > "statut_libelle": "dĂ©finitif", + > "ville_etudes": "Brest", + > "etablissement": "Carnot" + > }, + > "links": {}, + > "meta": {} + > } + > ``` + + **🤔 Pourquoi ?** + Clarifier quelles informations sont disponibles pour chaque scope. + + - title: 8. Les donnĂ©es des payloads, qualifiĂ©es et uniformisĂ©es d'un point de vue mĂ©tier + anchor: 'donnee-qualifiee-et-uniformisee-metier' + content: |+ + **🚀 Avec la V.3 :** Nous avons profitĂ© de la refonte technique pour uniformiser la façon de traiter la donnĂ©e entre les API et complĂ©ter significativement les documentations. Ces Ă©volutions concernent plusieurs aspects : + - **Normaliser et prĂ©ciser les clĂ©s de certains champs qui dĂ©finissent le mĂŞme type d'information**. Ainsi quelques règles sont maintenant largement utilisĂ©es sur toutes les API, par exemple : + - le statut (Ă©tudiant, bĂ©nĂ©ficaire d'une prestation, etc.) est dĂ©sormais toujours nommĂ© par une clĂ© prĂ©fixĂ©e par `est_...`, comme par exemple `est_boursier` ou `est_beneficiaire` ; + - les dates de dĂ©but et de fin de droit auront les clĂ©s `date_debut_droit` / `date_fin_droit` ; + - les clĂ©s se veulent les plus prĂ©cises possibles, par exemple, dans l'API Ă©tudiant, : la clĂ© `code_commune` en V.2. devient `code_cog_insee_commune` en V.3. pour Ă©viter toute confusion avec le code postal. + - **Expliciter l'origine des diverses donnĂ©es d'identitĂ© transmises dans les payloads** et prĂ©ciser si la donnĂ©e a Ă©tĂ© consolidĂ©e et comment. Par exemple : au travers d'un recoupement avec une pièce d'identitĂ© ou bien avec un rĂ©pertoire ; + - Uniformiser le style des clĂ©s pour faciliter votre lecture de la documentation. Le format choisi est dĂ©sormais en XXXX, c'est-Ă -dire que les mots sont sĂ©parĂ©s par des _, par exemple `code_cog_insee_commune`. + + **🤔 Pourquoi ?** + - Simplifier la comprĂ©hension et la lecture des donnĂ©es transmises ; + - Faciliter l'intĂ©gration de l'API. + developers: title: Espace dĂ©veloppeurs đź›  sections: