Come progetteresti un'interfaccia REST che innesca un cambio di stato di un oggetto, ma richiede proprietà aggiuntive in quel momento? Ad esempio, il deliverer di un pacchetto deve cambiare lo stato del pacchetto da in transport a deliver , ma anche specificare come è stato consegnato (letterbox o di persona).
Vedo due possibilità:
-
POST /packages/:id/delivercondeliveredTocome corpo richiesta -
PATCH /packages/:idconstatus=delivered&deliveredTo=...come corpo richiesta
In genere è consigliabile utilizzare i metodi POST , PUT o PATCH per aggiornare lo stato delle risorse in un'API RESTful. Le azioni in stile RPC dovrebbero essere evitate.
Il problema che vedo con il secondo approccio è che la convalida è difficile. Il POST /packages iniziale non deve accettare il campo deliveredTo , ma la richiesta PATCH che include status=delivered lo richiede. Questo non è solo complicato da implementare (in genere non è supportato dai framework), ma rende anche complicata l'API.
Quindi questo è un caso in cui le azioni personalizzate sono appropriate?