Skip to content
This repository has been archived by the owner on Oct 2, 2021. It is now read-only.

Latest commit

 

History

History
56 lines (36 loc) · 2.5 KB

http-method.md

File metadata and controls

56 lines (36 loc) · 2.5 KB

HTTP Method

面向资源设计的HTTP APIs中,绝大部分的操作都是CRUD(Create,Read,Update,Delete),都可以映射为某一个HTTP Method。其余的无法映射的操作一般存在两种解决方案:

  1. 抽象出新的资源,比如禁用用户的操作。假设用户的资源是/user,那么可以抽象出来一个被锁定的用户的资源/user/disabled。如此以来,
    1. 禁用用户POST /user/disabled或者PUT /user/disabled/{user_id}
    2. 取消禁用DELETE /user/disabled/{user_id}
    3. 获取被禁用的用户列表GET /user/disabled
  2. 如果上面的方式无法满足需要,则可以采用POSTURL/动词的组合。还拿上面的举例:
    1. 禁用用户POST /user/{user_id}/disable或者PUT /user/{user_id}/disable
    2. 取消禁用DELETE /user/{user_id}/disable
    3. 获取被禁用的用户列表GET /user?status=DISABLED

HTTP Method 语义列表

每一个HTTP Method都具有一下两个HTTP协议层面的语义。

HTTP 语义 含义
安全 操作不会对资源产生副作用,不会修改资源。
幂等 执行一次和重复执行N次,结果是一样的。

HTTP Method 列表

HTTP Method 安全 幂等 描述说明
GET 获取一个资源
PUT 更新或创建一个资源(完整替换)
PATCH 更新一个资源(部分更新)
DELETE 删除一个资源
POST 创建,或者不满足以上四个Method语义的所有操作

PATCHPOST都是不安全不幂等的,差异在于PATCH仅是用于部分更新资源。PATCH是一个可选支持的HTTP Method,可能会存在一些代理、网关等组件不支持的情况,所以推荐用POST来代替它。

参考

https://tools.ietf.org/html/rfc7231#section-4

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods