如何在LOB应用程序中为多个视图设计REST API

时间:2015-08-17 15:06:25

标签: api rest

我目前正在努力应对我们的服务设计。我们使用许多CRUD操作构建LOB应用程序。我们首先使用ASP.NET Web API开始。

我们遇到的一个问题是我们有许多不同的视图消耗我们的API。每个视图都有不同的要求。例如,视图需要......

  • 来自我们服务的“家庭”实体
  • 拥有嵌入式家庭成员的“家庭”实体
  • 仅包含字段子集的“家庭”实体
  • 我们实体的不同表示

我们决定使用OData来解决这个问题,但很快我们遇到了更多问题:

  • Microsoft对WCF数据服务的开发进行了折扣,因此我们不得不使用WebAPI的OData实现。与WCF数据服务不同,您必须自己使用WebAPI控制器实现每个基本的CRUD操作(我们为此构建一个基类来保持DRY)。
  • WebAPI(OData v4)中的实现缺少OData v4规范中的许多功能,例如更新子资源,链接操作,如$ expand($ top)。我们为此在GitHub上创建了问题,但这些问题没有太大进展。

我真的不知道其他公司是如何做到这一点的。对我来说,许多博客文章和教程中描述的“标准REST服务”对于我迄今为止构建的几乎所有LOB应用程序来说都太基础了。可能有效的唯一解决方案是为每个子资源发送HTTP请求:

  • GET / api / families / 5
  • GET / api / families / 5 / tags
  • GET / api / families / 5 / members
  • GET / api / families / 5 / address
  • GET / api / families / 5 / contact

但这听起来像是一个巨大的可扩展性问题。

一些公司正在研究这个问题:Facebook推出了自己的查询语言和框架(GraphQL / Relay),Netflix正在研究FALCOR。

现在这个问题怎么解决了?不是每个人都在使用OData。

1 个答案:

答案 0 :(得分:0)

查询字符串不起作用吗?

GET /api/families/5 GET /api/families/5?view=withMembers GET /api/families/5?view=view2 ...etc