【发布时间】:2015-11-10 06:58:57
【问题描述】:
我目前正在为我们的服务设计而苦苦挣扎。我们使用许多 CRUD 操作构建 LOB 应用程序。我们首先使用 ASP.NET Web API 开始。
我们遇到的一个问题是我们有许多不同的视图在使用我们的 API。每个视图都有不同的要求。例如,视图需要...
- 我们服务的“家庭”实体
- 嵌入家庭成员的“家庭”实体
- 只有字段子集的“家族”实体
- 我们实体的不同表示
我们决定使用 OData 来解决这个问题,但很快我们就遇到了更多问题:
- 微软打折WCF数据服务的开发,所以我们不得不使用WebAPI的OData实现。与 WCF 数据服务不同,您必须使用 WebAPI 控制器自己实现每个基本的 CRUD 操作(我们为此构建了一个基类以使其保持干燥)
- 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。
【问题讨论】: