5

我即将设计我的 Web 服务 API,我的 API 的大部分功能基本上与我的 Web 应用程序非常相似。

现在的问题是,我应该创建 1 个单一方法并将它们用于 Web 应用程序和 Web 服务 api 吗?(这似乎是合乎逻辑的解决方案,但它非常复杂;复制 Web 应用程序使用的方法要容易得多,并将两者分开,即一种方法用于 Web 应用程序,一种方法用于 Web 服务。)

你们是怎么做到的?

1)重用:一种主要方法,并将它们重用于Web应用程序和Web服务应用程序(我喜欢这个,但它很复杂)

  • WebAppMethodX --uses--> COMMONFUNCTIONMETHOD_X
  • APIMethodX ---使用----> COMMONFUNCTIONMETHOD_X

即 Commonfunctionmethod_x 包含可重用的通用特性集

PRO:更少的代码,更少的维护,更少的错误。

缺点:非常复杂

2) DUPLICATE:两种方法,一种用于Web 应用程序,一种用于Web 服务。

  • WebAppMethodX
  • API方法X

优点:简单

缺点:重复 = 更多代码、更多维护、更多错误!

4

4 回答 4

3

您的公共 Web 服务 API 与内部应用程序 API 的用例很可能会有所不同。创建一个公共服务项目/层,并在您的 Web 应用程序和面向公众的 Web 服务 API 中使用相同的层。为每个 Web 应用程序和 Web 服务创建一个单独的 http-invokable 方法。

它归结为存在

1)不同的安全问题。例如,最好(通常需要)提供一个使用公共 API 的示例客户端应用程序,以便其他人可以轻松地了解您提供的内容。该客户端 API 可能需要传递您提供给它们的对象构造,这些构造已经被剥离了内部、安全的逻辑/内容。(请记住,编译后的 C# 也可能是带有 Reflector 的明文!)

2) 不同的需求和约束。例如,对于内部应用程序调用,您有时会执行与面向公众的 Web 服务 API 不同的业务规则(通常后者更受范围限制)。

如果您将业务逻辑设计到您的服务层并分别从您的 Web 项目和您的 Web 服务项目中很好地调用这些类/方法,那么无论如何您将有大量的代码重用,而不会试图通过混合用例使事情变得过于复杂。

于 2010-12-30T01:41:50.243 回答
1

一种方法,在 Web 服务中,让您的 Web 应用程序调用它。

我不明白这两种方法的“一种主要方法”是什么意思。Web 应用程序没有 main 方法;它们被部署到应用服务器。

还有一点需要注意:您应该根据 POCO 接口编写服务。一旦你这样做了,部署就成为你做出的选择。

于 2010-12-30T01:40:16.900 回答
1

一种方法。否则当你发现一个错误并修复它,然后忘记在另一个......你会哭的。

于 2010-12-30T01:41:19.413 回答
0

这取决于..

通常,我会将它们分开。通过这种方式,您可以消除两个高级进程之间的相互依赖关系。代码重用在进程中很好,但有时您希望能够在同一服务上使用不同的应用程序。

但是,如果两者高度依赖于对方,您将希望重用相同的功能,以便在一个地方更改它会在另一个地方更改它。从而避免开发过程中出现更多潜在问题。

于 2010-12-30T01:43:10.297 回答