正如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
,因为如果多个参数是资源,它就没有信息并且难以使用。
因此,参数名称可能是描述参数与其所提供的资源/方法之间的交互的东西。但是找到合适的描述有多容易?
有没有人对这些问题有任何想法?
答案 0 :(得分:2)
基本上,您应该通过其完整URI来引用资源。这是最好的做法。期。你是错误的,它是过度指定的,因为URI的语义对REST是透明的。客户端或服务器不应该依赖URI来推断资源的类型。这就是媒体类型标题的用途。
如何命名参数实际上取决于与父资源的关系。例如,如果您有汽车资源和驱动程序资源,只要有关于当前驱动程序的汽车媒体类型的文档是明确的,那么car.current_driver = 'http://myapi/drivers/12'
就没有错。当尝试通过任何方法设置它时,Car资源不应接受任何除了具有Driver的媒体类型的资源之外的任何内容。