REST使用两个属性访问资源的最佳实践

时间:2010-07-02 08:34:13

标签: rest uri

我有唯一的RESTful资源,只能在具有两个属性的系统中识别。 我想知道的是这样做的最佳实践方法是什么。

使用id属性(不是唯一的)和name属性(也不是唯一的)来标识资源,但是这两个属性的组合是唯一的。

目前我们的URI看起来像这样,但这似乎不对:

http://www.domain.com/somepath/myresource?firstid=1&secondid=aname

我当时认为将两个属性组合起来会更好,例如'firstid-aname',因为这似乎描述了资源的永久性。例如这样你就得到了一个URI:

http://www.domain.com/somepath/myresource/firstid-aname

或者做这样的事情会更好,我在其他地方看到过:

http://www.domain.com/somepath/myresource;firstid=1;secondid=aname

任何建议都将不胜感激。 感谢

2 个答案:

答案 0 :(得分:3)

我认为你的第一个例子并不是那么糟糕。可能有些人认为它不是很干净,因为有各种非字母数字字符。通常你会看到类似的东西:

http://www.domain.com/somepath/myresource/firstid/1/secondid/aname

然而,由于REST是一种架构而非标准,因此您可以随心所欲地进行操作。我个人认为URI不一定非常漂亮。

在有人抱怨之前

编辑:当然,如果他们这样做,那就永远不会是坏事。大多数时候,它们是由不关心的程序读取和发出的。漂亮的URI更适合调试。

答案 1 :(得分:2)

对于RESTx,我们允许在URL中定义“位置参数”。所以,你可以这样写:

http://www.domain.com/somepath/myresource/1/aname

但是你总是可以选择在URL中指定普通的查询参数,如下所示:

http://www.domain.com/somepath/myresource?firstid=1&secondid=aname

哪种选项最适合您可能取决于您编写的客户端应用程序的类型。例如,RESTx不会强迫您使用其中一个,您可以同时使用它们。

但请考虑一下:某些Web缓存和其他“智能”Web基础结构元素在URL中存在参数问题。它们可能会在路径结束后忽略所有内容(例如查询参数),因此,您的RESTful资源不会被缓存或以其他方式正确处理。这可能不是小型组织中的问题,但如果您的RESTful资源在Internet上公开,那么您可能需要考虑这一点。

我喜欢遵循URL路径应该标识资源本身的原则,而任何参数仅用于修改此一个请求的输出。当然,如果您总是使用相同的查询参数,那么您也可以将它们作为URL中的位置参数。