Recensement des points API de OneGeo Suite

Bonjour à tous !

À PIGMA, comme dans les autres plateformes j’imagine, nous utilisons souvent l’API de OneGeo pour intégrer, modifier ou supprimer des éléments en masse dans le catalogue. Voici quelques exemples de l’utilisation de l’API OGS que nous faisons déjà :

  • Mise à jour de jeux de données avec upload d’un fichier téléversé
  • Mise à jour de ressource de type URL (notamment lors de la bascule GéoPlateforme)
  • Suppression de jeux de données test avec ressources associées

Nous nous heurtons parfois au manque de documentation sur le sujet. C’est pourquoi je trouvais intéressant de lister ici les points API dont nous avons connaissance, avec leur fonction, les éventuelles méthodes associées et toute information qui vous paraîtra pertinente.

Voici les points d’API utilisés que nous avons pu lister à ce jour (j’ajouterai à ce premier post les points API qui auront été listés dans les réponses) :

  • Dataset: endpoint : {portal}/fr/dataset/

    • Datasets :
      • {portal}/fr/dataset/datasets/ : permet d’accéder à la liste de tous les jeux de données (sous réserve d’être authentifié) (GET pour les infos de tous les datasets, POST pour créer un dataset)
      • {portal}/fr/dataset/datasets/{dataset_id}/ : permet d’accéder à un dataset particulier (GET pour retourner les infos d’un dataset, PUT pour mettre à jour, PATCH pour réindexer avec l’action ?action=build_elastic_index&asynchrone=true)
      • {portal}/fr/dataset/datasets/{dataset_id}/contact-roles/ : permet d’accéder aux contacts rattachés au dataset considéré (GET pour les infos, POST pour associer un contact à un dataset)
    • Contacts:
      • {portal}/fr/dataset/contacts/ : permet d’accéder à la liste de tous les contacts (GET pour les infos, POST pour créer un contact)
      • {portal}/fr/dataset/contacts/{contact_id}/ : permet d’accéder à un contact particulier (GET pour les infos, PUT pour mettre à jour)
  • Ressource : endpoint : {portal}/fr/resource/

    • Ressources:
      • {portal}/fr/resource/resources/ : permet d’accéder à la liste de toutes les ressources (GET pour les infos)
      • {portal}/fr/resource/resources/{resource_id}/ : permet d’accéder à une ressource en particulier (GET pour les infos, PUT pour mettre à jour)
    • Fichier téléversé:
      • {portal}/fr/resource/file-upload/ : permet de créer une source de données pour téléverser un fichier (POST pour créer la source)
      • {portal}/fr/resource/file-upload/{file-upload_id}/ : permet d’accéder à une instance de file-upload (GET pour les infos, PUT pour mettre à jour et associer le fichier à téléverser, PATCH pour inspecter la source de données avec l’action ?action=inspect&asynchrone=false)
    • Ressources/Datasets:
      • {portal}/fr/resource/resource-dataset/ : permet d’accéder à la liste de toutes les associations ressources/datasets (GET pour les infos, POST pour associer une ressource à un dataset)
      • {portal}/fr/resource/resource-dataset/{resource-dataset_id}/ : permet d’accéder à une association ressources/datasets (GET pour les infos)
    • URL :
      • {portal}/fr/resource/href/ : permet de créer une source de données pour déclarer une ressource de type URL (POST pour créer la source)
      • {portal}/fr/resource/href/{href_id}/ : permet d’accéder à une instance de href (GET pour les infos, PUT pour mettre à jour et créer la ressource, PATCH pour inspecter la source de données avec l’action ?action=inspect&asynchrone=false)

(en cours de rédaction, toute information est bonne à prendre !)

3 « J'aime »

Merci Guillaume pour cet inventaire :+1:

Bonjour,

À la Métropole de Lyon nous utilisons aussi l’API OGS.
Nous avons à ce jour deux cas d’usage.

  1. Le changement de la date de dernière mise à jour des données dans nos scripts d’intégration
    Nous appelons l’endpoint {portal}fr/dataset/datasets/{dataset_id}/ en postant la valeur de dernière mise à jour {"last_update_date": "aaaa-mm-jj"}. À noter que la définition des dates sur Publish n’est pas encore très clair (mise à jour des métadonnées ? De la donnée elle-même ?), Neogeo travaille à clarifier cela.

  2. Le calcul d’indicateurs statistiques
    Nous récupérons les données suivantes :

  • contacts {portail}/fr/dataset/contacts/
  • jeux de données {portail}/fr/dataset/datasets/ + contacts liés {portail}/fr/dataset/datasets/{dataset_id}/contact-roles
  • groupes {portail}/fr/usergroup/user-groups/
  • ressources {portail}/fr/resource/resources/
  • utilisateurs {portail}/fr/usergroup/users/

Un troisième cas d’usage sur lequel je travaille est la mise à jour des noms de couches géographiques. L’idée est de remplacer le titre de la couche géographique par le nom du jeu de données. Je parviens à faire le lien entre une couche géographique et un jeu de données en utilisant les endpoints datasets, resource (vus précédemment) et geographiclayer {portal}/fr/admin/onegeo_geospatial/geographiclayer/. Cependant, faire l’appel API n’a pas l’air de suffire, la modification n’est pas répliquée sur Geoserver. Je crois qu’il faut explicitement notifier la modification avec {portal}/fr/admin/onegeo_geospatial/geographiclayer/{layer_id}/change. Mais cette mise à jour prend beaucoup de temps, donc ce n’est pas une solution très satisfaisante.

En l’absence de documentation, je trouve ces endpoints grâce à la console navigateur lorsque je navigue sur Publish, en explorant le modèle de données sur l’interface d’administration Django, voire en fouillant les sources (par exemple : onegeo_suite/contrib/onegeo_usergroup/api/views/user.py · 1.0 · OneGeo Suite / Apps / Django Onegeo Suite · GitLab).

2 « J'aime »

Concernant votre troisième cas d’usage, Geoserver étant une brique indépendante du Core de OneGeo Suite, est-ce qu’il ne serait pas plus sûr d’interagir directement avec l’API de celui-ci ?

J’y ai pensé, mais comme OGS a récemment ajouté la possibilité de définir les labels directement dans l’interface de Publish, il me paraissait mieux de passer par cette API. En effet, si seules les donnés Geoserver sont mises à jour, je crains que Publish puisse écraser ces modifications lors d’une réindexation ou une modification de la fiche de métadonnées.

Ah oui, vu comme ça vous avez raison :+1: