1 实例比较
(1)传统API设计
潜在问题:功能驱动设计;客户端需要了解所有接口设计并实现才能使用
(2)RESTful API设计
二者比较
序号 | 比较项 | 传统API | Rest API |
1 | 设计原则 | 功能驱动设计,例如查询API URL(./getOrder)、删除API URL(./delOrder),URL本身自由定义,没有标准 | 基于资源(由URL进行唯一标识),对资源提供标准操作方法(GET、PUT、POST、DELETE),不可扩展。例如对某一个订单资源(./order/{id})的查询和删除,即对同一个资源采用的HTTP方法不同,分别为GET和DELETE请求。执行DELETE操作之后,资源的状态发生了转移。 |
2 | 如何使用HTTP协议 | 仅仅将HTTP用作传输层协议,实践中不严格遵守HTTP规范,增删改查基本都可以通过GET/POST实现,因此传统API基本看不到PUT和DELETE方法 | 将HTTP用作应用层协议,严格遵守HTTP规范,GET用于获取,POST用于新增,PUT用于更新,DELETE用于删除,REST API对资源只能采用标准HTTP方法进行操作 |
3 | 与客户端交互 | 客户端需要了解所有接口设计才能使用 | REST接口在返回资源同时,也返回资源后续可以进行的操作引导客户端,理论上客户端只需要知道资源入口即可 |
4 | 唯一标识 | ------- | ------ |
2 REST API优势
3 REST API设计
(1)URI规范:URI = scheme "://" authority "/" path [ "?" query ] [ "#" fragment ]
(2)URI大小写敏感,统一使用小写字母
(3)URI中建议带上版本号
(4)URL与URI区别:URL(java.net.URL)是URI(java.net.URI)子集,更侧重于实现
(5)选用正确的方法
get -只用做资源的读取。post -用于创建一个新的资源。
delete -用于资源的删除。
put -用于更新资源或者创建资源
head -只获取某个资源的头部信息
(6)返回正确的状态码
2XX -请求正常处理并返回
3XX -重定向,请求的资源位置发生变化
4XX -客户端发送的请求有错误
5XX -服务器端错误