Hello, welcome to xx kitchen equipment co., LTD
语言选择: ∷ 

你这API设计的真”辣鸡“,简直没法看

Release time:2021-09-30 22:03viewed:times
本文摘要:点击上方 "法式员小乐"关注, 星标或置顶一起发展 天天破晓00点00分, 第一时间与你相约 逐日英文 Sometimes, you have to let go to see if there was anything worth holding on to. 有时候,你必须放手,才气明确是否真的值得拥有。逐日掏心话 无论你在凡间间辗转了几多个春秋,一小我私家若是到了没有任何工具可以依赖的时候,往往会变得坚强起来。

im电竞竞猜英雄联盟

点击上方 "法式员小乐"关注, 星标或置顶一起发展 天天破晓00点00分, 第一时间与你相约 逐日英文 Sometimes, you have to let go to see if there was anything worth holding on to. 有时候,你必须放手,才气明确是否真的值得拥有。逐日掏心话 无论你在凡间间辗转了几多个春秋,一小我私家若是到了没有任何工具可以依赖的时候,往往会变得坚强起来。来自:马一特 | 责编:乐乐 链接:cnblogs.com/mayite/p/9798913.html 法式员小乐(ID:study_tech)第 878 次推文 图源:百度 往日回首:微服务设计 10 大反模式和陷阱!看了都说好! 正文 RESTful 是现在最盛行的 API 设计规范,用于 Web 数据接口的设计。它的大原则容易掌握,可是细节不容易做对。

本文总结 RESTful 的设计细节,先容如何设计出易于明白和使用的 API。URL设计 动词+宾语 RESTful的焦点思想就是,客户端发出的数据+操作指令都是“动词+宾语”的结构,好比GET /articles这个下令,GET是动词,/articles是宾语,动词通常就有5种HTTP请求方法,对应CRUD操作,凭据 HTTP 规范,动词一律大写。

# GET:读取(Read)# POST:新建(Create)# PUT:更新(Update)# PATCH:更新(Update),通常是部门更新# DELETE:删除(Delete) 动词的笼罩 有些客户端只能使用GET和POST这两种方法。服务器必须接受POST模拟其他三个方法(PUT、PATCH、DELETE)。

这时,客户端发出的 HTTP 请求,要加上X-HTTP-Method-Override属性,告诉服务器应该使用哪一个动词,笼罩POST方法。POST /api/Person/4 HTTP/1.1 X-HTTP-Method-Override: PUT 上面代码中,X-HTTP-Method-Override指定本次请求的方法是PUT,而不是POST。

宾语必须是名词 宾语就是 API 的 URL,是 HTTP 动词作用的工具。它应该是名词,不能是动词。

好比,/articles这个 URL 就是正确的,而下面的 URL 不是名词,所以都是错误的。# /getAllCars# /createNewCar# /deleteAllRedCars 复数 URL 既然 URL 是名词,那么应该使用复数,还是单数?这没有统一的划定,可是常见的操作是读取一个荟萃,好比GET /articles(读取所有文章),这里显着应该是复数。为了统一起见,建议都使用复数 URL,好比GET /articles/2要好于GET /article/2。制止多级 URL 常见的情况是,资源需要多级分类,因此很容易写出多级的 URL,好比获取某个作者的某一类文章。

# GET /authors/12/categories/2 这种 URL 倒霉于扩展,语义也不明确,往往要想一会,才气明确寄义。更好的做法是,除了第一级,其他级别都用查询字符串表达。

# GET /authors/12?categories=2 下面是另一个例子,查询已公布的文章。你可能会设计成下面的 URL。

# GET /articles/published 查询字符串的写法显着更好 # GET /articles?published=true 状态码 状态码必须准确 客户端的每一次请求,服务器都必须给出回应。回应包罗 HTTP 状态码和数据两部门。

HTTP 状态码就是一个三位数,分成五个种别。# 1xx:相关信息# 2xx:操作乐成# 3xx:重定向# 4xx:客户端错误# 5xx:服务器错误 这五大类总共包罗100多种状态码,笼罩了绝大部门可能遇到的情况。每一种状态码都有尺度的(或者约定的)解释,客户端只需检察状态码,就可以判断出发生了什么情况,所以服务器应该返回尽可能准确的状态码。API 不需要1xx状态码,下面先容其他四类状态码的准确寄义。

2XX状态码 200状态码表现操作乐成,可是差别的方法可以返回更准确的状态码。# GET: 200 OK# POST: 201 Created# PUT: 200 OK# PATCH: 200 OK# DELETE: 204 No Content 上面代码中,POST返回201状态码,表现生成了新的资源;DELETE返回204状态码,表现资源已经不存在。

此外,202 Accepted状态码表现服务器已经收到请求,但还未举行处置惩罚,会在未来再处置惩罚,通常用于异步操作。下面是一个例子。HTTP/1.1 202 Accepted { "task": { "href": "/api/company/job-management/jobs/2130040", "id": "2130040" }} 3xx 状态码 API 用不到301状态码(永久重定向)和302状态码(暂时重定向,307也是这个寄义),因为它们可以由应用级别返回,浏览器会直接跳转,API 级别可以不思量这两种情况。

