Projet

Général

Profil

Development #14838

ajouter un connecteur API particulier

Ajouté par Benjamin Dauvergne il y a environ 7 ans. Mis à jour il y a environ 6 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
01 février 2017
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Fichiers


Demandes liées

Lié à Passerelle - Bug #21775: get_descripion_fields() devrait utiliser get_<field>_display() quand il est présentFermé11 février 2018

Actions

Révisions associées

Révision f24bb06e (diff)
Ajouté par Benjamin Dauvergne il y a environ 6 ans

add connector for API-Particulier (#14838)

API Particulier is an API published by the french government for accessing
fiscal and social informations about citizens. It can be used to improve
efficiency of procedures in local administrations.

Historique

#2

Mis à jour par Benjamin Dauvergne il y a environ 7 ans

Correction d'une typo sur l'URL du service impots/adresse.

#3

Mis à jour par Serghei Mihai il y a environ 7 ans

Il manque pas la migration?

#4

Mis à jour par Frédéric Péters il y a environ 7 ans

Pas fan du endpoint_get() qui permet trop facilement de changer les URL et de ne pas voir que ça cassera tout.

#5

Mis à jour par Benjamin Dauvergne il y a environ 7 ans

1. Migration ajoutée.
2. Paramètre expected_url ajouté à endpoint_get, ça vérifie à la fois que le routage est bon et que l'URL n'a pas changée.

#6

Mis à jour par Serghei Mihai il y a environ 7 ans

Il manque:

    category = _('Business Process Connectors')
    ...
    class Meta:
        verbose_name = _('API Particulier')

    @classmethod
    def is_enabled(cls):
        return True

    @classmethod
    def get_verbose_name(cls):
        return cls._meta.verbose_name

    @classmethod
    def get_icon_class(cls):
        return 'ressources'

dans le modèle pour que le connecteur soit visible dans le backoffice et un template html decrivant les endpoints.

#7

Mis à jour par Frédéric Péters il y a environ 7 ans

Il manque:

De manière plus haut niveau, une description (du besoin et) de l'usage imaginé.

#8

Mis à jour par Benjamin Dauvergne il y a environ 7 ans

Commentaires intégrés, sauf is_enabled/get_verbose_name parce que j'espère bien le ticket #15314 intégré d'ici là.

Le cas d'usage ce sont les démarches demandant le revenu fiscal de référence ou le quotient familial de la CAF.

#9

Mis à jour par Benjamin Dauvergne il y a environ 7 ans

Up.

#10

Mis à jour par Pierre Cros il y a environ 7 ans

Pour Fred, le cas d'usage :
La ville de Lyon fait ça avec Lutèce, on l'avait vu, pour permettre le
calcul du quotient familial :
https://qf.lyon.fr/

#11

Mis à jour par Frédéric Péters il y a presque 7 ans

  • Statut changé de Nouveau à En cours

Discussion à avoir mais il semblerait qu'on ne veuille pas lever d'erreur 500 sur des situations connues.

J'encourage la déclaration des applications préfixées par passerelle.apps.

Le get_icon_class n'est enfin plus nécessaire.

Le api_particulier_detail.html devrait être nommé apiparticulier_detail.html (est-ce un changement raté récemment ou la page n'a jamais été visitée ?).

Les URL mentionnées ne fonctionnent pas parce qu'elles devraient être en /api-particulier/ et pas /api_particulier/ et qu'il faut pour ça également ajouter :

    @classmethod
    def get_connector_slug(cls):
        return 'api-particulier'

Il est fait mention de particulier-mock.api.gouv.fr mais ce domaine ne résoud pas chez moi.

Pour la plateforme de dev, j'ai un "connexion refusée".

L'ordre test/prod/dev/mock est pour moi curieux, j'aurais plutôt imaginé prod/test/dev/mock.

#12

Mis à jour par Frédéric Péters il y a presque 7 ans

Sur l'endpoint correspondant à impots_adresse API Particulier répond par une 404 (plateforme de test). Sur les endpoints CAF, le résultat est une erreur 500 d'API Particulier.

#13

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

Frédéric Péters a écrit :

Discussion à avoir mais il semblerait qu'on ne veuille pas lever d'erreur 500 sur des situations connues.

Je ne renvoie pas d'erreur 500

J'encourage la déclaration des applications préfixées par passerelle.apps.

Ok.

Le api_particulier_detail.html devrait être nommé apiparticulier_detail.html (est-ce un changement raté récemment ou la page n'a jamais été visitée ?).

Yep pas testé, j'ai ajouté un test.

Les URL mentionnées ne fonctionnent pas parce qu'elles devraient être en /api-particulier/ et pas /api_particulier/ et qu'il faut pour ça également ajouter :

[...]

Corrigé, ça appelle encore plus d'automatisation dans la génération des pages de détail (je pense qu'en ajoutant des catégorie et des descriptions au décoration endpoint on serait bon, on a du déjà le dire ailleurs je pense).

Il est fait mention de particulier-mock.api.gouv.fr mais ce domaine ne résoud pas chez moi.

Je ne sais plus d'où je l'ai sortir, je l'ai viré.

Pour la plateforme de dev, j'ai un "connexion refusée".

Je pense que j'avais trouvé toutes ces URLs sur https://particulier.api.gouv.fr/tech/ mais ils ont fait le ménage, je vire aussi.

L'ordre test/prod/dev/mock est pour moi curieux, j'aurais plutôt imaginé prod/test/dev/mock.

Ok, j'ai mis prod/test.

Voilà sur branche pour dernière relecture, http://git.entrouvert.org/passerelle.git/log/?h=wip/14838-api-particulier.

#14

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

Frédéric Péters a écrit :

Sur l'endpoint correspondant à impots_adresse API Particulier répond par une 404 (plateforme de test). Sur les endpoints CAF, le résultat est une erreur 500 d'API Particulier.

Pour impots_adresse si je mets n'importe quoi comme numéro fiscal j'ai une 400.

Oui le service de test CAF ne fonctionne pas actuellement.

Ces remarques pour dire que ?

#15

Mis à jour par Frédéric Péters il y a presque 7 ans

Discussion à avoir mais il semblerait qu'on ne veuille pas lever d'erreur 500 sur des situations connues.

Je ne renvoie pas d'erreur 500

Ok j'ai du me faire avoir par l'encapsulation de leur erreur.

Pour impots_adresse si je mets n'importe quoi comme numéro fiscal j'ai une 400.

Sur la plateforme de test ?

Oui le service de test CAF ne fonctionne pas actuellement.

Ok, je ne l'avais pas deviné.

Ces remarques pour dire que ?

Que je teste, que je voulais voir l'intégration réelle avec w.c.s. pour être sûr de ne pas rater un truc flagrant.

#16

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

Frédéric Péters a écrit :

Sur la plateforme de test ?

Non tu as raison 404. Tu veux que je récupère ça pour en faire une erreur particulière ?

#17

Mis à jour par Frédéric Péters il y a presque 7 ans

Non tu as raison 404. Tu veux que je récupère ça pour en faire une erreur particulière ?

Non, je suis surtout inquiet par rapport à leurs plateformes :/

À ce sujet, la plateforme de test, d'après https://particulier.api.gouv.fr/tech/ , ce serait désormais plutôt :

Test | particulier-sandbox.api.gouv.fr | test-token | Oui

(hostname différent) (mais leur doc pour les exemples CAF qui ne marchent pas pointe toujours sur particulier-test)

#18

Mis à jour par Benjamin Dauvergne il y a presque 7 ans

Frédéric Péters a écrit :

Non tu as raison 404. Tu veux que je récupère ça pour en faire une erreur particulière ?

Non, je suis surtout inquiet par rapport à leurs plateformes :/

J'ai envoyé un mail pour voir à leur email de contact, demandant aussi si tout ça est bien en prod.

À ce sujet, la plateforme de test, d'après https://particulier.api.gouv.fr/tech/ , ce serait désormais plutôt :

Test | particulier-sandbox.api.gouv.fr | test-token | Oui

(hostname différent) (mais leur doc pour les exemples CAF qui ne marchent pas pointe toujours sur particulier-test)

Ok je change pour sandbox qui est celle qu'on voit dans les exemples pour les impôts qui marchent.

#19

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

Branche rebasée sur master, est-ce que ce serait poussable ? Je pense que ça
pourrait être annoncé dans les notes de releases comme un module expérimental
pour inciter des villes à s'en servir.

#20

Mis à jour par Frédéric Péters il y a environ 6 ans

Il y a bien sûr d'abord à réunir les commits de la branche, avant de pouvoir pousser.

Il y a eu d'autres évolutions dans Passerelle depuis, d'un coup d'œil, serializer_type n'est plus nécessaire, la page de description du connecteur est mieux quand générée automatiquement, les connecteurs dans INSTALLED_APPS sont triés alphabétiquement.

De mon commentaire 15 je me dis aussi qu'à un moment j'ai du avoir en local un formulaire ou workflow pour tester ça mais je ne retrouve pas. Tu pourrais décrire l'utilisation formulaire/workflow côté wcs (ce qui semble nécessaire pour que les villes puissent s'en servir (et avant ça même, les CPF)).

#21

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

Remarques sur le code prises en compte poussées sur la branche:
  • commits rebasés
  • serializer_type retiré
  • page de description automatique utilisée en majeur partie
  • ordre dans INSTALLED_APPS respecté

J'ai aussi retiré les deux endpoints CAF qui ont disparu et ont été aggrégé dans l'unique restant "famille".

Je remarque à l'occasion qu'on permet de décrire le format des arguments mais pas le format retour des endpoints ça me parait vraiment manquant, ici le format des données est documenté dans les tests.

Pour un formulaire j'imagine une page seule demandant:
  • dans le cas fiscal le numéro fiscal de la personne et un numéro d'avis d'imposition,
  • dans le cas allocation familiale, le code postal et le numéro d'allocataire.

Ensuite sur une deuxième page on peut afficher les informations retournées,
typiquement l'adresse dans les deux cas ou le QF pour le cas allocation
familiale.

En première actions de workflow on devrait refaire ces appels pour stocker la donnée dans un variable de workflow.

À noter que l'adresse retourner par la CAF n'a pas du tout la même forme que celle en provenance des impôts ce qui pourrait être gênant, mais c'est comme ça.

#22

Mis à jour par Frédéric Péters il y a environ 6 ans

(je regarde e1bc6338a7229e82e3afda9bb844b4cfc6295754)

ordre dans INSTALLED_APPS respecté

Et pourtant :

     'passerelle.apps.solis',
+    'passerelle.apps.api_particulier',

page de description automatique utilisée en majeur partie

Mais pourquoi pas totalement ? Les éléments de description doivent pouvoir être tirés des paramètres du connecteur, et les paramètres en …_key rester cachés.

verbose_name=_('platform')

Il y faudrait une majuscule.

+ 'description': _('requesting user'),

Dans les tests il y est mis "John Doe" mais ce n'est pas clair pour moi ce qui doit s'y trouver, le prénom/nom de la personne de qui on récupère l'info ? Ou c'est la personne à l'origine de la demande, genre pour permettre à API Particulier un semblant de log de qui fait des demandes ?

Dans la version précédente, il y avait des valeurs d'exemple passées (code_postal=13260&numero_allocataire=15), au cas où c'est quelque chose qui peut également être fait ici, suffit d'ajouter example_value au dictionnaire décrivant le paramètre.

~~

Je remarque à l'occasion [...]

Tickets bienvenus, toujours.

#23

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

Frédéric Péters a écrit :

(je regarde e1bc6338a7229e82e3afda9bb844b4cfc6295754)

Mon push s'est perdu dans l'éther, c'est le bon maintenant, j'ai vérifié.

ordre dans INSTALLED_APPS respecté

Et pourtant :

[...]

Ouaip désolé.

page de description automatique utilisée en majeur partie

Mais pourquoi pas totalement ? Les éléments de description doivent pouvoir être tirés des paramètres du connecteur, et les paramètres en …_key rester cachés.

_platform est une énumération et get_description_field() ne renvoie pas la valeur de get_display_<_field>. Je vais virer mon template ad-hoc et ouvrir un ticket là dessus.

verbose_name=_('platform')

Corrigé.

Il y faudrait une majuscule.

+ 'description': _('requesting user'),

Dans les tests il y est mis "John Doe" mais ce n'est pas clair pour moi ce qui doit s'y trouver, le prénom/nom de la personne de qui on récupère l'info ? Ou c'est la personne à l'origine de la demande, genre pour permettre à API Particulier un semblant de log de qui fait des demandes ?

Tout ça à la fois, voici ce qui est dit dans la doc:

Le citoyen ou l'agent

  1. Avec Curl, il suffit de passer le header HTTP: X-User
    curl "https://particulier-sandbox.api.gouv.fr/api/impots/svair?numeroFiscal=12&referenceAvis=15" \
    -H "X-API-KEY: test-token" \
    -H "X-User: demo"

Il est aussi possible d'identifier (sans authentifier) les citoyens ou les agents ayant déclenchés un appel donné. En effet, en cas de problème ou de fraude, les fournisseurs de données doivent être en mesure de dire quels étaient les utilisateurs de l'API Particulier. C'est pourquoi il existe un header HTTP facultatif X-User qui permet d'identifier l'utilisateur : celui-ci peut être un identifiant interne du fournisseur de service.

Au passage je découvre que API particulier est devenu aussi un FD FranceConnect, je n'y comprend plus rien.

France Connect

  1. Avec Curl, il suffit de passer le header HTTP: Authorization
    curl "https://particulier-sandbox.api.gouv.fr/api/impots/svair?numeroFiscal=12&referenceAvis=15" \
    -H "Authorization: Bearer <ACCESS-TOKEN>"

Il est aussi possible de s'authentifier en tant que citoyen identifié via France Connect. Api Particulier étant un Fournisseur de Données, Il est possible pour un citoyen identifié auprès de France Connect d'accèder à ses données personnelles (et uniquement celles le concernant) en suivant le protocole OpenID Connect.

C'est une bonne nouvelle parce qu'il me semble que c'est bien plus facile d'obtenir une API key sur API particulier que de s'adresse à la DGFIP.

Dans la version précédente, il y avait des valeurs d'exemple passées (code_postal=13260&numero_allocataire=15), au cas où c'est quelque chose qui peut également être fait ici, suffit d'ajouter example_value au dictionnaire décrivant le paramètre.

J'ai repris ceux de la doc, ça permet de tester directement.

Je remarque à l'occasion [...]

Tickets bienvenus, toujours.

#21774

#24

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

À noter que j'ai testé localement vers la vrai instance de FC, les 3 endpoints fonctionnent (je pourrai rajouter un tel test, ça ne mange pas de pain).

#25

Mis à jour par Frédéric Péters il y a environ 6 ans

  • Lié à Bug #21775: get_descripion_fields() devrait utiliser get_<field>_display() quand il est présent ajouté
#26

Mis à jour par Serghei Mihai il y a environ 6 ans

self.get('impots/adress'

Il manque le e à la fin.

Dans tests/utils.py il y a déjà la fonction setup_access_rights. Il faudrait l'utiliser dans make_ressource (à renommer au passage en make_resource, en anglais)

#27

Mis à jour par Thomas Noël il y a environ 6 ans

Serghei Mihai a écrit :

Il manque le e à la fin.

C'est plutôt une erreur sur https://particulier.api.gouv.fr/tech/ qui parle bien de https://particulier.api.gouv.fr/api/impots/adress . tu as testé ? (j'avoue, pas moi)

#28

Mis à jour par Thomas Noël il y a environ 6 ans

Thomas Noël a écrit :

Serghei Mihai a écrit :

Il manque le e à la fin.

C'est plutôt une erreur sur https://particulier.api.gouv.fr/tech/ qui parle bien de https://particulier.api.gouv.fr/api/impots/adress . tu as testé ? (j'avoue, pas moi)

