Geoplateforme / geoplateforme.github.io

Site d'accueil de la documentation Géoplateforme
https://geoplateforme.github.io/
6 stars 1 forks source link

Publication des données et id configuration introuvable #19

Closed Inrap closed 8 months ago

Inrap commented 8 months ago

Entité(s) concernée(s)

configuration, offering

Route API concernée

/datastores/{datastore}/configurations

Méthode de la route API

GET

Description détaillée du bug

Bonjour,

Je suis le tutoriel d'utilisation de l'entrepôt de données avec le geopackage fourni. Au moment de la publication en WFS :

  1. POST /data/stores/{datastore}/configurations se déroule correctement. D'autant qu'une nouvelle exécution renvoie bien l'existence préalable de couches avec le même nom.

  2. GET /datastores/{datastore} renvoie une réponse correcte.

  3. Lors de la publication POST /datastores/{datastore}/configurations/{configuration wfs}/offerings, je cherche à récupérer l'id de la config du WFS en utilisant GET /datastores/{datastore}/configurations vu que , sauf erreur de ma part, je ne vois pas cette données dans la réponse de la première requête POST en 1.

La réponse à GET /datastores/{datastore}/configurations est un tableau vide 🤔.

Donc il m'est impossible de remplir le champ {configuration WFS} dans POST /datastores/{datastore}/configurations/{configuration}/offerings

Mauvais utilisation de ma part ou bug de l'API ?

Dolite commented 8 months ago

Juste après la création, GET /datastores/{datastore}/configurations ne retourne rien ? Vous avez parlé de l'appel à GET /datastores/{datastore}, c'est une erreur de frappe ou ce que vous avez réellement fait ? Vérifiez qu'il n'y a pas un filtre activé (paramètre de requête type).

L'identifiant de la configuration créée est normalement dans la réponse du POST de création (champ _id).

Inrap commented 8 months ago

juste pour être sûr : quelle est la requête POST de création concrètement dans le tuto ? J'ai peut-être raté l'étape vu que GET /datastores/{datastore}/configurations retourne []. 🤔

Dolite commented 8 months ago

C'est la requête présentée ici qui crée la configuration en WFS.

POST /datastores/{datastore}/configurations Corps de requête JSON

{
    "type": "WFS",
    "name": "Pays et écorégions",
    "layer_name": "pays_ecoregions",
    "type_infos": {
        "bbox": {
            "west": -175,
            "south": -75,
            "east": 175,
            "north": 85
        },
        "used_data": [
            {
                "relations": [
                    {
                        "native_name": "ecoregions",
                        "public_name": "regions_ecologiques",
                        "title": "Régions écologiques",
                        "keywords": [
                            "Tutoriel", "Données mondiales"
                        ],
                        "abstract": "Grandes régions naturelles mondiales"
                    },
                    {
                        "native_name": "pays",
                        "title": "Pays du monde",
                        "keywords": [
                            "Tutoriel", "Données mondiales"
                        ],
                        "abstract": "Pays du monde"
                    }
                ],
                "stored_data": "{stored data}"
            }
        ]
    }
}
Inrap commented 8 months ago

quand j’exécute POST /datastores/{datastore}/configurations avec l'id de mon entrepôt, j'obtiens :

curl -X 'POST' \
  'https://data.geopf.fr/api/datastores/70613ab0-b0ce-4673-87a4-587bd4fb7476/configurations' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
"type": "WFS",
"name": "Pays et écorégions",
"layer_name": "pays_ecoregions",
"type_infos": {
    "bbox": {
        "west": -175,
        "south": -75,
        "east": 175,
        "north": 85
    },
    "used_data": [
        {
            "relations": [
                {
                    "native_name": "ecoregions",
                    "public_name": "regions_ecologiques",
                    "title": "Régions écologiques",
                    "keywords": [
                        "Tutoriel", "Données mondiales"
                    ],
                    "abstract": "Grandes régions naturelles mondiales"
                },
                {
                    "native_name": "pays",
                    "title": "Pays du monde",
                    "keywords": [
                        "Tutoriel", "Données mondiales"
                    ],
                    "abstract": "Pays du monde"
                }
            ],
            "stored_data": ""
        }
    ]
}
}

et je ne trouve pas l'id de la config.

Dolite commented 8 months ago

Cet appel n'a pas de réponse ?

Inrap commented 8 months ago

C'est le copier/coller dans mon message juste au-dessus.

Dolite commented 8 months ago

Dans votre message c'est le corps de la requête que vous envoyez. L'ID de l'entité créée est dans le corps de la réponse.

Inrap commented 8 months ago

oups effectivement n'importe quoi, voilà la vraie réponse :

{
  "error": "Conflict",
  "error_description": [
   "layer_name déjà utilisé pour ce type de données dans la Géoplateforme"
  ]
}

et c'est voyant cette réponse que j'ai voulu exécuter GET /datastores/{datastore}/configurations pour retrouver l'id de la création existante et que la réponse est [].

Dolite commented 8 months ago

L'unicité du layername est global à toute la plateforme (pour un type de configuration). Typiquement, si vous voulez suivre le tutoriel et que vous mettez le même layername, vous aurez un conflit avec la configuration que nous avons faite dans ce cadre. Vous ne la voyez pas car elle n'appartient pas à votre datastore, mais comme les serveurs de diffusion sont partagés, vous ne pouvez pas appeler votre couche comme nous. Vous devez mettre un layername propre à vous. Je pense que vous n'avez pas créé de configuration, d'où la liste vide.

Inrap commented 8 months ago

Merci pour l'explication que j'ai mieux saisie lorsque j'ai vu la liste couches accessibles dans QGIS en WFS. Je n'avais pas compris que les flux étaient "mutualisés".