9

我们已经建立了 WCF SOAP 服务。它的接口在 WSDL 中定义,从中为我们的服务器生成 C# 类(客户从相同的 WSDL 生成各种语言的客户端绑定)。WSDL 有一个当前版本,我们可以稍作更改,还有旧版本,如果没有弃用期、咨询等,我们不能更改或删除它们。SOAP 请求往往很复杂,在同一个请求中有多个 XML 命名空间.

WCF SOAP 服务有很多“智能”,它提供了我们需要的新 Web 应用程序所需的各种获取和报告功能。我们希望在客户端使用 AngularJS。但是这些复杂的 SOAP 请求在 JavaScript 世界中并不容易实现。如果我们只有一个 REST 服务,我们就可以使用 Angular Resource 服务。如果不是这样,那么一个使用 JSON 的服务器,尽管是像 SOAP 这样的 RPC 样式,将运行得相当接近。

对于如何减轻服务器和客户端之间的阻抗不匹配,我有各种想法。但听起来没有什么是快速或容易的。

我想过:-

  1. 编写一个新的 REST 服务。正是客户端想要的,但这是一个重要的新开发。
  2. WebHttpBinding 看起来可以提供一些东西。但在我看来,它需要自定义属性的 C# 标记(当我们的 C# 是从 WSDL 生成时如何实现)并且可能不支持我们的复杂类型
  3. 获取或编写大量客户端 JS 以抽象出调用 SOAP 服务。但是,除非这可以从 WSDL 自动生成,否则需要编写大量的客户端代码。
  4. 为服务器编写一个 IDispatchMessageFormatter,以接受我发明的一些 JSON 格式的消息。听起来很难,尤其是实现和集成 IDispatchMessageFormatter 的人的好例子似乎很难找到。
  5. 编写一个 MessageEncoder 在 JSON 和 XML 之间进行交换。但这并不是真正的编码操作,当我尝试编写它时变得非常清楚!

我正在寻找建议。

4

1 回答 1

8

一般来说,我建议为任何 AngularJS 开发使用 REST 服务,并使用 Node.js API 服务器包装了许多遗留系统。当然,有大量的“它取决于”,但通常大多数项目会按照这条路线更快乐、更有成效。

需要考虑的一些事情

  1. 您当前的 SOAP API 与用户界面要求的匹配程度如何?
  2. 您是否使用过 Express、Sinatra、Flask 或其他允许快速开发 REST API 的微框架?我发现我可以在几个小时内构建一个可靠的 Node.js Express API 服务器,然后在构建 AngularJS 应用程序时对其进行扩展。
  3. 你对 AngularJS 有多少经验?构建复杂的数据层客户端是一个更高级的项目。

REST 对 AngularJS 很重要的六个原因

  1. 使用 $resource 和 $http 编写 Angular 代码要快得多。获得正确的 API 是有效的 AngularJS 开发的一个很好的建议。实际上,您可能会争辩说 AngularJS 是为 REST 设计的,这就是为什么纯 JavaScript 适用于该模型的原因(参见 2)。
  2. Angular 的普通 JavaScript 对象数据模型与 REST API 很好地配合使用,该 API 使用与用户界面匹配的 JSON。但是,当不合适时会出现问题——Angular 没有正式的数据模型,因此您最终会编写大量代码来尝试合理化您的 API 以与 Angular 一起工作。像微风.js 这样的第三方库可能会提供一些解决方案,但它仍然很尴尬。
  3. 您可以使用缓存轻松扩展。很容易将 Redis 或 memcache 或 Varnish 或其他常见的 HTTP 缓存解决方案添加到组合中。由于 REST API 的透明性和幂等性,基于资源的抽象非常适合缓存策略。
  4. 前端和服务器的松散耦合 - 如果您从 SOAP 迁移或需要与其他服务集成,将更容易支持对后端的更改。
  5. 将 JSON API 与 AngularJS 逻辑分开测试通常更容易,因此您的测试套件将更简单、更有效。
  6. 您的新 REST API 将更容易用于未来的 AngularJS 和面向 JSON 的项目。

我希望这会有所帮助。

干杯,尼克

于 2013-07-16T19:44:35.067 回答