关于so??ap:图书馆而不是网络服务

Libraries rather than Web Services

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


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

如果你足够用力地眯起眼睛,我想它们可能看起来一模一样。但只是在一定程度上。

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

但是有些事情你不能通过将 Web 服务替换为
一个图书馆。

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

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

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

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

您可以在其他地方找到类似的响应(例如,Web 服务与共享库),但重要的是,这取决于您正在构建什么以及为谁构建。一个不能替代另一个,反之亦然。

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