我正在尝试构建一个RESTful服务,并且遇到了一些问题。我将用一个假想的RESTful服务的例子来描述这些问题。
例如,我需要在我的网站上使用“新闻”服务。新闻可以有不同的类型:本地新闻和全球新闻。新闻由管理员添加。用户可以同时查看本地和全球新闻(单独或全部)。新闻是按页显示的。用户可以查看准确的新闻。
因此,我为这个任务构建了这样一个动词-名词表:
GET /news - Get all news
POST /news - Create news
GET /news/{id} - Show the news with id={id}
PUT /news/{id} - Edit the news with id={id}
GET /news/{type}/{page}/{per_page} - Get news page #{page} of type {type}
GET /news/{page} - Get news page #{page} of both types因此,存在以下问题:
1)如何区分{page}和{id}?也许{id}只能是数字,但{page} -以'p‘开头的字符串(例如'p1'}?
2)用户可以更改"per_page“的值--一个页面上显示多少条新闻。是不是太复杂了-- /news/{type}/{page}/{per_page}?如何将其简化?
3)浏览器中的URL在此服务上应该是什么样子?URL不会和上表中的URI一样精确?例如:
/news - Viewing news (1st page with default 'per_page' and default 'type')
/news/{type} - Viewing news (1st page with default 'per_page' and type={type})
/news/{id} - Viewing exact news with id={id}
/news/{type}/{page}/{per_page} - Viewing exact page of news of exact type.4)附加功能。例如,过滤搜索(按日期、作者或标题获取新闻)。如何使用REST实现这一点?应该如何传输filter对象(xml或json)?如何使网页的网址与过滤结果?/news/{date:12.12.2012,author:'admin'}或更好的东西?
很抱歉我的英语很粗糙,如果你看到一些语法和其他错误-请随时改正它们。
提前谢谢。
发布于 2012-01-08 18:57:04
我会说你应该对类型、页面和per_page使用常规的参数。类型、页面和Per_Page并不代表唯一的资源,而是新闻资源集合的过滤器。所以我会这么做
/news/news/{id}/news?type={type}&page={page}&per_page={per_page}附加过滤也是如此。
请务必查看http://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm#sec_6_2
发布于 2012-01-08 19:41:39
正如Gordon所写的,你可以像往常一样使用请求参数。请记住,REST并不意味着只有干净和漂亮的urls。
因此,将in和类型参数保留在uri中,而将分页参数与查询字符串一起添加。
也叫,为了区分不同的uri部分,你可以使用谷歌的gdata中使用的模式,即在参数前面加上名称
/news
/news/id/{id}
/news/type/{type}通过在服务器端进行一些解析,您可以添加许多参数,可选参数,而不强制执行确切的排序。
https://stackoverflow.com/questions/8773087
复制相似问题