前言:REST是一种风格参考,不是硬性要求。
Roy Fielding的毕业论文。这哥们参与设计HTTP协议,也是Apache Web的co-founde;所以提出的设计思想是有保障的。
论文地址:https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
一:所解决的问题:
我认为目前RESTful风格所解决的问题是:
clients:
- IOS
- Android
- web
- Other
RESTful还未形成的时候或许不同的设备需要提供不同的API,那在RESTful出现之后可以标准化整个API,在标准化的过程中肯定需要适配多个client,不同的client需要的数据结构或者数据不同但是大同小异,所以在实现API的过程中提高健壮性、可靠性、通用性、完整性是必然
二:传统RPC或Struts的实际效果来总结RESTful的特点:
- 1.基础操作符 GET POST DEL PUT
- 2.HTTP中的Headers的利用率
- 3.URI的命名
- 4.解除JSP方式,前后分离
- 5.分离后的交互数据结构
- 6.URI是名词不是动词,推荐复数
- 7.安全的URI
以上几点就能看出,满足这几个特点基本可以对HTTP的请求形成一套标准化
三:实际定义
1. 暂定admin为标准restful 包含增删改查
1 | GET /api/admin/v1/employees //获取集合,自动分页 |
注意POST方法保存的时候,服务端MVC技巧:
Request中Headers使用:Content-Type:application/x-www-form-urlencoded
使用该header可以直接在Controller中使用Entity作为入参,请求发起时使用Entity字段作为Body,这样传入Contorller会自动填充Entity,避免RequestParam需要写大量的key-value
2. 暂定One To Mony 格式
1 | GET /api/v1/order/{id}/products |
3. 暂定response
RESTful推荐JSON或XML作为response
除去HTTP的Request.code (如:4XX,5XX)等;
以下格式作为交互格式:
例1:1
2
3
4
5{
"code":1, //作为controller的response标记
"msg":"成功", //具体服务端消息
"param":"" //如果结果为成功或其他定义,提供data
}
例2:1
2
3
4
5
6
7
8
9{
"code":1,
"msg":"成功"
"param":
{
"name":"李",
"address":"BeiJing"
}
}
####未完待续
基于本篇推荐书籍
《Java RESTful Web Service 实战(第二版)》