1024
有特别礼包
:jianshu.com/p/955eb2faa354
上一篇:详解大型分布式电商体系架构
大家好,我是尖端架构师。
REST这个词是2000年Roy Fielding在他的博士论文中提出的,Fielding参加了http协议的规划,也是Apache web server项目的参加者。他的这篇博士论文能够说对互联网的软件规划产生了深远的影响。可是从字面上了解REST(Representational State Transfer, 体现层状况搬运)是十分笼统的。因而,本篇文章企图将REST进行拆解,分别从以下几个部分来进行解读:
Resource 资源
REST疏忽了主语,全称应该是资源的体现层状况搬运。所谓资源便是互联网上的各种资源,比方文本、图片、音频、视频等。在互联网上经过URI指定仅有的资源,所谓的’上网‘便是经过调用资源的URL来跟互联网上的一系列资源进行互动。
注:URI只代表资源的实体,严格地说,有些网址最终的.html
后缀名是不必要的,由于这个后缀名表明格局,归于"体现层"领域,而URI应该只代表"资源"的方位。
Representational 表象
资源能够有各种详细的体现方式,比方文本能够有xml
格局,html
格局,json
格局,乃至是二进制格局,图片能够有PNG
格局,JPEG
格局等。资源的一个详细体现方式,应该在HTTP恳求的头信息顶用Accept
和Content-Type
字段指定,这两个字段才是对"体现层"的描绘。
State Transfer 状况搬运
经过http动词来完成资源的状况搬运,用GET
来恳求资源,用POST
来新建资源,用PUT
来更新资源,用DELETE
来删去资源。
短小精悍的总结REST:
-
用URI来定位详细的资源
-
用HTTP恳求的Content-Type字段来描绘资源的体现方式
-
用HTTP动词来描绘对资源的详细操作
RESTful API规划总结
跟着近年来移动互联网的开展,各种客户端出不穷:Web,IOS,Android。因而需求一种机制使得各种客户端能够和服务端进行通讯,这就使得RESTful API的架构流行起来。RESTful是REST(体现层状况转化)的形容词方式,因而RESTful API就能够了解成“契合REST风格的API”。
格局标准
依据RFC3986界说,URL是大小写灵敏的。所以为了防止歧义,尽量运用小写字母。
RESTful API 应具有杰出的可读性,当url中某一个片段(segment)由多个单词组成时,主张运用 -
来间隔单词,而不是运用 _
。这首要是由于,浏览器中超链接显现的默许作用是文字并顺便下划线,假如API以_
间隔单词,二者会堆叠,影响可读性。
/api/featured-post/ # GOOD
/api/featured_post/ # WRONG
协议
供给给用户的API,总是运用HTTPs协议。运用HTTPs协议仍是HTTP协议自身和RESTful API并无联系,可是这关于进步网站的安全性很重要。别的,查找大众号“微服务架构”,获取一份惊喜礼包。
域名
API应该放在专有域名下,比方https://api.example.com/v1
。也能够简略地把版别放在URL中,比方https://www.example.com/api/v1
版别
API的版别号应该放在URL中:
https://api.example.com/v1/
名词应该运用复数
所用的名词往往和数据库的表名对应,而数据库的表是一组记载的调集,因而URL中的名词即表明一组资源的调集,故URI中的名词要运用复数
https://api.example.com/v1/students
https://api.example.com/v1/schools
https://api.example.com/v1/employees
URL中不能运用动词
URI代表着一个资源,是一个实体,应该是名词,而不要把详细的动作放在URL中,对资源的操作应该经过HTTP的动词来完成。
不契合CRUD的状况
假如真实无法表明,也可运用动词,例如search没有对应的HTTP办法,能够在途径中运用search,愈加直观
http://api.xxx.com/apiv3/search?timestamp=123213218user_id=4192121keyword=2134789
。再例如创建了博客网站,假如想要发布一个博客,能够运用POST /articles/{:id}/publish
用HTTP动词表明对资源的操作
运用HTTP协议里的动词来完成资源的获取、删去、添加等操作
-
GET:从服务器获取资源
-
POST:在服务器新建一个资源
-
PUT:在服务器更新资源(客户端供给改动后的完好资源)
-
PATCH:在服务器更新资源(客户端供给改动的特色)
-
DELETE:从服务器中删去资源
GET https://api.example.com/v1/schools # 列出一切校园
POST https://api.example.com/v1/schools # 新建一个校园
GET https://api.example.com/v1/schools/ID # 列出指定校园的信息
DELETE https://api.example.com/v1/schools/ID # 删去指定校园
GET https://api.example.com/v1/schools/ID/students # 列出指定校园的一切学生
DELETE https://api.example.com/v1/schools/ID/students/ID # 删去指定校园的指定学生
HTTP状况码
-
200 OK - [GET]:服务器成功回来用户恳求的数据
-
201 CREATED - [POST/PUT/PATCH]:用户新建或修正数据成功
-
204 NO CONTENT - [DELETE]:用户删去数据成功
-
400 INVALID REQUEST - [POST/PUT/PATCH]:用户宣布的恳求有过错,服务器没有进行新建或修正数据的操作
-
401 UNAUTHORIZED:表明用户没有权限(令牌、用户名、暗码过错)
-
404 NOT FOUND:用户宣布的恳求针对的是不存在的记载,服务器没有进行操作
-
500 INTERNAL SERVER ERROR:服务器产生过错,用户将无法判别宣布的恳求是否成功
其它
API的身份认证应该运用OAuth 2.0结构
服务器回来的数据格局,应该尽量运用JSON,防止运用XML。JSON有可读性强,结构紧凑,支撑的言语品种多的特色,因而JSON是RESTful API最常用的回来格局。
最终给读者整理了一份
BAT
面试题
”即可获取。
架构
或许
架构整齐
有惊喜礼包!
【
名字+公司+职位】
版权声明:内容网络,版权归原作者一切。如有侵权烦请奉告,咱们会当即删去并表明歉意。谢谢。
猜你还想看
十几亿用户中心体系,ES+Redis+MySQL架构就轻松搞定!