Question

J'utilise Restlet et j'ai créé une ressource. Je gère POST en remplaçant méthode acceptRepresentation.

Le client doit me envoyer des données, puis-je stocker à DB, réponse réglé à 201 (SUCCESS_CREATED) et je dois retourner des données au client, mais le retour type de acceptRepresentation est void.

Dans mon cas, je dois revenir un peu afin que le client identificateur peut accéder à cette ressource.

Par exemple, si j'avais une ressource avec l'URL /resource et le client envoie une requête POST-je ajouter une nouvelle ligne dans DB et son adresse doit être /resource/{id}. Je dois envoyer {id}.

Est-ce que je fais quelque chose de mal? Est-ce que les principes REST permettent de retourner quelque chose après le POST? Si oui, comment puis-je le faire, et si aucune quelle est la façon de gérer cette situation?

Était-ce utile?

La solution

REST dit simplement que vous conformer à l'interface uniforme. En d'autres termes, il dit que vous devez faire ce que POST est censé faire selon le . Voici la citation de cette spécification qui est pertinent,

  

Si une ressource a été créée sur la   serveur d'origine, la réponse devrait   être 201 (créé) et contenir une entité   qui décrit l'état du   demander et fait référence à la nouvelle   ressources, et un en-tête de localisation   (Voir la section 14.30).

Comme vous pouvez le voir, vous avez deux endroits où vous pouvez indiquer au client où la ressource nouvellement créée réside. L'en-tête de localisation doit avoir une URL qui pointe vers la nouvelle ressource et vous pouvez retourner une entité avec les détails aussi.

Je ne suis pas sûr de ce que la différence entre acceptRepresentation prioritaire () et post prépondérant () mais cet exemple montre comment retourner une réponse d'un POST.

Autres conseils

Je Renoncer à envoyer quoi que ce soit dans le corps de la réponse. Il suffit de définir l'emplacement:. À l'URL (complète) de la ressource nouvellement créée

Votre description suggère que c'est exactement la sémantique vous:

  1. POST une chose à créer
  2. Répondre avec assez pour savoir deux choses:
    1. Que la création est arrivé (le 201)
    2. Où trouver la nouvelle chose (l'en-tête de localisation)

Tout le reste est superflu.

Deux questions différentes:

Est-ce que le support de modèle d'application REST données retour dans un POST?

Je ne pense pas explicitement REST interdit, mais le traitement préféré est précisé dans la réponse de Darrel.

Le cadre Restlet permettre aux données de retour dans un POST?

Oui, même si elle retourne vide, dans une classe qui étend des ressources, vous avez accès à l'objet objet Response via la méthode getResponse (). Ainsi, vous pouvez appeler getResponse (). SetEntity () toutes les données que vous voulez.

Sortie dans quel format est demandé. Cela pourrait être:

<success>
    <id>5483</id>
</success>

Ou:

{ "type": "success", "id": 5483 }

Cela dépend de ce que vous faites habituellement. Si elles ne sont pas attendre les données, ils devraient tout simplement l'ignorer, mais tout client qui veut manipuler correctement devrait pouvoir.

Si vous répondez 201 créé avec un corps d'entité, plutôt que d'une redirection d'emplacement, il est une bonne idée d'inclure un en-tête Content-Location pointant vers la ressource qui est représentée dans la réponse.

Cela évitera toute confusion - dans lequel un client pourrait (à juste titre) supposer que l'entité de réponse représente en fait un nouvel état du « créateur », et non la ressource créée

.
> POST /collection
> ..new item..

< 201 Created
< Location: /collection/1354
< Content-Location: /collection/1354
< <div class="item">This is the new item that was created</div>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top