是否存在使用斜杠处理资源的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
,然后强制任何显示组件在其结束时进行转换,但我认为其他人必须遇到类似的问题,所以为什么不要求最佳实践(或至少对某些有意义的想法)?
答案 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
并且用户从那里导航。