RESTful API规范

RESTful API规范

API接口

指前端给后端发数据,后端返回数据的接口,为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本。

RESTful API

RESTful就是一种WebAPI接口的设计风格,适用于前后端分离的开发场景

这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。

事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。

实际开发中,不一定要严格遵守,按实际情况

RESTful API规范

  1. 数据的安全保障,使用https

    url链接一般都采用https协议进行传输

    注:采用https协议,可以提高数据交互过程中的安全性

  2. 接口特征表现,带上api

    用api关键字标识接口url:

    注:看到api字眼,就代表该请求url链接是完成前后台数据交互的,而不是用于直接访问页面的

  3. 多数据版本共存,在url中表示版本

    在url链接中标识数据版本

    注:url链接中的v1、v2就是不同数据版本的体现(只有在一种数据资源有多版本情况下)

  4. 数据即是资源,均使用名词

    把后端的所有数据都看成资源,把url的全部命名为名词,不要使用动词

    接口一般都是完成前后台数据的交互,交互的数据我们称之为资源

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

    特殊的接口可以出现动词,因为这些接口一般没有一个明确的资源,或是动词就是接口的核心含义

  5. 资源操作由请求方式决定

    使用CBV,由请求方式来标识增删查改动作

  6. 过滤,通过在url上传参的形式传递搜索条件

  7. 响应状态码

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

    返回错误信息,使用error当做key

    {
        error: "无权限操作"
    }
    
  9. 返回结果,针对不同操作,服务器向用户返回响应格式的数据

    GET /collection:返回资源对象的列表(数组)
    GET /collection/resource:返回单个资源对象
    POST /collection:返回新生成的资源对象
    PUT /collection/resource:返回完整的资源对象
    PATCH /collection/resource:返回完整的资源对象
    DELETE /collection/resource:返回一个空文档
    
  10. 返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。

    # 返回结果中包括连接
    {"link": {
      "rel":   "collection https://www.example.com/zoos",
      "href":  "https://api.example.com/zoos",
      "title": "List of zoos",
      "type":  "application/vnd.yourformat+json"
    }}
    
posted @ 2020-07-06 16:36  黑猫警长紧张  阅读(219)  评论(0编辑  收藏  举报