用于指示空参数的URL值(不在查询字符串中)?

时间:2015-11-13 02:08:05

标签: api rest url

是否有标准字符或方式表明网址中缺少参数?

  • /some/[empty]/interesting/[empty]/url
  • /some/-/interesting/-/url
  • /some/_/interesting/_/url

背景:

  • 我有一个RESTful API,允许在某种类型的资源上调用某些操作:/my-resource/1234/do-something

  • 但是,无需针对任何特定资源运行某些操作。到目前为止,我们已通过在网址中指定无ID来启用此功能:/my-resource//do-something-else

  • 但是,我们发现某些Web服务器和代理会删除多个斜杠,将以前的URL转换为:/my-resource/do-something,这是一个错误的URL(它正在尝试将do-something读取为一个ID)。

  • 我们需要两种方法在同一资源上工作(使用&无ID),因此不能使用多个路由,我们也不想更改URL结构。

    < / LI>

是否有标准/主流方式表明类似网址中缺少ID?到目前为止,我们正在考虑使用短划线:/my-resource/-/do-something

1 个答案:

答案 0 :(得分:0)

我所看到的让我相信你应该简单地省略不相关的部分。

您正在使用的框架的文档应具有解析URL的优先级规则。只要具有通配符的模式具有较低优先级,您就应该没问题。

例如,假设API处理多个库存,您可以获得JSON表示或带有这些端点的安全数据表:

users/:userId/inventory/:inventoryId
users/:userId/inventory/:inventoryId/items/dataSheet # A aggregate data-sheet for the location
users/:userId/inventory/:inventoryId/items/:itemId
users/:userId/inventory/:inventoryId/items/:itemId/dataSheet # Just for this item

# This example is a tad facetious, as this would probably be better:
# users/:userId/inventory/:inventoryId/dataSheet
#
# But it is just an example.

由于ID应为UUID,因此用户不可能将inventory/dataSheet误认为inventory/129c00d0a78a48318ea8aa0c66d93ddb。此外,这清楚地说明了从/inventory/dataSheet获得的PDF的影响。

比较这些,我发现第二个电报更明确的意图:

/users/b02e...531e/inventory/7471...dcad/items/-/dataSheet
/users/b02e...531e/inventory/7471...dcad/dataSheet

特别是因为它们之间的差异尚不清楚:

/users/b02e...531e/inventory/7471...dcad/items/-/dataSheet
/users/b02e...531e/inventory/7471...dcad/items/bf7f...9525/dataSheet