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

时间:2012-10-06 16:57:36

标签: ruby web-services api rest soa

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

根据系统的性质,拥有不安全的Web服务可能是可行的,因此他们可以在没有安全开销的情况下相互通信。要使服务可供第三方使用,您可以使用Service Perimeter Guard作为外部访问服务的唯一机制,并在此层应用安全性。这样做的好处是可以在所有服务中提供一致的安全性,但是如果外围受到威胁,则可以访问所有服务。

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

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

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