我想问一个关于我正在公开的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
再说一次,我需要我的客户能够以两种不同的方式查找小部件。设计网址的最佳方式是什么?
答案 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返回表示,则最终会使用多个副本污染缓存,这使得在执行更新时使缓存中的副本无效变得更加困难。