REST API最佳实践 - 资源作为参数

时间:2013-11-08 11:54:37

标签: rest parameters url-parameters

正如OO经常涉及参数是对象的方法一样,REST似乎不可避免地导致需要将资源作为参数传递。这怎么做得最好?

一种方式似乎是资源的标量键是参数。因此,我们可能会传递fooid=21以识别foo类型的资源。可能单个标量不足以识别资源,因此我们可能需要传递footype=a&fooelement=2。这看起来不太好,因为不清楚这些标量参数是否实际连接并引用单个资源。

真的,如果参数是资源,它的URI不应该引用它吗?因此,我们可能希望传递更多内容,例如/foo/21/foo/a/2。但接下来有一个关于调用参数的问题。它应该是foo=/foo/21吗?可能不是。显而易见的障碍是资源现已过度指定。我们知道/foo/21是一个foo资源的实例而不再被告知,我们不希望它能够写bar=/foo/21

我们并不真正想要一个完全中性的参数名称,例如resource=/foo/21,因为如果多个参数是资源,它就没有信息并且难以使用。

因此,参数名称可能是描述参数与其所提供的资源/方法之间的交互的东西。但是找到合适的描述有多容易?

有没有人对这些问题有任何想法?

1 个答案:

答案 0 :(得分:2)

基本上,您应该通过其完整URI来引用资源。这是最好的做法。期。你是错误的,它是过度指定的,因为URI的语义对REST是透明的。客户端或服务器不应该依赖URI来推断资源的类型。这就是媒体类型标题的用途。

如何命名参数实际上取决于与父资源的关系。例如,如果您有汽车资源和驱动程序资源,只要有关于当前驱动程序的汽车媒体类型的文档是明确的,那么car.current_driver = 'http://myapi/drivers/12'就没有错。当尝试通过任何方法设置它时,Car资源不应接受任何除了具有Driver的媒体类型的资源之外的任何内容。