我应该如何构建我的应用程序以支持移动应用程序

本文关键字:应用程序 我的 支持 移动 构建 何构建 我应该 | 更新日期: 2023-09-27 18:33:44

我正在寻求有关系统架构的帮助。让我概述一下:

我有一个sql服务器和oracle数据库,可以通过一组wcf服务访问。

这些 WCF 服务终结点由许多 Web 应用程序使用。

所有应用程序都是用 .net c# 4.0 编写的。

现在需要移动应用程序(iPhone应用程序,Android应用程序(来访问数据库提供的数据。

我的第一个问题是,向移动应用程序提供数据的最佳媒介是什么?我认为的选项包括通过我现有的 wcf 服务或包装器项目(调用现有的 wcf 服务(,该项目公开移动应用程序可以访问的 WebApi 或 MVC 控制器。有关移动应用程序使用的最佳方法的建议。请记住,移动应用程序需要较小的有效载荷,并且还需要采取安全措施来防止未经授权的移动应用程序访问服务/包装器项目。

我的下一个问题是关于 WCF 服务的版本控制。我希望能够在不影响潜在包装器项目的情况下无缝更新 wcf 服务,反之亦然。由于第三方移动应用程序将处于不同的发布周期,因此需要支持多个版本。我希望这可能涉及部署应用程序的多个版本,但想知道通常如何处理这种做法?

所有应用程序都部署在 IIS 7.0 中的 Windows 服务器上。

我应该如何构建我的应用程序以支持移动应用程序

嗯...我很想听听其他答案,但这是我对你问题的看法。

首先,我认为您应该将业务逻辑与 WCF 服务分离(如果尚未分离(。这使您能够与 WCF 服务并行设置 ASP.NET Web API 服务。与其让一些 MVC 或 Web API 调用您的 WCF,它可以并排作为替代方案。

您也可以在 WCF 服务中创建 Json 终结点,尽管我更喜欢同时拥有 WCF 和 Web API 的想法,因为最新的具有更多的互操作性。如果将所有逻辑与服务分离,它们应该变得相当简单,即共享所有业务逻辑。

对于您的移动iPhone和Android应用程序,使用Web Api服务可能更容易。我在维护多个版本的服务 API 方面经验不足,但如果将移动应用程序连接到 Web API 服务,则可以通过为每个 api 版本创建多个文件夹来进行版本控制。这将导致业务逻辑重复...

正如我所说,我对其他意见非常感兴趣。

正如Dante所说,我肯定会将JSON视为我的数据格式。 也按照建议拆分为 n 层。

在身份验证方面...

您有多少第三方应用程序? 听起来你没有很多,但如果你这样做(而且他们是真正的第三方,即不受你控制(,那么你可能需要为此查看 OAUTH 解决方案。

如果你只有少数几个并且你控制,那么这是过度的IMO,相反,我只是有一个简单的密钥,每个应用程序都知道。 每个调用都会传递密钥,服务会检查这一点。 显然,所有传输都应该通过SSL进行,因此没有人可以窃听密钥或数据是什么。

在检查键方面,您需要使用方面或自定义属性来避免在每个函数上编写样板。

如果需要移动支持,最好避免使用 WCF 并使用 Web API。原因是,虽然所有本机移动平台都可以使用 XML,并且在 WCF 中可以使用基本 HTTP 绑定来模拟旧式 Web 服务,但 Web API 通过 HTTP 提供精简和平均通信,这些平台的浏览器也可以使用这些通信,而不仅仅是本机代码。

如果它是移动和互操作性,我会毫不犹豫地使用 Web API。

我只会在某些条件下使用 WCF。

如有疑问,请插入抽象。我会想象您已经构建的服务作为域服务。这些服务通过模型 (DTO( 和更新 (API( 为具有不同需求的多个客户提供服务。为了实现这一点,您可以轻松进行版本控制并能够灵活地减少网络上的内容,请为要支持的屏幕引入一个层。

我建议构建一个"移动服务",它只能依赖于域服务,并有办法将DTO转换为移动可消费块。此层可以位于 WebAPI ASP.NET,也可以位于 vert.x 或节点外部.js以便您可以根据需要启动功能。最后,你想要的是域和消费者之间的服务契约,在它们之间引入一个层,从长远来看,这将给你带来杠杆来取代任何一端,而不会产生巨大的成本。它将允许您根据任一需求对 API 进行版本控制,而无需重新接触整个堆栈。

当然,您需要考虑一种方法,让客户端设备提前告诉您,它们需要您的服务提供哪些功能,以便您可以确定要到达的逻辑端点。这将允许您为客户端和域之间的版本协商开辟方法。

我建议查看LinkedIn基础设施,了解他们如何构建移动应用程序(是的,他们不使用 ASP.NET 但架构模式仍然合理(。

我的 2c。