ruby - SOA 和 API - API 是端点服务还是它们需要不同的服务?

标签 ruby web-services api rest soa

我正在设计一个 RESTful 面向服务架构的 Web 应用程序,以使其尽可能好地扩展并将不同类型的服务放在不同的机器上(将资源密集型操作与其他服务分开)。

我还希望用户能够访问他们的数据来制作他们自己的应用程序。 我不确定我是否必须将这些服务设计为向世界开放,所以只需让它们在 Web 域(如 AWS)上监听或创建另一个服务来处理 API 请求即可。

拥有安全开放的网络服务对我来说很有意义,但它确实给架构本身增加了很多复杂性,因为每个服务都变成了一个客户端,必须被同一套件中的其他服务识别(信任),就像以及我必须承认第 3 方应用程序试图访问他们自己的数据。

这是正确的 SOA 方法吗?我想确定的是,我没有混合错误的概念来设计错误的面向服务的架构。

所有服务都有 crud 接口(interface),因此可以使用 REST 原则查询它们。

最佳答案

根据您系统的性质,拥有不安全的网络服务可能是可行的,因此它们都可以在没有安全开销的情况下相互交谈。要使服务对第三方可用,您可以使用 Service Perimeter Guard作为从外部访问服务并在此层应用安全性的唯一机制。这样做的好处是可以为您的所有服务提供一致的安全性,但是如果边界被破坏,则可以访问所有服务。

此方法可能不适用于所有服务。例如,被视为“ secret ”的信息(例如家庭住址、紧急联系方式、健康数据等员工数据)需要得到保护,以便未经授权的员工无法访问。

关于您将不同的服务放在不同的机器上的评论,这将导致某些机器上的资源利用不足,而另一些机器上的资源可能过度利用。为避免这种情况,将所有服务部署到所有机器并使用负载平衡器。这将提供更优化的资源使用并简化部署(例如,使用 Chef 或 Puppet),因为所有节点都是相同的。随着资源使用量的增加,您可以简单地添加更多节点。同样,如果资源使用率低,您可以删除节点。

关于您的最后一句话,REST 比 CRUD(例如 HATEOAS)要多得多。

关于ruby - SOA 和 API - API 是端点服务还是它们需要不同的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12761827/

相关文章:

ruby - Ruby 的 AST 中的 'send' 关键字是什么意思?

ruby - 如何获取通过 "pv"命令管道传输的命令的错误输出

java - 使用 Apache Camel ProdcerTemplate 和 CxfComponent 发送多个参数作为 requestBody

api - Youtube API V3难度

ruby - 为什么 cucumber 钩子(Hook)方法不是小写的?

Ruby - 将具有管道分隔值的数组转换为哈希数组

c++ - Cassandra C/C++ API cass_statement_bind_timestamp

api - Podio Api - 创建项目错误 - "Invalid value null (null): must be Range"

web-services - Delphi-7 WSDL 导入器错误 "The following types, referred to in the WSDL document are not being represented..."

java - 什么基于 JVM 的脚本语言支持@WebService 在运行时创建服务?