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

Posted

技术标签:

【中文标题】如何为 LOB 应用程序中的多个视图设计 REST API【英文标题】:How to design REST APIs for multiple views in LOB applications 【发布时间】: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。

【问题讨论】:

【参考方案1】:

查询字符串不起作用吗?

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

【讨论】:

以上是关于如何为 LOB 应用程序中的多个视图设计 REST API的主要内容,如果未能解决你的问题,请参考以下文章

如何为我的 UITableView 设计一个异步图像下载器,根据表格视图中的位置优先下载?

如何为 FrameLayout 中的多个视图制作浮动上下文菜单?

如何为 UICollectionViewCompositionalLayout 中的不同部分设置多个背景视图

如何为非 CRUD“命令”设计 REST API,例如激活和停用资源?

Oracle数据库中的大对象(LOB)数据类型介绍

如何为 UIPageViewController 中的所有 webViews 文本字体启用缩放