项目设计-RESTful API设计

1.背景:

     只要 HTTP 协议存在,Web 服务就已经存在。但尤其是自云计算出现以来,它们已成为让客户与我们的数据交互的一种非常常见的方式。

我一直在从事涉及构建或使用 API 的项目。

我见过的大多数 API 都声称是“ RESTful ”——即符合 REST 架构的原则和约束。

但是,他们中的一些人一直在给 REST 一个非常非常糟糕的名字。

或者是一些非常糟糕的设计。

还有  状态代码的错误使用、纯文本响应、不一致的模式……等。

所以我决定写下我认为在设计 REST API 时的一些好的做法

2. 免责声明

      我不认为以下说法和做法 100% 符合的 REST 原则,但我觉得该方案无限接近REST 原则。

3.基础知识

      如果你要构建一个设计良好的REST API,您最好了解HTTP 协议的基础知识。我

MDN web docs 上的Overview of HTTP是一本很好的文档。

 HTTP REST 的应用

  • HTTP 有动词(或方法):GET、POST、PUT、PATCH 和 DELETE 是最常见的。
  • REST 是面向资源的,资源由URI :表示/newspapers/
  • 一个端点是一个动词和URI,例如组合GET: /articles/
  • 端点可以解释为对资源的操作。例如,POST: /articles/可能意味着“创建一篇新文章”。
  • 在高层次,动词映射到CRUD操作GET方法ReadPOST手段CreatePUTPATCH均值Update,和DELETE手段......好吧,Delete
  • 响应的状态由其状态码指定:1xx信息、2xx成功、3xx重定向、4xx客户端错误和5xx服务器错误。

4.不友好的 API 与友好的 API 示例 :

HTTP/1.1 200 OK
Content-Type: text/html

{
    "code":0,
    "message":""
    "data": {
        // 请求的数据
    }
}
HTTP/1.1 200 OK
Content-Type: text/html

{
    "code":-1,
    "message","请求失败!"
    "data": {
        // 请求的数据
    }
}

为什么说改设计,不友好。

1. 首先你需要判断code == 0,在去取data内的值。增加不必要的业务逻辑。

2. 正确的请求和错误的请求混淆,主业务逻辑臃肿,且容易出现bug。

 友好的示例

HTTP/1.1 200 OK
Content-Type: application/json

{
  "name":"Chen Yu",
   "age":26,
   "height":172
}
​
HTTP/1.1 500 Internal Server Error
Content-Type: application/json

{
  "status":500,
  "error":"Internal Server Error"
}
​

1.正确请求直接返回结果。

2.错误请求时,返回错误的结果,及错误的详情。

3.正确流程线,和错误流程线分开,有助于写出清晰的代码。

 客户端请求、解析示例:

    axios({
      method:'get',
      url:'http://localhost:3000/',
      responseType:'stream'
    })
      .then((response)=> {
        //正确的响应
      }).catch((e)=>{
        //错误的响应
      });

该设计与github 同款。

https://api.github.com/

5.友好的 API 设计建议 :

1.当程序抛出异常时 ,给出合适的错误码。例如 httpcode 401 用户未授权,403 用已授权,但是权限不足。

2. 当错误发生时,提供比较准确的错误信息,以便于用户通过错误信息,去更改表单,或者能提供错误信息,方便后期快速追踪错误。

3. 客户端在请求时,最好设置最大请求时间,如果api 请求超时,及时给客户提示。这样用户至少能得到一个正确的结果,或者错误的响应。

4.灵活的使用 100-500 的状态码,在业务场景允许时给出最为合适的状态码。

5. 请求分开 GET 请求数据,POST 提交数据,PUT 修改数据,DELETE 修改数据.

6.友好的使用 API 设计能解决哪些问题

1.清晰的代码。

2.友好的客户提示

7.联系我们: 

QQ 群390736068

如果各位,觉得还不过瘾,欢迎加入我们。

最后祝各位兄弟姐妹写成精品程序。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值