库而不是 Web 服务

Libraries rather than Web Services

我对 pros/cons 将大型应用程序(工业监控软件)重构为一堆库/NuGet 包而不是作为独立服务感兴趣。人们认为它们几乎是相同的,即服务可以构建为应用程序中托管的库,也可以构建为 Web 服务并从外部连接到应用程序。唯一的区别是集成(代码级别与网络 SOAP 或 REST 流量)。我不确定是不是那么简单,正在寻找每个 pros/cons。

The perception is that they're almost identical...

如果你仔细地眯着眼睛,我认为它们看起来可能是一样的。但仅限于一点。

您可以在 Web 服务中实现一些功能,也可以在库中实现。网络服务 提供了一个 API 来调用,库也提供了一个 API 来调用。您调用 Web 服务,您可以调用 图书馆也是。

但是有些事情您无法通过将 Web 服务替换为 一个图书馆。

您的库在.dll 文件中? PHP 应用程序将如何使用它们?还是 Java 申请? SOAP/REST 与客户无关。您的 Web 服务可以使用任何技术栈,您的客户端可以使用任何技术栈。 对于库,您只能使用编写库时使用的相同技术。

Web 服务是可单独部署的组件。修复 Web 服务的错​​误,部署,您的 10 个客户端在下一次调用时得到修复。现在修复库的一些错误然后更新所有 10 个客户端以使用 库的新版本。

安全性如何?例如,Web 服务可以有一个数据库。你不能直接访问数据库,你这样做 使用 API 网络服务为您提供。你有一个使用数据库的图书馆吗?猜猜连接在哪里 找到字符串、用户名和密码。

可扩展性如何?如果您有 Web 服务,您可以横向扩展它,您的客户会立即受益 从改进。如果库在客户端中,您将如何扩展它?通过扩展客户端?

您可以在其他地方找到类似的回复(例如 Web Service vs. Shared Library),但要带回家的要点是,这取决于您在构建什么以及为谁构建。一个不是另一个的一般替代品,反之亦然。

如果您正在构建一个使用所有这些组件的单一整体应用程序,那么这些组件是微服务还是托管库对您来说可能并不重要。使用库实际上可能更容易构建。但是,如果您的计划是实际为其他客户提供服务,那么托管库将无法正常工作。