RESTful API 重新再认识一下

263 阅读3分钟

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

RESTful API

随着软件架构的演进,前后端解耦分离。前端专注实现UI界面,后端专注实现具体的功能业务逻辑。由于前端设备各式各样,后端接口为了方便与不同的前端设备通信,提出一种统一的机制。RESTful API 是目前比较成熟的API设计理论。

RESTful 架构中,将数据的呈现方式叫做资源。

Restful 设计规范

  • URI 规范

    • 不用大写,不用下杠 "_",可使用中杠 "-"。
    • 参数列表要编码。
    • URI 中的名词表示资源集合,使用复数形式。
  • 协议:API与用户的通信协议,总是使用 Https 协议。

  • 域名:一般设计 API 接口都会统一在某域名下,如 api.example.com/api/v2/user

  • 版本,API在演进过程中总会发生变化,常用的版本控制有三种方式:

    • 在uri中放版本信息:GET /v1/users/1。可使用此种方式控制,表现直观。
    • Accept Header:Accept: application/json+v1
    • 自定义 Header:X-Api-Version: 1
  • 路径:路径又称"终点"(endpoint),表示API的具体网址。

  • 资源操作类型,即 HTTP 方法

    • GET:从服务中取出资源。获取单个或多个,返回资源的详细信息
    • POST:在服务中新建一个资源,返回被创建的资源详细信息
    • PUT:在服务中更新资源,用于完整的更新资源或者创建指定身份的资源。如果创建则返回创建资源信息,如果更新则返回修改的资源详细信息
    • PATCH:在服务中更新资源。用于局部的更新资源,返回被修改的资源详细信息
    • DELETE:在服务中删除资源。用于删除某个资源
    • HEAD :获取资源的元数据。只获取请求某个资源返回的头信息
    • OPTION :获取信息,用于获取资源自持的所有的http方法
  • 复杂查询。允许查询携带参数

  • 示例说明
    过滤条件?type=1&age=16允许一定的uri冗余,如/zoos/1/zoos?id=1
    排序?sort=age,desc
    投影?whitelist=id,name,email支持额外参数扩展
    分页`?limit=10&offset=3

    状态码

    成功状态码:200

    错误状态码可以查看常用的http状态码及使用场景:

状态码使用场景
400 bad request常用在参数校验
401 unauthorized未经验证的用户,常见于未登录。如果经过验证后依然没权限,应该 403(即 authentication 和 authorization 的区别)。
403 forbidden无权限
404 not found资源不存在
500 internal server error非业务类异常
503 service unavaliable由容器抛出,自己的代码不要抛这个异常

统一返回格式

// success时返回数据格式
{
  code: 200,
  message: "success",
  data: object || array || string
}
​
// fail 时返回数据格式
{
  code: ****,  // 自定义错误码,用于快速定位错误
  message: "errormessage",
}
​
​

参考资料:github.com/aisuhua/res…