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/deliver
condeliveredTo
come corpo richiesta -
PATCH /packages/:id
constatus=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?