文章:重新考虑“代码优先”的 Web 服务

  • Dennis Sosnoski
  • 胡键

2007 年 9 月 26 日

话题:SOA架构

在本文中,Dennis Sosnoski 质疑了 Web 服务开发的至理名言——“契约优先(contract first)”,即“由 WSDL 开始(start-from-WSDL)”优于“由代码开始”。他展示了如何使用 JiBX 框架来实践“由代码开始(start-from-code)”的开发,且规避了其缺点,尤其是没有将实现和接口耦合得过于紧密。

如果你现在在使用 SOAP Web 服务的话,那么你有两种开发风格可选择。第一种被称为“由 WSDL 开始(start-from-WSDL)”,或是“契约优先(contract first)”,牵涉构建一个 WSDL 服务描述,并直接关联用于数据交换的 XML 模式。第二种被称为“由代码开始(start-from-code)”,或是“代码优先(code first)”,牵涉将例子服务代码插入你选择的框架,并由那个代码产生 WSDL+ 模式(schema)。

“由代码开始”开发 Web 服务的想法被许多 Web 服务和 SOA 领域的权威人士反对。他们觉得“由代码开始”将 XML 消息结构绑定到了一个特定的实现,这废弃了使用 WSDL 和模式的整个目的。对于“由代码开始”的最初形式——SOAP 编码模式(SOAP encoding scheme)——的确是这样,它被广泛使用以支持 rpc/encoded。使用 SOAP 编码,XML 模式直接由服务提供者应用数据结构产生,客户端代码使用这些产生的数据结构副本进行工作。这种数据模型和 XML 之间自动转换的特性使得 rpc/encoded 在早期的 SOAP 中流行——但是它也是这种风格后来被废止的一个重要原因。

但选择使用契约优先的方式就一定是正确的吗?作者提出了自己的不同见解,因为选择契约优先要求一个高层的投资,包括对 WSDL 和模式的学习,以及支持这些格式的工具等。而“由代码开始”虽然自身有很多毛病,但因为现代数据绑定框架允许你从实际的 XML 表示中隔离数据模型,从实用的角度看,开发者使用代码工作要较使用 WSDL 和模式工作更具生产力。

阅读全文:重新考虑“代码优先”的 Web 服务

SOA架构