2010-10-27 75 views
2

斜杠资源处理有任何REST约定吗?斜杠资源的REST约定

举例来说,假设一个正常的REST资源是这样的:

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

只有/ice cream/strawbery/banana不起作用,因为这看起来像草莓的资源与香蕉的子组件....不完全是我们要去的。

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

那么,一个有着REST风格的人呢?我不能很好地阻止某人命名他们的冰淇淋“草莓/香蕉”。

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

+0

如果您有PATHS资源,其中包含有关路径的元数据,该怎么办?在我看来,这应该得到RESTful API的支持,否则就是范式的一个不必要的限制。编码时遇到什么问题? – magritte 2017-01-30 15:09:56

回答

1

如果您正在设置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 

和用户从那里导航。

+0

+1表示“URI并非真的有意义”。这在干净的URL的喧闹声中迷失了方向。 – rojoca 2010-11-01 17:33:17

2

看看堆栈溢出与他们的问题。他们添加一个连字符而不是空格。您可以通过用连字符替换斜杠来做同样的事情。这样你保持你的URI的可读性,但你避免保留的字符。

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