具有日期范围的正确REST格式的URL

时间:2012-03-09 16:11:52

标签: rest

我有一个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的正确方法是什么?

谢谢,

汤姆

3 个答案:

答案 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)

如果exam​​ple.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更有意义。