RESTFul最佳实践(简译)
本指南需要对RESTful有基本的了解,不熟悉的人可以移步维基百科
首先一定要按照
GET :获取数据
POST:新建数据
PUT:修改数据
DELETE:删除数据
还有理论上我们应该支持XML和JSON,但是让XML沉睡吧。
-
资源描述符(即API地址),要是名词而非动词形势
例如:POST:api/portfolio/32/update,代表的是意思是修改ID为32的portfolio。但是这不符合REST,
REST的做法是PUT:api/portfolio/32,用请求方法承载动作,资源描述符只是一个名词
URL里面尽量避免出现api/portfolio?type=1&status=0这样的参数
-
HTTP状态码
请求响应回信息后,通常都会有一个HTTP Status,如果请求正确的话,这个status会是200,status 404大家应该都知道,资源未找到。所以为了统一处理响应信息服务器返回的状态都用status表示。
注意这里的统一处理,我想大家都会见过服务器自定义一个字段,比如code,比如result,来返回请求状态。 注意这个状态是在响应body里面的,而不是header里面的status。 所以一旦服务器出错了,就无法返回正确的body,body里面的code或者result也无法返回, 这样客户端程序就需要对header里面的status做错误捕获,这样错误捕获程序要监控两个地方,header里面的status,body里面的code。 其实我原来也是这么做的,所以为了统一处理,header的status是最好的办法。
HTTP状态码继续移步 维基百科
-
对于POST创建资源后应该返回的是数据还是地址?
通常API习惯中,利用POST创建完数据后,直接返回创建的数据,客户端就可以直接拿来处理了。有没有考虑另外一种可能。POST完之后,返回header status 301,还有header:location:api/portolio/[newid]
虽然客户端需要再发起一个新的请求来得到数据。但是通常情况下,当请求一个资源数据的时候,这个数据都是被加工过的。比如被附加上分类数据,被附加上评论数据等等。而POST完之后返回的数据是什么样的,就要拼人品了。
-
分页
实例:GET:api/portfolio/?offset=0&limit=25
上面是请求portfolio的数据。从0开始,也就是从第一行开始,查出下25条数据
服务器返回的除了包含这25条数据之外,header里面还会包含Content-Range: items 0-24/66
这里面表示的返回的条目是0到24的(注意这里是zero-based,也就是像数组一样,已0开始的)25条数据。斜杠后面表示这个请求最多可返回的数量。
-
排序筛选
筛选实例:api/portfolio/?filter=”name::john|city_id::3”
这条请求的意思是查询名字为john,城市ID为3的portfolio
很简单的,就是用|分割不同的查询条件。::代表等于的意思
排序实例:api/portfolio/?sort=”name|-create_date”
这条请求的意思是先按照名字正序,然后按照创建日期倒序