RESTful只是一种架构方式的约束,给出一种约定的标准,完全严格遵守RESTful标准并不是很多,也没有必要。
一、来源
REST:Representational State Transfer(表象层状态转变),这三个单词到底意味着:
- 每一个URI代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个HTTP动词(get、post、put、delete),对服务器端资源进行操作,实现”表现层状态转化”。
二、6大原则
1、C-S架构
2、无状态
3、统一的接口
这个才是REST架构的核心,统一的接口对于RESTful服务非常重要。客户端只需要关注实现接口就可以,接口的可读性加强,使用人员方便调用。
4、一致的数据格式
服务端返回的数据格式要么是XML,要么是Json(获取数据),或者直接返回状态码
5、系统分层
客户端通常无法表明自己是直接还是间接与端服务器进行连接,分层时同样要考虑安全策略。
6、可缓存
7、按需编码、可定制代码(可选)
三、7个最佳实践
1、版本
如github开放平台 https://developer.github.com/v3/
就是将版本放在url,简洁明了
2、参数命名规则
推荐采用下划线命名的方式
3、url命名规范
每个url代表一种资源所以url中不能有动词,只能有名词,并且名词中也应该使用复数。实现者应使用相应的Http动词GET、POST、PUT、PATCH、DELETE、HEAD来操作这些资源即可
4、统一返回数据格式
对于合法的请求应该统一返回数据格式,这里演示的是json
- code——包含一个整数类型的HTTP响应状态码。
- status——包含文本:”success”,”fail”或”error”。HTTP状态响应码在500-599之间为”fail”,在400-499之间为”error”,其它均为”success”(例如:响应状态码为1XX、2XX和3XX)。这个根据实际情况其实是可要可不要的。
- message——当状态值为”fail”和”error”时有效,用于显示错误信息。参照国际化(il8n)标准,它可以包含信息号或者编码,可以只包含其中一个,或者同时包含并用分隔符隔开。
- data——包含响应的body。当状态值为”fail”或”error”时,data仅包含错误原因或异常名称、或者null也是可以的
5、http状态码
1:请求未成功
2:请求成功、表示成功处理了请求的状态代码。
3:请求被重定向、表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。
4: 请求错误这些状态代码表示请求可能出错,妨碍了服务器的处理。
5:(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。
6、合理使用query parameter
7、多表、多参数连接查询如何设计url
RPC和RESTful区别
image.png