REST 接口学习

1、REST 接口web

在请求层面,REST 规范能够简单粗暴抽象成如下两个规则:api

请求 API 的 URL 表示用来定位资源;
请求的 METHOD 表示对这个描述资源进行的操做;数组

知乎大神Ivony有句话说的好:安全

URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操做。服务器

在设计web接口的时候,REST主要是用于定义接口名,接口名通常是用名词写,不用动词,那怎么表达“获取”或者“删除”或者“更新”这样的操做呢——用请求类型来区分。架构

好比,咱们有一个friends接口,对于“朋友”咱们有增删改查四种操做,怎么定义REST接口?异步

增长一个朋友,uri: generalcode.cn/v1/friends 接口类型:POST布局

删除一个朋友,uri: generalcode.cn/va/friends 接口类型:DELETEpost

修改一个朋友,uri: generalcode.cn/va/friends 接口类型:PUTurl

查找朋友,uri: generalcode.cn/va/friends 接口类型:GET

注意:这就是REST接口,用url定位资源,用HTTP描述操做

上面咱们定义的四个接口就是符合REST协议的,请注意,这几个接口都没有动词,只有名词friends,都是经过Http请求的接口类型来判断是什么业务操做。

2、API的请求方法

在不少系统中,几乎只用 GET 和 POST 方法来完成了全部的接口操做;这个行为相似于全用 DIV 来布局。实际上,咱们不仅有GET 和 POST 可用,在 REST 架构中,有如下几个重要的请求方法:GET,POST,PUT,PATCH,DELETE。这几个方法均可以与对数据的 CRUD 操做对应起来。

CRUD 是指在作计算处理时的增长(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。即增删改查

【Read】,资源的读取,用 GET 请求;好比:
GET /api/users ( 表示读取用户列表)

GET 应当实现为一个安全方法。用于获取数据而不该该产生反作用。

【Created】,资源的建立,用 POST 方法;POST 是一个非幂等的方法,屡次调用会形成不一样效果;
【Update】,资源的更新。用于更新的 HTTP 方法有两个,PUT 和 PATCH。

他们都应当被实现为幂等方法,即屡次一样的更新请求应当对服务器产生一样的反作用。

PUT 和 PATCH 有各自不一样的使用场景:

PUT 用于更新资源的所有信息,在请求的 body 中须要传入修改后的所有资源主体;

而 PATCH 用于局部更新,在 body 中只须要传入须要改动的资源字段。

【Delete】,资源的删除,相应的请求 HTTP 方法就是 DELETE。这个也应当被实现为一个幂等的方法。

3、状态码

服务器向用户返回的状态码和提示信息,常见的有如下一些(方括号中是该状态码对应的HTTP动词)。

  • 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 - [*]:服务器发生错误,用户将没法判断发出的请求是否成功。

4、返回结果

针对不一样操做,服务器向用户返回的结果应该符合如下规范。

  • GET /collection:返回资源对象的列表(数组)
  • GET /collection/resource:返回单个资源对象
  • POST /collection:返回新生成的资源对象
  • PUT /collection/resource:返回完整的资源对象
  • PATCH /collection/resource:返回完整的资源对象
  • DELETE /collection/resource:返回一个空文档
相关文章
相关标签/搜索