get:获取资源 幂等
post:执行不安全和非幂等操作(幂等:多次请求于一次请求的效果一样)
put:更新资源 幂等
delete:删除资源 幂等
如何理解幂等:
public book { private Price price; public setprice(Price price) { this.price = price } }
举例说明:
“用户”作为资源
get:获取用户信息
post:创建新用户
put:修改用户信息
delete:删除用户
对于需要计算或者处理函数的情况,可以将计算过程或者处理函数本身作为资源,使用get方法来处理
比如:验证用户名,密码是否有效,把验证函数本身作为资源
get /validuser/5195 http 1.1
content-type application/json
{"result":true}
这个过程本身是安全和幂等的,也是get最擅长的
以此类推,判断手机号,判断用户名是否被占用,等等。。。
restful web 的地址uri 好像和我目前设计的不一样
每个uri都体现了他的基本功能
比如 getuserinfo 都知道是获取用户信息
比如 /user/getuserinfo/5195 获取5195的用户信息(我目前的做法)
而restful web 的uri 也要体现这一点
比如:
post
/user/5195/updatename //修改5195的姓名
不建议同一uri,使用不同的参数区分不同的操作
比如:
post /user/5195
type=add
post /user/5195
type=update
restful web 对错误的处理
无论是客户端提交请求导致的错误还是服务端的运行错误,都应该返回一个对错误的描述,包含错误状态码和对错误信息的描述。
常见的错误用法一般是返回200,和一堆错误描述信息。
这样可能导致对于客户端需要缓存数据的情况,如果返回200,客户端会正常缓存数据,但最终缓存的数据是错误的,导致脏数据的产生。
而对于需要分析数据的情况来说,客户端可能会向服务端提交错误报告,就可以把状态码提交过去,而服务端也会根据状态码对出错代码快速定位。
由客户端原因导致的错误,状态码在400——417
由服务器端原因导致的错误,状态码在500——505
如果返回的状态码是不常见的,比如499,599,就直接按400,500处理