web-dev-qa-db-fra.com

Comment spécifier de nombreux identifiants et nom de variable dans A REST Demande API?

Quel est le moyen le plus courant et le plus sage de spécifier de nombreuses identifiants d'entités dans une demande d'API?

Pour une demande d'entité singulière, j'ai:

GET /v1/entities/{entity_id}

Mes suggestions pour demander de nombreuses entités:

GET /v1/entities?entity_ids={entity_id1},{entity_id2}

Avec le même nom de variable entity_id:

GET /v1/entities?entity_id={entity_id1},{entity_id2}

On dirait plus pour le point final singulier:

GET /v1/entities/{entity_id1},{entity_id2}

Ou y a-t-il une autre façon de concevoir pour de tels points finaux?

5
Yann

Je crains que la chose standard à faire est de ne pas rechercher plusieurs identifiants comme celui-ci en utilisant le repos. Si vous chargez plusieurs entités spécifiques Entités par ID, vous devez vous demander pourquoi vous le faites. Peut-être que ces entités sont des commandes client appartenant à un client spécifique et que vous chargez les détails de chaque commande. Dans ce cas, vous devriez avoir une URL plus comme /customer/{id}/orders qui retourne toutes les commandes appartenant à un client avec ID {id} plutôt que de connaître l'IDS à l'avance et de les charger individuellement.

Sinon, si l'utilisateur tente de charger plusieurs entités à partir d'une liste pour afficher ses détails, simplifiez l'affichage pour afficher une entité de détail à la fois et que vous chargez chacun à l'aide de l'utilisateur en avant ou en arrière. En d'autres termes, vous ne devriez pas être dans une situation où vous avez spécifiquement besoin de multiples entités chargées par leurs identifiants sans aucun lien évident entre eux que vous auriez besoin d'un moyen d'appeler le REST service avec chaque identifiant individuel répertorié.

11
Neil

Toutes ces approches partagent le même problème: ils battent la chaîne de demande lorsque de nombreux identifiants sont interrogés. Lorsqu'il y a des cas lorsque de nombreux identifiants sont demandés, vous pouvez probablement entrer dans la situation dans laquelle un serveur de passerelle rejette la demande car la chaîne de requête dépasse une limite (généralement environ 2000 caractères).

Avec cela dans MindE, aucune de ces options n'est plus sage que l'autre.

J'ai vu la dernière approche dans plusieurs API alors que je n'ai vu aucun des autres. Je vous recommande d'aller avec

/entities/id1,id2

Une note latérale: ne faites pas la version de l'API via l'URL si vous voulez être reposant. Entité n ° 5 IST Toujours entité n ° 5, peu importe la version de l'API que vous l'accédez. Le consensus est d'utiliser l'en-tête pour la version suivante:

X-API-Version: 1
0
marstato