【发布时间】:2011-01-19 20:10:43
【问题描述】:
我打算创建一个相当简单的 Web 服务供 Intranet 使用。该服务最终将成为数据库的接口,使我能够跟踪公司内部的各种内部工具正在做什么。我想我想要一个 Web 服务,以便组织内的各种工具(以及不同的语言)可以轻松更新数据库,而无需知道架构。
我已经阅读了许多通过搜索 https://stackoverflow.com/search?q=soap+rest 提出的相关 REST 与 SOAP 问题,但我不确定我是否找到了答案。
我的困境似乎是我想要 REST 的简单性,同时还拥有 WSDL 的代码生成能力,这似乎暗示了 SOAP。对我来说最重要的是,各种内部工具(JAVA、Perl、Python、PHP、C++)能够与这个服务对话,而当手动重写/维护这些语言的接口层似乎很愚蠢。 WSDL 路线会为我做到这一点。据我所知,如果 WS 需要更改,您将更新 WSDL,重新生成客户端存根,并对使用存根的代码进行任何必要的更改(无论如何都需要这样做)。
例如 - 假设我有一个用 JAVA 编写的工具,它利用 RESTful Web 服务。我想该工具将具有用于处理某些 URL、启动请求、对响应执行某些操作、将其转换为某种数据结构(如果我愿意)等的特定代码。现在假设我也有一个 Perl 工具在做一样。现在我需要 Perl 代码来做同样的事情,在特定 URL 上发出请求以获取响应,对它们做一些事情等等。在每种情况下,因此在 C++ 和 Python 和 C# 中,代码无法共享,最终我'最终会得到一个包装类/方法,它对我隐藏了很多丑陋的东西。我宁愿在一个类上调用一个函数,该函数返回我封装在一个对象中的数据,而不必担心 URL、参数、响应等。当然,也许它在任何特定的地方都没有很多代码,但是随着时间的推移,它开始增加。将其乘以每个工具,现在当我对服务进行更改时,我必须更新每个 CRUD 操作中的 URL 以及随之而来的所有内容。我想我想,使用 WSDL 是为您完成的方面。您的代码只是与存根交互。存根做什么,谁在乎?网址、参数、响应 - 如果有任何变化,只需从 WSDL 重新生成存根。如果该过程导致您的代码中断,那就这样吧,但至少我不必更新所有处理发出请求和处理响应的细节的代码。这真的不是问题吗?也许我需要做的只是创建一个服务和几个客户端,然后看看我真正面对的是什么。
虽然我是一位经验丰富的程序员,在 JAVA、Perl、Python、C++ 等方面有经验,但这是我第一次考虑编写 WS 并且之前没有使用其他 WS 的经验,所以我'我正在寻找一些指导。我是否只是使用 WSDL/SOAP 而忘记了每个人都在说 REST 是多么流行、简单和有用?
【问题讨论】:
-
顺便说一句,使用 REST,您不必担心服务的发展,因为 REST 引起的解耦量确保客户端不会中断。因此,您无需担心客户端更新。您只需通过添加必要的功能逐步将它们带到新版本。一月
-
@JamesG 同意这种思维方式。 stackoverflow.com/a/32744753/794606
标签: java python perl rest soap