我有一个REST URL来获取所有格式如下的用户: http://example.com/users
按ID获取个人用户: http://example.com/users/12345
获取所有用户的出价: http://example.com/users/12345/bids
要在两个日期之间获得所有用户的出价: http://example.com/users/12345/bids/?start=01/01/2012&end=01/31/2012
或应该是这样的: http://example.com/users/12345/bids/start/01012012/end/01312012
我倾向于第一个日期范围网址,因为开始和结束不是域中的实体。使用日期范围格式化REST URL的正确方法是什么?
谢谢,
汤姆
答案 0 :(得分:57)
http://example.com/users/12345/bids?start=01-01-2012&end=01-31-2012
使查询参数与出价处于同一“级别”(删除问号前的斜杠)。但是如果他们只提供一个查询参数,你可能希望得到支持。因此,如果他们只提供“开始”,则会在该日期之后获得所有出价,或者如果他们仅提供“结束”,则会在该日期之前获得所有出价。
原因是查询参数适用于从GET请求中获取结果的子集。它们不会进入另一个级别,因为下一级通常是一个具有唯一标识符的特定项目。
答案 1 :(得分:8)
我会选择http://example.com/users/12345/bids?start=2012-01-01&end=2012-01-31
。
答案 2 :(得分:0)
如果example.com/users/12345获取ID为12345的用户,那么为了通过id获取所有用户,它应该是example.com/users,其中id作为关系包含在响应中。 (通常是指向该资源的超链接)。
现在按日期范围获取它们应该是example.com/users/start=01-01-2012&end=01-31-2012
12345部分是单个用户的ID,它是一个资源,因此不应包含它以获得其他用户。
作为参数的名称,它应该是有意义的。 start可能意味着什么,但start_date更有意义。