Is PUT/DELETE idempotent with REST automatic?

前端 未结 3 971
时光说笑
时光说笑 2021-01-30 14:32

I am learning about REST and PUT/DELETE, I have read that both of those (along with GET) is idempotent meaning that multiple requests put the server into the same state.

3条回答
  •  走了就别回头了
    2021-01-30 14:59

    REST is just a design structure for data access and manipulation. There's no set-in-stone rules for how a server must react to data requests.

    That being said, typically a REST request of PUT or DELETE would be as follows:

    DELETE /item/10293
    

    or

    PUT /item/23848
    foo=bar
    fizz=buzz
    herp=derp
    

    The requests given are associated with a specific ID. Because of this, telling the server to delete the same ID 15 times will end up with pretty much the same result as calling it once, unless there's some sort of re-numbering going on.

    With the PUT request, telling the server to update a specific item to specific values will also lead to the same result.

    A case where a command would be non-idempotent would typically involve some sort of relative value:

    DELETE /item/last
    

    Calling that 15 times would likely remove 15 items, rather than the same last item. An alternative using HTTP properly might look like:

    POST /item/last?action=delete
    

    Again, REST isn't an official spec, it's just a structure with some common qualities. There are many ways to implement a RESTful structure.


    As for HTML5 forms supporting PUT & DELETE, it's really up to the browsers to start supporting different methods rather than the spec itself. If all the browsers started implementing different methods for form submission, I'm sure they'd be added to the spec.

    With the web going the way it is, a good RESTful implementation is liable to also incorporate some form of AJAX anyway, so to me it seems largely unnecessary.

提交回复
热议问题