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

res*_*est 6 rest http

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

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

http://ourserver/service/widgets/3

获取ID为3的小部件

但我有时也需要通过它的SKU#访问一个小部件.

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

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

以下哪项更好?

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

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

Dar*_*ler 13

我建议考虑以下几点:

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

GET http://ourserver/service/widgets/43
Run Code Online (Sandbox Code Playgroud)

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