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

我有一个 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

我倾向于第一个日期范围的 URL,因为开始和结束都不是域中的实体。使用日期范围格式化 REST URL 的正确方法是什么?

谢谢,

汤姆

93555 次浏览

我会选 http://example.com/users/12345/bids?start=2012-01-01&end=2012-01-31

  • 查询字符串之前不应该有一个斜杠。
  • 避免在查询字符串中使用斜杠,这样会更容易。

Http://example.com/users/12345/bids?start=01-01-2012&end=01-31-2012

将查询参数设置为与出价相同的“级别”(删除问号前的斜杠)。但是如果它们只提供一个查询参数,那么您可能希望得到支持。因此,如果他们只提供“开始”,那么将获得该日期后的所有出价,或者如果他们只提供“结束”,将获得该日期前的所有出价。

其原因是,查询参数有利于从 GET 请求获取结果的子集。它们不会进入另一个层次,因为下一个层次通常是一个带有唯一标识符的特定项目。

如果 example.com/users/12345用 id 12345获取用户,那么为了获取所有用户的 id,应该将响应中包含的 id 作为关系 example.com/users。(通常是指向该资源的超链接)。

现在,要根据日期范围得到它们,应该使用 example.com/users/start=01-01-2012&end=01-31-2012

12345部分是单个用户的 id,它是一个资源,因此不应该包含它来获取其他用户。

作为参数的名称,它应该是有意义的。 start 可以有任何意义,但 start _ date 更有意义。

如果使用路径分隔符 /来分隔值,则可能会遇到许多问题。如果你决定开始和结束日期允许 ISO 格式,例如 2021-10-12T01:00:00.000Z2021-10-01T18:00:00.000+05:00,这些格式包含的字符将中断 URL。最好使用 querystring 参数。

我建议对日期使用 querystring 和 ISO 格式,这样你的 URL 看起来就像这样:

Https://example.com/users/12345/bids?start=2022-08-08t00:00:00.000z&end=2022-08-09t00:00:00.000z

按日期范围检索的 API 方法可以与为用户检索 所有出价的 GET 请求区分开来,只需使用不同的方法签名即可,该方法签名期望在请求中获得额外的 startend日期参数。