【问题标题】:Architect an API layer [closed]架构 API 层 [关闭]
【发布时间】:2018-01-27 06:11:02
【问题描述】:

宽泛的问题:

我们的应用正在迅速接近旧版状态。它有三个客户端:Windows 应用程序、浏览器(网站)和移动端。数据访问层充其量是复杂的,并且多年来一直在有机地增长。

我们想重新设计整个事物。 Windows 应用程序将消失(因为谁再这样做?)我们将只有基于浏览器的网站和移动应用程序,这两者都将消耗(截至今天,不存在) ) API 层。如果第三方希望进行自己的集成,该 API 层也将部分公开。

这是我的问题:

这个 API 层是什么样的?我的意思是……让我们从 Visual Studio 解决方案开始。 API 是一个单独的网站吗?那么在 IIS 上,是否会有两个站点……一个用于面向公众的网站,另一个用于 API 层?

或者,API 是否应该是主网站中的 .dll,并且端点 URL 应该是 IIS 中单个网站的一部分?

最终,我们将希望更新和发布一个不影响另一个。我只是不确定,在一个非常高的层次上,如何构建整个事情。

(如果重要的话:每个客户端都有自己的安装,可以是本地网络上的,也可以是云托管的。所有数据库都是单租户。)

【问题讨论】:

  • 啊,天哪——如果你要投票结束这个,你至少可以给我一个理由。这个网站不就是教人吗?
  • 不,这个网站是关于编程问题的问答。正如您自己所说,这是一个广泛而普遍的问题(甚至可能基于意见)。见stackoverflow.com/help/dont-ask
  • 这取决于你的 API 应该做什么。如果它只是用于数据传输,那么最好开发为 Web 服务(比如说 WCF)。 Web 服务可以部署在与应用服务器相同的服务器上,也可以部署在不同的服务器上(这使您的应用具有可扩展性),但部署会变得有点复杂
  • 这个问题似乎更适合 StackExchange 的软件工程社区,因为它专注于架构。

标签: c# asp.net .net wcf


【解决方案1】:

我认为一个解决方案包含多个项目。

如果您将 API 作为不同的站点,您可以轻松地将 Swagger 和 Swashbuckle 等内容添加到您的 API https://github.com/domaindrivendev/Swashbuckle

这将使文档变得容易。

从这里您可能希望将您的业务逻辑(做特定事情的事情)放在第三个项目中。

从这里你有两个选择。网页可以使用自己的 API,也可以引用自己的业务逻辑项目。

如果是面向公众的,不同站点上的 API 会提供一些额外的好处: 域分离 负载平衡和附加保护 不影响站点的资源限制和节流

这类项目非常有趣,因此请考虑您的选择以及最适合的项目。

我希望这会有所帮助!

【讨论】:

  • 是的,这很有帮助。感谢您愿意分享和教导!
【解决方案2】:

我更喜欢的方式是使用单独的 API 项目。您将 API 项目发布到一个 url,将网站发布到另一个。这使您可以不受干扰地开发这两个应用程序。

也就是说,我通常将 API 的逻辑放在服务层(SOA 架构)中。我的 api 项目只是将输入传递给服务层并使用服务响应进行响应。通过这种方式,您可以将 api 在公共和私有之间分开,并且仍然将所有逻辑包含在一个地方。

通常我创建一个 Api 包装器作为一个单独的项目来处理所有 API 调用,因此其他开发人员可以使用 API 包装器(只是为了让我的感觉开发人员更容易与 api 交谈)

【讨论】:

  • 好的,这很有道理。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2015-04-04
  • 2012-11-30
  • 2010-11-14
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
相关资源
最近更新 更多