上半年时候,部门有组织的讨论了一下实践微处事的技术话题,主要内容是SOA处事和微处事各自的优势和难点,此中有提到关于RESTful API设计要领。
正比如来在深入的学习HTTP协议,也看了一些有关RESTful API的资料,这篇博客,就将本身的一些理解整理记录一下。
PS:本篇博客主要谈一些提要的设计思想和要领,不谈具体的实现细节,如有误差欢迎指出,感谢!
想进一步了解RESTful API,建议学习下面列出的一些词条:
HTTP协议、漫衍式系统架构道理(CAP)、操纵系统道理。。。
参考资料:
随着Github学习TESTful HTTP API设计
一种RESTful API接口的约定
RESTful API设计最佳实践
知乎:如何用通俗易懂的语言解释RESTful API?
一、REST的由来
全称:REST,全称是Resource Representational State Transfer,即:资源在网络中以某种形式进行状态转移。————所谓状态的转移,可参考《HTTP权威指南》一书中对协议的详细解释,此处不过多赘述!
呈现:REST最早是由Roy Fielding博士发表的论文中提到的,他也曾参预设计了HTTP协议。论文地点:~fielding/pubs/dissertation/top.htm
界说:简单来说REST是一种系统架构设计气势派头(而非标准),一种漫衍式系统的应用层解决方案。
配景:早期的网页端是前后台一起的,好比PHP、JSP等。而跟着近几年移动真个快速成长和漫衍式架构的应用,各类Client屡见不鲜,这个时候就需要有个统一的机制,来为前后端通信供给处事。
而RESTful API就是目前对照成熟的的一套应用措施API设计理论。
目的:Client和Server端进一步解耦。
应用:最为经典的莫过于github API。
二、RESTful的特征和长处
1、客户端-处事器(Client-Server):供给处事的处事器和使用处事的客户端疏散解耦;
长处:提高客户真个便捷性(操纵简单)
简化处事器提高可伸缩性(高性能、低本钱)
允许客户端处事端分组优化,相互不受影响
2、无状态(Stateless):来自客户的每一个请求必需包罗处事器措置惩罚惩罚该请求所需的所有信息(请求信息独一性);
长处:提高可见性(可以单独考虑每个请求)
提高可靠性(更容易故障恢复)
提高了可扩展性(降低了处事器资源使用)
3、可缓存(Cachable):处事器必需让客户端知道请求是否可以被缓存?如果可以,客户端可以重用之前的请求信息发送请求;
长处:减少交互连接数
减少连接过程的网络时延
4、分层系统(Layered System):允许处事器和客户端之间的中间层(代办代理,网关等)取代处事器对客户真个请求进行回应,而客户端不需要关心与它交互的组件之外的工作;
长处:提高了系统的可扩展性
简化了系统的庞大性
5、统一接口(Uniform Interface):客户和处事器之间通信的要领必需是统一化的。(例如:GET,POST,PUT.DELETE)
长处:提高交互的可见性
鼓励单独优化改进组件
6、撑持按需代码(Code-On-Demand,可选):处事器可以供给一些代码或者脚本并在客户的运行环境中执行。
长处:提高可扩展性
三、提要设计要领
1、协议
API与Client的通信协议,总是使用HTTPS协议。
PS:使用HTTPS协议和RESTful API自己没有多大关系,但是对付增加网站的安适长短常重要的,出格是如果供给的是果然的API,那么HTTPS久更显得重要了。
2、域名
应该尽量将API部署在专用的域名下面,好比:
https://api.github.com
如果API变革较大,可以把API设计为子域名,好比:
https://example.com/api/v1
3、版本(Versioning)
一般而言应该将API放入URL中,好比:
https://example.com/api/v1
还可以将版本号放入HTTP信息头中,但这样不如放入URL便利和直不雅观。
4、路径(Endpoint)