REST设计质疑需要向客户端公开的资源的多个标识符

时间:2010-11-10 21:35:55

标签: http rest

我想问一个关于我正在公开的REST HTTP API的设计问题。

我有时必须访问ID为3的小部件:

http://ourserver/service/widgets/3

获取ID为3的小部件

但我有时也需要通过它的SKU#来访问小部件。

通过2个URL公开相同的资源是不对的?

BUt我需要我的客户通过它的ID或它的SKU来获取一个小部件。

以下哪项更好?

  • http://ourserver/service/widgets/bysku/skyunumber
  • http://ourserver/service/widgets/skyunumber?idtype=sku

再说一次,我需要我的客户能够以两种不同的方式查找小部件。设计网址的最佳方式是什么?

1 个答案:

答案 0 :(得分:13)

我建议考虑以下事项:

GET http://ourserver/service/widgets?sku=34342323
=>
303 See Other
Location: http://ourserver/service/widgets/43

GET http://ourserver/service/widgets/43

通过使用重定向,您可以支持任意数量的条件来查找小部件。要考虑的关键问题是当您开始启用缓存时会发生什么。如果从多个URL返回表示,则最终会使用多个副本污染缓存,这使得在执行更新时使缓存中的副本无效变得更加困难。