REST风格的筛选以及批处理操作

REST风格的筛选以及批处理操作

Chris Yue 3 comments
Posts

设计 REST 风格的查询 URL 是一件很头疼的事情。举个例子,如果想搜索已有文章 article 集合中 tag 是 rest 的文章,你的 URL 设计可能是 /article/tag/rest/,但是如果还要搜索其中 2011 年发布的文章,URL 就变成了类似 /article/tag/rest/year/2011/ …,可想而知,当查询条件越来越多的时候,URL 能有多么的verbose and ugly(想像一下淘宝的商品筛选……),并且筛选条件在 URL 中的顺序也是一个问题(/article/tag/rest/year/2011/ vs /article/year/2011/tag/rest/

REST 对 URL 的设计方面,并没有从协议上有限制,设计一个好的 REST 风格的 URL 最重要的是一个合理的“说法”。在最近的研究中我倒是找到这么方便处理筛选的『说法』:

在 HTTP 协议里面有 query 这个东西(即 URL 中问号后面的部分),如果说 URL 对应的是资源以及资源的集合,那么 query 就是一个合理的,用来做筛选的 URL 补充。

还是以 article 为例子,假如说所有的 article 对应的 URL 是 /article/,那么 /article/?tag=rest 便是把所有 tag 不是 rest 的文章都筛出去了,同理 tag=rest&year=2011 便是把 tag 不是 rest,或者 year 不是 2011 的文章筛选出去了。因为 query 中参数的顺序并不影响结果,所以筛选条件的顺序也不用考虑了。这种设计不同于类似 Google 那种 /search?query=xxx 的做法——看起来像是服务器中有一个叫 search 资源,然后把 query 传过他。当然这也是一种『说法』,只不过我感觉『筛选』的:『说法』更合理,更自然。

只要接受了 query 做筛选条件,那么批处理的问题也迎刃而解了。之前我也对 REST 操作批处理头疼过(查看我以前写的文章,里面也提供了一种处理批处理的“说法”,虽然感觉还是不太给力,有点别扭),但是有了筛选,便可以对批处理做更合理的设计。比如说删除 id 为 1,3,5 的文章,那 DELETE /article/?id[]=1&id[]=3&id[]=5 就行了。

REST风格的筛选以及批处理操作 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

文章不错,我要帮站长分担建站费!
天使投赏人

3 Comments

ooo

九月 13, 2011 在 5:07 下午

不知道baidu++与google++作者有没有兴趣更新一下呢

    admin

    九月 23, 2011 在 4:14 下午

    谢谢您的访问。
    最近忙工作忙养活自己,所以不打算更新脚本了……实在不好意思……

     

    ooo

    九月 27, 2011 在 3:47 下午

    希望以后清闲一点的时候可以考虑一下,感谢你的付出

     

发表评论

÷ one = four