【问题标题】:How should I specify the resource database via HTTP Requests我应该如何通过 HTTP 请求指定资源数据库
【发布时间】:2017-02-23 05:29:41
【问题描述】:

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

我想知道促进从哪个数据库访问资源的“最佳实践”是什么?

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

我正在考虑其他一些选择:

  1. 我可以将数据库 ID 烘焙到 URI (/:db_id/resource/...) 中
  2. 我可以像使用 API 版本的人一样修改 Accept Header
  3. 我可以将 API 拆分为每个数据库一个服务

上述选项中的一个是否会被认为比其他选项“更好”,如果不是,那么对于这种架构,什么被认为是“最佳”选项?

我目前正在使用 ASP.NET Web API 2。

【问题讨论】:

    标签: asp.net rest asp.net-web-api restful-architecture api-design


    【解决方案1】:

    这些数据库都代表组织内不同位置的相同数据

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

    但是,这句话揭示了对业务有意义的区别 - 位置。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 2016-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多