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