Estou no processo de projetar uma API HTTP, espero que seja o mais RESTful possível.
Existem algumas ações cuja funcionalidade se espalha por alguns recursos e, às vezes, precisa ser desfeita.
Pensei comigo mesmo: isso parece um padrão de comando, mas como posso modelá-lo em um recurso?
Vou apresentar um novo recurso chamado XXAction, como DepositAction, que será criado através de algo como isto
POST /card/{card-id}/account/{account-id}/Deposit
AmountToDeposit=100, different parameters...
isso criará uma nova DepositAction e ativará seu método Do / Execute. Nesse caso, retornar um status HTTP criado 201 significa que a ação foi executada com sucesso.
Posteriormente, se um cliente desejar examinar os detalhes da ação, ele poderá
GET /action/{action-id}
Update / PUT deve estar bloqueado, eu acho, porque não é relevante aqui.
E para desfazer a ação, pensei em usar
DELETE /action/{action-id}
que na verdade chama o método Undo do objeto relevante e altera seu status.
Digamos que estou feliz com apenas um Do-Undo, não preciso refazer.
Esta abordagem está correta?
Existem armadilhas, razões para não usá-lo?
Isso é entendido pelo ponto de vista dos clientes?