2016-12-23 3 views
1

Si une requête PATCH est appliquée à une ressource qui n'existe pas encore, est-il autorisé à créer la ressource ou ai-je besoin d'une requête POST/PUT séparée dans ce cas?Une requête HTTP PATCH peut-elle créer une ressource?

La demande PATCH irait à l'URL de la ressource par exemple: PATCH /object/1234. Si l'objet avec l'ID 1234 est dans la base de données je vais le créer, sinon je le mettrai à jour. La demande PATCH ne contient pas tous les champs, c'est pourquoi je n'utilise pas PUT

+0

le comportement que vous décrivez est précisément celui attendu pour le PUT. Si vous souhaitez suivre REST, PATCH ne doit être utilisé que pour la mise à jour d'une ressource. Inversement, vous aurez deux verbes, PUT et PATCH étant fondamentalement les mêmes. – MaVVamaldo

Répondre

5

RFC 5789 indique que PATCH doit être utilisé "pour modifier une ressource HTTP existante". Il serait probablement préférable d'implémenter une requête POST/PUT afin de respecter les standards HTTP.

+0

Mais cette RFC indique également que "Si l'URI-de-demande ne pointe pas vers une ressource existante, le serveur PEUT créer une nouvelle ressource, [...]" –

+0

@JimmyT. J'ai dû ignorer cette partie du document et je suppose que vous pourriez l'utiliser de cette façon; toutefois, je ne crois pas que la création de ressources ait été l'objectif visé par le verbe de l'auteur. – Acontz

1

Alors qu'un serveur peut créer une nouvelle ressource (comme expliqué dans la réponse de Heiko), vous seriez conseillé de ne mettre en œuvre PATCH conditionnelle, où un client envoie un en-tête If-Unmodified-Since ou If-Match, assurant le patch est appliqué uniquement à la version de la ressource que le client pensait éditer. Les demandes conditionnelles PATCH empêchent l'idée de modifier une ressource non existante. Si un client tente d'envoyer une requête sans condition préalable, la réponse correcte est 428 Condition préalable requise. Voir RFC 6585.