Réponse appropriée pour une insertion REST - nouvel enregistrement complet ou simplement la valeur de l'ID d'enregistrement?

15

Je construis une API REST qui permet des insertions (POST, pas idempotent) et des mises à jour (PUT, idempotent) des demandes pour ajouter / mettre à jour la base de données à notre application.

Je me demande s'il existe des normes ou des meilleures pratiques concernant les données que nous renvoyons au client dans la réponse pour une opération POST (insertion). Nous devons renvoyer au moins une valeur d'ID d'enregistrement (par exemple, votre nouvel enregistrement est l'enregistrement n ° 1234).

Faut-il répondre avec l'objet complet? (par exemple, essentiellement la même réponse qu'ils obtiendraient d'une demande "GET / object_type / 1234")

Devrions-nous répondre uniquement avec la nouvelle valeur ID? (par exemple, "{id: 1234}", ce qui signifie que s'ils veulent récupérer l'enregistrement entier, ils doivent effectuer une requête HTTP GET supplémentaire pour récupérer l'enregistrement complet)

Un en-tête de redirection les dirigeant vers l'URL de l'objet complet?

Quelque chose d'autre entièrement?

Keith Palmer Jr.
la source
Je suis OOT sûr de bonnes pratiques , mais pour moi personnellement , je considéreraient probablement juste retourner l'ID nouvellement créé autrement -1 en cas de succès , etc. Soyez curieux de voir ce que les autres disent que
dreza

Réponses:

13

Eh bien, dans une interface REST, en suivant HTTP dans la mesure du possible, je retournerais un 201 et un URI dans le champ d'en-tête Location à la ressource nouvellement créée. Voici ce que disent les définitions de code d'état :

10.2.2 201 Créé

La demande a été satisfaite et a entraîné la création d'une nouvelle ressource. La ressource nouvellement créée peut être référencée par le ou les URI retournés dans l'entité de la réponse, avec l'URI le plus spécifique pour la ressource donné par un champ d'en-tête Location. La réponse DEVRAIT inclure une entité contenant une liste des caractéristiques des ressources et des emplacements à partir desquels l'utilisateur ou l'agent utilisateur peut choisir celui qui convient le mieux. Le format d'entité est spécifié par le type de support indiqué dans le champ d'en-tête Content-Type. Le serveur d'origine DOIT créer la ressource avant de renvoyer le code d'état 201. Si l'action ne peut pas être exécutée immédiatement, le serveur DEVRAIT répondre avec une réponse 202 (acceptée) à la place.

Si quelque chose tournait mal, je dirais que vous ne devriez pas revenir -1comme d'autres l'ont dit, mais simplement un code d'erreur client ou serveur (4xx ou 5xx). Par exemple, si un utilisateur n'est pas autorisé à créer une nouvelle ressource, vous renvoyez simplement un "401 non autorisé", rien de plus et rien de moins.

Bruno Schäpper
la source
Et le corps? vide ou tout l'objet nouvellement créé en réponse?
Développeur
Deux options courantes que je connais sont 1) définir l'en-tête d'emplacement à l'endroit où la nouvelle entité peut être trouvée, ou 2) inclure la nouvelle entité dans le corps. Personnellement, je vais avec ce dernier pour des raisons pratiques. Des moments réunis pour une sensation plus reposante;)
Bruno Schäpper