Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RESTful 风格 #120

Open
hoperyy opened this issue Aug 26, 2018 · 0 comments
Open

RESTful 风格 #120

hoperyy opened this issue Aug 26, 2018 · 0 comments

Comments

@hoperyy
Copy link
Owner

hoperyy commented Aug 26, 2018

名词解释

REST: Representational State Transfer。表现层状态转化。也可叫 “资源表现层状态转化”。

RESTful 风格

  • 每一个 URI 代表一种资源
  • 客户端和服务器之间,传递这种资源的某种表现层
  • 客户端通过四个 HTTP 动词,对服务器端资源进行操作,实现"表现层状态转化"

资源(URI)

URI 指向资源,URI 只表现资源的位置。

  • 动词:URL 不应含有动词,应该是名词。动词应该放在 HTTP 协议中。
  • 版本:资源版本放入 URI,也可以将版本放在 HTTP 头中。
  • 过滤:API 提供参数,返回过滤结果。参数的设计允许存在冗余,即允许 API 路径和 URL 参数偶尔有重复。

表现层

资源呈现的形式,表现不应在 URL 呈现,可以放在 Accept/Content-Type

状态转化

    • POST:新建/更新。
    • DELETE:删除。
    • PUT:更新。客户端提供全部更新信息。
    • PATCH:更新。客户端提供部分更新信息。
    • GET:获取。
    • HEAD:获取资源的元数据。
    • OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

状态码

  • 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。
  • 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
  • 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
  • 204 NO CONTENT - [DELETE]:用户删除数据成功。
  • 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
  • 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
  • 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
  • 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
  • 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
  • 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
  • 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
  • 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

参考资料

@hoperyy hoperyy changed the title RESTful 架构 RESTful 风格 Aug 26, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant