我应该如何通过HTTP请求

时间:2016-10-13 22:25:26

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

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

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

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

我在考虑其他一些选择:

  1. 我可以将数据库ID烘焙到URI(/:db_id / resource /...)
  2. 我可以像使用API​​版本
  3. 那样修改Accept Header
  4. 我可以将API拆分为每个数据库一个服务
  5. 上述选项之一是否会被认为比其他选项“更好”,如果不是,那么这种架构的“最佳”选择是什么?

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

1 个答案:

答案 0 :(得分:1)

  

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

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

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

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

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

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

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

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