我应该如何通过 HTTP 请求指定资源数据库

How should I specify the resource database via HTTP Requests

我有一个 REST API,它将促进来自多个数据库的 CRUD。这些数据库都代表组织内不同位置的相同数据(IE 我们有 20 个左右的软件包实现,我们希望通过一个 API 从所有支持数据库中读取)。

我想知道 "Best Practice" 是什么来促进从哪个数据库访问资源?

例如,现在在我的请求 header 中,我有一个自定义 "X-" header 代表数据库 ID。不幸的是,这种事情感觉有点像解决方法。

我在考虑其他几个选项:

  1. 我可以将数据库 ID 放入 URI (/:db_id/resource/...)
  2. 我可以修改 Accept Header 就像有人使用 API 版本
  3. 我可以将 API 拆分为每个数据库一个服务

与其他选项相比,上述选项之一是否会被视为 "better",如果不是,那么对于这种架构来说 "best" 选项是什么?

我目前正在使用 ASP.NET 网络 API 2.

These databases all represent the same data for different locations within the organization

我认为这是您回答的关键 - 您不想在 API 之外公开内部实现细节(如数据库 ID 等) - 如果合并怎么办?或者有一天改变你的内部实现?

然而,这句话揭示了一个对企业有意义的区别——地点。

所以 - 我会将位置作为 URI 的一部分:

/api/location/{locationId}/resource...

然后在内部将 locationId 映射到数据库 ID。 LocationId 也可以是名称、代码或对 API 客户端有意义的唯一内容。

然后 - 如果您以后将多个位置合并到同一个数据库或以其他方式更改内部实现,则客户端不必更改。

此外,无论谁配置客户端应用程序,都可以考虑对业务有意义的事情 - 他们感兴趣的位置。