0
点赞
收藏
分享

微信扫一扫

restful 规范

目录

  • ​​一、数据的安全保障​​
  • ​​二、接口特征表现​​
  • ​​三、多数据版本共存​​
  • ​​四、数据即资源,均使用名词(可复数)​​
  • ​​五、资源操作由请求方式决定​​
  • ​​六、可以通过url后的参数过滤​​
  • ​​七、响应状态码​​
  • ​​1 正常响应​​
  • ​​2 重定向响应​​
  • ​​3 客户端异常​​
  • ​​4 服务器异常​​
  • ​​八、 错误处理,应返回错误信息,error当做key​​
  • ​​九、根据操作的不同,返回不同的数据格式​​
  • ​​十、可以在数据中携带需要请求资源的url地址​​

 

这是一种web api接口的设计风格,比较适用于前后端分离的项目,它的特点就是一切数据都是资源。

与编程语言无关,任何一个框架都可以使用这种规范。

一、数据的安全保障

url链接一般采用https进行传输,相比于http更加安全

二、接口特征表现

用api关键字表示接口url:

  • ​​https://api.baidu.com​​
  • ​​https://www.baidu.com/api​​

三、多数据版本共存

在url链接中标识数据版本

  • ​​https://api.baidu.com/v1​​
  • ​​https://api.baidu.com/v2​​

v1,v2就相当于我们不同版本对应同样请求的接口

四、数据即资源,均使用名词(可复数)

  • 接口一般都是完成前后台数据的交互,交互的数据我们称之为资源
  • ​​https://api.baidu.com/users​​
  • ​​https://api.baidu.com/books​​
  • ​​https://api.baidu.com/book​​

注:一般提倡用资源的复数形式,在url链接中奖励不要出现操作资源的动词,错误示范:​​https://api.baidu.com/delete-user​​

  • 特殊的接口可以出现动词,因为这些接口一般没有一个明确的资源,或是动词就是接口的核心含义
  • ​​https://api.baidu.com/place/search​​
  • ​​https://api.baidu.com/login​​

五、资源操作由请求方式决定

操作资源一般都会涉及到增删改查,我们提供请求方式来标识增删改查动作

  • ​​https://api.baidu.com/books​​ - get请求:获取所有书
  • ​​https://api.baidu.com/books/1​​ - get请求:获取主键为1的书
  • ​​https://api.baidu.com/books​​ - post请求:新增一本书书
  • ​​https://api.baidu.com/books/1​​ - put请求:整体修改主键为1的书
  • ​​https://api.baidu.com/books/1​​ - patch请求:局部修改主键为1的书
  • ​​https://api.baidu.com/books/1​​ - delete请求:删除主键为1的书

六、可以通过url后的参数过滤

  • ​​https://api.example.com/v1/zoos?limit=10:指定返回记录的数量​​
  • ​​https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置​​
  • ​​https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数​​
  • ​​https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序​​
  • ​​https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件​​

七、响应状态码

1 正常响应

  • 响应状态码2xx
  • 200:常规请求
  • 201:创建成功

2 重定向响应

  • 响应状态码3xx
  • 301:永久重定向
  • 302:暂时重定向

3 客户端异常

  • 响应状态码4xx
  • 403:请求无权限
  • 404:请求路径不存在
  • 405:请求方法不存在

4 服务器异常

  • 响应状态码5xx
  • 500:服务器异常

八、 错误处理,应返回错误信息,error当做key

{:"无权限操作"}

九、根据操作的不同,返回不同的数据格式

GET /collection:返回资源对象的列表(数组)/collection/resource:返回单个资源对象/collection:返回新生成的资源对象/collection/resource:返回完整的资源对象/collection/resource:返回完整的资源对象/collection/resource:返回一个空文档

十、可以在数据中携带需要请求资源的url地址

#Hypermedia,RESTful最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么{"status":0,"msg":"ok","results":[{"name":"肯德基(罗餐厅)","img":"https://image.baidu.com/kfc/001.png"}...]}

比较好的接口返回

#响应数据要有状态码、状态信息以及数据本身{"status":0,"msg":"ok","results":[{"name":"肯德基(罗餐厅)","location":{"lat":31.415354,"lng":121.357339},"address":"月罗路2380号","province":"上海市","city":"上海市","area":"宝山区","street_id":"339ed41ae1d6dc320a5cb37c","telephone":"(021)56761006","detail":1,"uid":"339ed41ae1d6dc320a5cb37c"}...]}



举报

相关推荐

0 条评论