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
方法Read
,POST
手段Create
,PUT
和PATCH
均值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 同款。
5.友好的 API 设计建议 :
1.当程序抛出异常时 ,给出合适的错误码。例如 httpcode 401 用户未授权,403 用已授权,但是权限不足。
2. 当错误发生时,提供比较准确的错误信息,以便于用户通过错误信息,去更改表单,或者能提供错误信息,方便后期快速追踪错误。
3. 客户端在请求时,最好设置最大请求时间,如果api 请求超时,及时给客户提示。这样用户至少能得到一个正确的结果,或者错误的响应。
4.灵活的使用 100-500 的状态码,在业务场景允许时给出最为合适的状态码。
5. 请求分开 GET 请求数据,POST 提交数据,PUT 修改数据,DELETE 修改数据.
6.友好的使用 API 设计能解决哪些问题
1.清晰的代码。
2.友好的客户提示。
7.联系我们:
QQ 群390736068
如果各位,觉得还不过瘾,欢迎加入我们。
最后祝各位兄弟姐妹写成精品程序。