具有多个标识符的 REST 端点

REST Endpoint with more then one identifier

我遇到过这种情况,我需要获得一个可以通过多个 id 识别的项目。消费者应该能够决定他们使用哪一个。

/product/{productId}
/product/{gtin}
/product/{pzn}

如果我像上面显示的那样操作,则不再清楚消费者使用的是什么 ID。

目前我的解决方案:

/product/productId/{productId}
/product/gtin/{gtin}
/product/pzn/{pzn}

处理这种多样性的最佳做法是什么?

What is the best practice to deal with this kind of variety?

任何确保您的标识符不模糊的东西都是 很好

在网络上,您通常会看到在查询字符串中使用 key/value 对,因为 HTML

原生支持
/product?productId={productId}
/product?gtin={gtin}
/product?pzn={pzn}

如果您不关心 HTML 支持,但仍希望能够利用通用工具,那么请查看 URI Templates,它允许您交流其他 URI 构造方法.

/product/productId/{productId}
/product?productId={productId}

这些备选方案中的任何一个都很好。后一种拼写更适合 HTML 形式,前一种拼写更适合 relative resolution.

如何选择?由于机器不关心,请优先考虑受选择影响的某些人组(操作员阅读日志、编写文档的作者、查看浏览器历史记录的消费者),然后选择最适合他们需要的拼写。