https://particulier-sandbox.api.gouv.fr/api/impots/adresse = 404 alors que
https://particulier-sandbox.api.gouv.fr/api/impots/adress = ip refusée

donc y'a juste une typo dans leur URL mais pas dans le code de Benjamin

#29

Mis à jour par Serghei Mihai il y a environ 6 ans

Pas testé non plus, mais vu dans les tests un appel à impots/adresse.

#30

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

Serghei Mihai a écrit :

Pas testé non plus, mais vu dans les tests un appel à impots/adresse.

Bah oui j'ai pas repris la typo dans nos URLs.

#31

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

Le commit de diff, je poste le rebasage ensuite.

#33

Mis à jour par Thomas Noël il y a environ 6 ans

Ton dernier patch ne doit pas être le bon (restent des "resource") ; mais en y mergeant le diff présenté au dessus ça me semble mériter un ack.

#34

Mis à jour par Serghei Mihai il y a environ 6 ans

s/ressource/resource/ dans tests/utils.py:endpoint_get et ack

#36

Mis à jour par Serghei Mihai il y a environ 6 ans

Ack

#37

Mis à jour par Frédéric Péters il y a environ 6 ans

  • Statut changé de En cours à Fermé

Conciergerie.

commit f24bb06e6e2f04149b2f2e521707e562972b2cc8
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Fri Mar 24 16:28:39 2017 +0100

    add connector for API-Particulier (#14838)

    API Particulier is an API published by the french government for accessing
    fiscal and social informations about citizens. It can be used to improve
    efficiency of procedures in local administrations.

Formats disponibles : Atom PDF