gpt4 book ai didi

api - RESTful 如何使用子域作为资源标识符?

转载 作者:行者123 更新时间:2023-12-05 03:15:10 25 4
gpt4 key购买 nike

我们有一个单页应用程序 (AngularJs),它使用 REST API 与后端交互。该应用程序允许每个用户查看有关用户所在公司的信息,但不能查看任何其他公司的数据。我们当前的 REST API 如下所示:

domain.com/companies/123
domain.com/companies/123/employees
domain.com/employees/987

注意:所有 ID 都是 GUID,因此最后一个端点没有公司 ID,只有员工 ID。

我们最近开始着手强制要求每个用户都可以访问仅与用户所在公司相关的信息。这意味着在后端我们需要跟踪登录用户是谁(这是一个简单的身份验证问题)以及确定其信息被访问的公司。后者不容易从我们的 REST API 调用中确定,因为其中一些调用不包含公司 ID,例如上面显示的最后一个。

我们决定不在 UI 中跟踪公司 ID 并将其与每个请求一起发送,而是将其放在子域中。因此,假设 ACME 公司的 id=123 我们的 API 将更改如下:

acme.domain.com
acme.domain.com/employees
acme.domain.com/employees/987

这使得在后端识别公司变得非常容易,并且需要从我们的单页应用程序对 REST 调用进行微小的更改。但是,我担心的是它破坏了我们 API 的 RESTfulness。这也可能会引入一些 CORS 问题,但我现在没有它的用​​例。

我想听听您对此的看法以及您过去是如何处理这个问题的。

谢谢!

最佳答案

在类似的应用程序中,我们确实将“公司 ID”放入路径(每个公司特定的路径)中,而不是作为子域。

我根本不在乎某些术语爱好者是否认为我的设计是“RESTful“或不,但我可以看到使用域的几个缺点,主要是因为世界倾向于假设域标识“服务器”,而路径是您在该服务器上找到项目的方式。会有一些额外的东西你必须处理多个域,而你不会用路径:

  • HTTPS - 你需要一个通配符证书而不是一个简单的证书
  • DNS - 您要么拥有通配符 DNS 条目,要么您的应用程序管理现在将涉及 DNS 管理
  • 您提到的所有 CORS 内容 - 在您的特定应用程序中可能会或可能不会令人头疼 - 任何对安全策略做出“相同域”假设的东西都会受到影响。

当然,如果您希望公司之间有很多隔离,并且实际上您会很乐意为每个公司运行一个单独的服务器,那么这不是一个糟糕的设计。我看不出它或多或少是 RESTful,因为这只是一个观点问题。

关于api - RESTful 如何使用子域作为资源标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20179352/

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