带斜杠的资源的REST约定

时间:2010-10-27 19:52:13

标签: rest conventions

是否存在使用斜杠处理资源的REST约定?

例如,假设正常的REST资源如下:

  • /ice cream/chocolate - 返回 巧克力冰淇淋的成分
  • /ice cream/rocky road - 返回 岩石路冰淇淋的成分
  • /ice cream/strawberry/banana - 返回stawberry香蕉 成分

只有/ice cream/strawbery/banana不能正常工作,因为它看起来像一个草莓的资源,其子组件是香蕉......不是我们想要的。

当您尝试使用'/' '%2F'转义许多Web服务器(包括glassfish和apache)时,默认情况下会将其阻止为可能的安全违规。有服务器覆盖,但后来我需要让一个不同的团队参与......我宁愿自己处理它。

那么一个有RESTful思想的人呢?我不能阻止某人为他们的冰淇淋“草莓/香蕉”命名。

我正在考虑使用一些自定义转义序列,如stawberry*slash*banana,然后强制任何显示组件在其结束时进行转换,但我认为其他人必须遇到类似的问题,所以为什么不要求最佳实践(或至少对某些有意义的想法)?

2 个答案:

答案 0 :(得分:2)

查看堆栈溢出对他们的问题的影响。他们添加一个连字符而不是空格。您可以通过用连字符替换斜杠来完成相同的操作。这样你就可以保持URI的可读性,但是你可以避免使用保留的字符。

您不需要资源名称来准确映射到冰淇淋的名称,因为您永远不应该使用名称构建URI。如果有人想找到草莓香蕉冰淇淋,那么他们应该使用一些标准进行搜索,你会显示一个带链接的匹配列表,然后选择草莓香蕉。用户并不关心您是否将斜杠换成了连字符,因为冰淇淋的名称仍然包含斜杠。

答案 1 :(得分:0)

如果您正在设置URI,那么您可以决定如何对URI进行编码。要真正成为RESTful,URI并不一定具有意义。 / XYZ / 12345可能是巧克力而ABC / zzzzz是崎岖不平的道路。全取决于你。你已经决定让你的URI有一些含义,现在遇到这个问题,在URI中有斜杠,但这与REST无关,而是与你自己的URI编码约定。实际上,REST希望您从某个基本起点列出您的资源,然后用户使用您提供的URI进行导航。您可以提供一个列表(以其他格式):

Chocolate Ice Cream http://base.com/XYZ/12345
Rocky Road Ice Cream http://base.com/ABC/zzzzz
Strawberry/Banana Ice Cream http://base2.com/G789

并且用户从那里导航。