Est-il autorisé par le REPOS au retour de contenu après le POST?
Je suis à l'aide de RESTlet et j'ai créé une ressource. J'ai poignée POST en remplaçant acceptRepresentation
méthode.
Le client doit m'envoyer des données, puis-je stocker dans la base de données, des réponses à 201 (SUCCESS_CREATED) et j'ai besoin de retourner des données vers le client, mais le type de retour de acceptRepresentation
est void
.
Dans mon cas, j'ai besoin de revenir à l'identifiant de sorte que le client peut accéder à cette ressource.
Par exemple, si j'avais une ressource située à l'URL /resource
et le client envoie une requête POST j'ai ajouter une nouvelle ligne dans la DB et son adresse doivent être /resource/{id}
. J'ai besoin d'envoyer {id}
.
Je fais quelque chose de mal? Ne RESTE principes permettent de retourner quelque chose après? Si oui, comment puis-je le faire, et si non quelle est la façon de gérer cette situation?
- Voir Thom, la réponse à comment définir le corps de la réponse de l'intérieur acceptRepresentation().
Vous devez vous connecter pour publier un commentaire.
RESTE juste dit que vous devez vous conformer à l'interface uniforme. En d'autres termes, il dit que vous devriez faire ce POST est censé faire que par la HTTP spec. Voici la citation de cette spécification qui est pertinent,
Comme vous pouvez le voir à partir de cela, vous avez deux endroits où vous pouvez indiquer au client où la ressource nouvellement créée réside. L'Emplacement de la tête 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 le remplacement acceptRepresentation() et primordial, post (), mais cette exemple montre comment retourner une réponse d'un POST.
Request and Response messages MAY transfer an entity if not otherwise restricted by the request method or response status code. An entity consists of entity-header fields and an entity-body, although some responses will only include the entity-headers.
J'avais renoncer à envoyer quoi que ce soit dans le corps de la réponse. Juste définir l'Emplacement: à la (pleine) URL de la ressource nouvellement créée.
Votre description suggère que c'est exactement la sémantique de vous:
Tout le reste est superflu.
Deux questions différentes:
Fait le RESTE, demande modèle de support de données de retour dans un POST?
Je ne pense pas que le REPOS interdit explicitement, mais le traitement de choix est écrit dans Darrel de réponse.
Ne le RESTlet framework permettent de retourner des données dans un POST?
Oui, même si il revient vide, dans une classe qui s'étend de Ressources, vous avez un accès complet à l'objet de la Réponse de l'objet via le getResponse() la méthode. Vous pouvez donc appeler getResponse().setEntity() avec toutes les données que vous voulez.
De sortie quel que soit le format est demandé. Qui pourrait être:
Ou:
Cela dépend de ce que vous faites habituellement. Si ils attendons pas les données, il faut juste l'ignorer, mais un client qui veut le gérer correctement devrait être en mesure de.
Si vous répondez 201 Créé avec un corps d'entité, plutôt que d'un Emplacement de redirection, alors c'est une bonne idée d'inclure un Contenu de l'Emplacement de l'en-tête pointant vers la ressource qui est représenté dans la réponse.
Cela permettra d'éviter tout risque de confusion - dans lequel un client peut (légitimement) supposons que l'entité de réponse représente, en réalité, un nouvel état du "créateur", et non pas à la création de la ressource.