API 用到的3xx状态码,主要是303 See Other,表现参考另一个 URL。它与302和307的寄义一样,也是"暂时重定向",区别在于302和307用于GET请求,而303用于POST、PUT和DELETE请求。收到303以后,浏览器不会自动跳转,而会让用户自己决议下一步怎么办。

下面是一个例子。HTTP/1.1 303 See OtherLocation: /api/orders/12345 4xx 状态码 4xx状态码表现客户端错误,主要有下面几种。

400 Bad Request:服务器不明白客户端的请求,未做任那边理。401 Unauthorized:用户未提供身份验证凭据,或者没有通过身份验证。403 Forbidden:用户通过了身份验证,可是不具有会见资源所需的权限。404 Not Found:所请求的资源不存在,或不行用。

405 Method Not Allowed:用户已经通过身份验证,可是所用的 HTTP 方法不在他的权限之内。410 Gone:所请求的资源已从这个地址转移,不再可用。415 Unsupported Media Type:客户端要求的返回花样不支持。好比,API 只能返回 JSON 花样,可是客户端要求返回 XML 花样。

422 Unprocessable Entity :客户端上传的附件无法处置惩罚,导致请求失败。429 Too Many Requests:客户端的请求次数凌驾限额。5xx 状态码 5xx状态码表现服务端错误。

一般来说,API 不会向用户透露服务器的详细信息,所以只要两个状态码就够了。500 Internal Server Error:客户端请求有效,服务器处置惩罚时发生了意外。

503 Service Unavailable:服务器无法处置惩罚请求,一般用于网站维护状态。服务器回应 不要返回纯本文 API 返回的数据花样,不应该是纯文本,而应该是一个 JSON 工具,因为这样才气返回尺度的结构化数据。所以,服务器回应的 HTTP 头的Content-Type属性要设为application/json。

客户端请求时,也要明确告诉服务器,可以接受 JSON 花样,即请求的 HTTP 头的ACCEPT属性也要设成application/json。下面是一个例子。

GET /orders/2 HTTP/1.1 Accept: application/json 发生错误时,不要返回 200 状态码 有一种不恰当的做法是,纵然发生错误,也返回200状态码,把错误信息放在数据体内里,就像下面这样。HTTP/1.1 200 OKContent-Type: application/json { "status": "failure", "data": { "error": "Expected at least two items in list." }}上面代码中,剖析数据体以后,才气得知操作失败。这张做法实际上取消了状态码,这是完全不行取的。正确的做法是,状态码反映发生的错误,详细的错误信息放在数据体内里返回。

下面是一个例子。HTTP/1.1 400 Bad RequestContent-Type: application/json{ "error": "Invalid payoad.", "detail": { "surname": "This field is required." }} 提供链接 API 的使用者未必知道,URL 是怎么设计的。一个解决方法就是,在回应中,给出相关链接,便于下一步操作。

这样的话,用户只要记着一个 URL,就可以发现其他的 URL。这种方法叫做 HATEOAS。

举例来说,GitHub 的 API 都在 api.github.com 这个域名。会见它,就可以获得其他 URL。

{ ... "feeds_url": "https://api.github.com/feeds", "followers_url": "https://api.github.com/user/followers", "following_url": "https://api.github.com/user/following{/target}", "gists_url": "https://api.github.com/gists{/gist_id}", "hub_url": "https://api.github.com/hub", ...} 上面的回应中,挑一个 URL 会见,又可以获得此外 URL。对于用户来说,不需要记着 URL 设计,只要从 api.github.com 一步步查找就可以了。HATEOAS 的花样没有统一划定,上面例子中,GitHub 将它们与其他属性放在一起。

更好的做法应该是,将相关链接与其他属性离开。HTTP/1.1 200 OKContent-Type: application/json { "status": "In progress", "links": {[ { "rel":"cancel", "method": "delete", "href":"/api/status/12345" } , { "rel":"edit", "method": "put", "href":"/api/status/12345" } ]} }参考链接 RESTful API Design: 13 Best Practices to Make Your Users Happy, by Florimond Manca API design, by MicroSoft Azure 接待在留言区留下你的看法,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,接待转发分享给更多人。

猜你还想看 阿里、腾讯、百度、华为、京东最新面试题搜集 负载平衡 (Load balancing) 在漫衍式架构中是怎么玩起来的? 重磅!有赞前技术卖力人被刑拘!走私毒品判了3年! 聊一聊开发中那些常用的MySQL优化!看完你就知道了! 关注订阅号「法式员小乐」,收看更多精彩内容嘿,你在看吗?。


本文关键词:你这,API,设计,的,im电竞竞猜英雄联盟,真,”,辣鸡,“,简直,没法,看

本文来源:im电竞竞猜英雄联盟-www.10yuebaby.com

im电竞竞猜英雄联盟Sweep WeChat yards pay attention to us

  • 24-hour hotline090-826971268

  • The mobile phone15459957739

Copyright © 2021 Central air conditioning co. LTD All rights reserved Address:Guangzhou economic development zone, guangdong province ICP备70146964号-5