我正在使用 RESTful 网络服务,并且我有一个特殊要求,我需要从数据库中提取一条记录,但该记录有一个组合的主键。您如何建议以考虑这种情况的方式形成 URI?
在我看来,典型的案例是:
//brings the product whose PK is 1
http://mywebsite.com/products/1
//brings all the products
http://mywebsite.com/products
在 REST 中,URI 标识资源。在您编写时,识别资源的规范方法是
/products/{id}
由于您需要组合主键,我基本上看到两个选项。
你可以使用这样的模式:
/products/{key1}/{key2}
一起key1
并key2
会识别产品。
这种方法的问题是key1
可以解释为 "above" key2
。可能有类似的资源
/products/foo/bar
和
/products/foo/baz
wherekey1
在foo
这两种情况下key2
都是不同的。如果您的关键组件可以这样解释,我建议使用这种方法。
如果要避免关键部分的顺序,可以使用查询参数。
/products?key1=foo&key2=bar
在这种方法中,key1
并key2
没有特殊的顺序,没有一个是“高于”另一个。
这种方法的问题在于,像这样的 URL 通常被解释为过滤集合:返回所有产品 wherekey1=foo
和key2=bar
. 但是您不要求(过滤的)集合,而是单个产品。
如果您的关键组件不需要完全相等,我建议使用第一种方法。