gpt4 book ai didi

URL 中没有 ID 的 RESTful API

转载 作者:行者123 更新时间:2023-12-03 01:15:23 24 4
gpt4 key购买 nike

我一直在和我的一位同事讨论做到这一点的最佳方法

这是一个示例场景:

我正在尝试获取 ID 为 1234 的客户的所有订单。

考虑以下端点:

/customer/orders

使用 GET 请求,带有以下 header :

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

通过 Authorization header ,我们的身份验证机制将此请求识别为 ID 为 1234 的客户,并且我们的服务返回所需的订单。

他试图说服我这是正确的,因为登录的客户只会请求他们的订单(在本例中,属于客户 1234 的订单) - 因此将 ID 传入URL 是不必要的。然而......对我来说,这不是 RESTful(我可能是错的)

在我看来,应该是这样的:.

/customer/1234/orders

带有标题(作为示例)

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

通过 Authorization header ,我们验证用户是否有权检索这些订单...如果是,则返回它们,否则返回 401

我的问题是,哪种方法是首选?

我当然可以看到第一种方式的好处,但为了保持我们的 api RESTful,我的内心建议采用第二种方式......

最佳答案

资源的识别是一个关键的 REST 约束。您的订单和我的订单不是同一资源,因此它们应该(不是必须)具有不同的标识符。

您应该为他们提供唯一标识符(即/customers/1234/orders)的实际原因是因为支持 HTTP 缓存会更容易。 HTTP 缓存中介主要使用 URI 作为缓存键。通过使用变化 header ,可以使用其他 header (如 auth)作为缓存键的一部分,但是,对此类机制的支持不太可靠/广泛。

即使现在您没有计划使用 HTTP 缓存,最好还是谨慎行事,并确保您的 URI 设计为允许此功能(如果您将来需要)。

在构建客户端 URI 时,不必在 URI 中包含客户 ID 有一些好处。然而,RESTful 系统应该通过将这些 URI 嵌入到返回的表示中来为客户端提供 URI。客户端不需要构建这些 URI,因此客户端使用带有 id 的 URI 与使用不带 Id 的 URI 一样,不需要做任何额外工作。如果您准备吞下超媒体药丸,那么不包含 ID 就没有任何优势。

关于URL 中没有 ID 的 RESTful API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20846304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com