【问题标题】:Webservice without public WSDL is an anti pattern?没有公共 WSDL 的 Web 服务是一种反模式?
【发布时间】:2017-11-30 08:36:06
【问题描述】:

我最近和一个朋友发生了无休止的争吵。 我们公司在没有 WSDL 的情况下公开 Web 服务端点。 WSDL 隐藏在系统内部。

有同事说“这对安全性更好”。我说什么? 另一个论点是“您不需要公开 WSDL,因为它只在开发时使用”。

所以基本上他们说当有人使用我们的 Web 服务时,总会有一段时间通过电子邮件传递 WSDL,以便让他们构建客户端。进入 prod 后,不再使用 WSDL。

所以,请告诉我我是对的。告诉我,当您向外界公开服务时,您必须公开与端点的合同。这是规则。在这里谈论发展是无关紧要的,对吧?

朋友说我有偏见,因为我写了一个动态网关,所以运行时需要WSDL,这种场景非常少见。

真正让我生气的是 WSDL 被认为是 .DLL 或 .SO 的 .lib 和 .h,它“只是开发时需要的东西” .

我不知道 CORBA 和 IDL 是什么... IDL 在运行时会向公众公开吗?

那么,这里的正确做法是什么?我迷路了。客户端打算在运行时接收 WSDL 对吗?或不 ?它应该在运行时执行某种验证吧?

【问题讨论】:

    标签: web-services soap wsdl corba


    【解决方案1】:

    你错了。制作一个好的接口可能需要付出很多努力,多年的经验,而 WSDL 是对服务的非常详细的描述。如果这是一个秘密,那就这样吧。由于可能包含身份验证,因此还存在潜在的安全问题。

    我想说的是,如果您可以获取原始文件,则永远不要从服务中下载 WSDL。在线 WSDL 有时是由 SOAP 框架生成的,并且通常不会包含事物文档。此外,端点地址应始终显式设置,切勿使用可能包含在 WSDL 中的值。

    事实上,传达服务定义的正确方式不仅是一组定义良好的 WSDL / XSD,而且还包括包含错误响应的具体请求/响应示例。

    依赖下载 WSDL 来引导您的服务是灾难的收据(如果这会阻止您的应用启动)。

    【讨论】:

    • 好的,但是“灾难收据”?真的吗 ?我更愿意在检查 WSDL 时知道服务不存在,而不是在死端点上调用方法时崩溃。这个案子,确切地说,是一场灾难。
    • 您想要的是健康检查。返回 503 并不是一场灾难。 URL 没有响应是一场灾难。
    • 我认为使用 web 服务方法进行健康检查不是一个好主意,因为方法可以做一些事情。 WSDL 的全部目的是呈现服务契约并知道它是健康的并且正在运行。如果 WSDL 中的端点是错误的,那是绝对不正常的。
    • 如果你想避免调用一个死端点,你需要一个重复运行的持续健康检查。对启动进行简单检查是不够的。
    • 如果我没听错的话,暴露 WSDL 没有任何价值,所以基本上它就像 CORBA 或 COM 中的 IDL。 WSDL 的价值是“语言中立”(我可以用它生成 C# 客户端或 Java 客户端。)。就是这样。
    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多