REST 风格
REST 全称Representational State Transfer中文直译为具象的状态转换。
反正单看中文直译,我也不懂是什么意思
查看了wiki上对REST的定义,大体如下:
REST 不是什么具体的实现,它是一种架构设计风格。
REST 通常基于 HTTP、URL、XML 和 HTML 这些现有的流行的协议标准。
REST 风格存在的目的就是偏于不同软件间互相传递消息。
同时对 REST 进行了如下特点整理:
统一接口(Uniform Interface)
无状态(Stateless)
客户端服务端分离(Client-Server)
分层系统(Layered System)
可缓存(Cacheable)
统一接口的定义,说白了就是一个可以访问到资源的 URL 地址。并且被访问资源携带有足够描述该资源的信息。
REST 定义,针对资源访问的每一次请求都要求是无状态的,每次请求都是相对独立的,并且在资源访问的过程中,不受限于某些具体的客户端服务器,或者服务器端服务器,用户同时也不关心资源具体的来源路径,用户关心的只有我请求资源,然后获取资源信息。
说白了
REST 就是一种设计风格,用来设计 更友好,更容易操作的资源访问 URL 路径的 一种设计风格。
RESTFul API
上面我们提到了 REST 风格,而 RESTFul API 又是啥?他们有什么关联?
我把 REST 当成 接口规范类,而 RESTFul API 相当于接口实现类。
换句话说
REST 作为一种设计风格,而 RESTful API 是使用这种风格设计的 WEB API。然后针对实现了这个风格的 WEB API .起了一个新名字,叫做 RESTFul API.
在传统 WEB 服务开发中 推荐使用 REST 风格进行 API 设计,相比传统设计,REST 风格又有什么优势?
在传统的 WEB 服务中,资源访问通信协议 一般都是使用 HTTP 协议。
RESTFul API 风格设计,针对 HTTP 中的访问方法进行了重定义:
GET:获取资源信息
POST:创建新资源
PUT:资源更新
DELETE:资源删除
下面我们举栗子:
根据商品信息的正删改查进行 API 接口定义,对比传统API设计与 RESTFul API 设计之间的区别:
获取一组商品信息
传统 API设计:https://example.com/product/list
REST 设计: GET https://example.com/products/
使用一组新的商品信息替换,目前的商品信息
传统API设计:https://example.com/productUpdate
REST 设计: PUT https://exmaple.com/products
在该组商品信息下创建一个新的商品信息
传统API设计:https://example.com/productCreate
REST 设计: POST https://example.com/products
删除整租商品信息
传统API设计:https://example.com/productDelete
REST设计: DELETE https://example.com/products
获取某件商品信息
传统API设计:https://example.com/productsById
REST设计: GET https://example.com/products/10
更新某件商品信息
传统API设计:https://example.com/updateProductById
REST设计: PUT https://example.com/products/10
把指定商品当成一个新的资源组,在其下面创建一个信息的商品
传统API设计:https://example.com/createProduct
REST设计: POST https://example.com/products/10
删除指定商品信息
传统API设计:https://example.com/deleteProductByid
REST设计: DELETE https:/example.com/products/10
从上面的整个栗子中,我们可以发现 REST 风格设计的接口单纯从阅读上就优于传统 WEB API 设计。
优点
RESTFul API 有效的将行为和资源进行分离,并且更容易实现通过版本号进行访问资源限定。
缺点
但是同时RESTFul API 也存在问题,就是如果完全遵照 REST 风格设计对后端开发人员要求高,业务逻辑有时难以被抽象为资源的增删改查。针对同一业务场景,RESTFul API 比普通 API 需要多次 HTTP请求。
总结
开发中如何进行选择?
个人在项目使用中采用的是 REST 与传统 WEB API 结合的模式进行接口定义,尽量保证 URL 通俗易懂,简单的同时减少RESTFUl 风格造成的需要多次 HTTP 请求等情况发生。而针对与 DELETE 和 PUT 的使用基本直接使用 POST代替了。
在项目中没有绝对的说法,只有合不合适!
领取专属 10元无门槛券
私享最新 技术干货