通过 YAML 模板创建 SOAP 请求
v0.0.1
2020-01-15 19:22 UTC
Requires
- symfony/yaml: ^3.4.36
This package is auto-updated.
Last update: 2024-09-16 05:42:14 UTC
README
通过 YAML 模板创建 SOAP 请求。
动机
作为 PHP 开发者,有时我们需要消费 SOAP API。已经存在一些强大的库,它们使我们更容易实现这些解决方案,而本项目的目标并不是重新发明轮子。
但有时,比我们意识到的更多,WSDL 定义不当,存在错误,或者依赖于已经不存在的描述符。在这种情况下,我们会深入研究库的文档,试图解决我们这边的问题,因为通知 WebService 的开发团队去修正 WSDL 甚至会更慢。交付期限就是如此,最后我们决定使用多才多艺且功能强大的 curl 库。我相信每个开发者都在默默中崇拜它。
这种方法的缺点是,你必须以某种方式生成 SOAP 请求的 body 的 XML。最终,我们都会选择最快速和简单的方法,那就是进行简单的字符串拼接。虽然这样做不够优雅,而且随着 SOAP 调用体的大小增加,项目的技术债务也会增加。
我们可以使用几种方法来解决这个问题
- 使用 XML 模板,解析它,用值填充,然后重新生成 XML。我不太喜欢这种方法,因为它不够优雅,所以我放弃了。
- 使用模板引擎,就像之前使用 XML 模板一样,我们将模板传递给引擎,并使用相应的值进行填充,从而得到请求。例如,在 Symfony 中,我们会使用 Twig。我认为这种方法是最通用的,因为它允许我们利用引擎的全部功能,包括控制流、库和插件。我理解效率至上主义者,包括我本人,可能会反对,因为无疑这是低效的,而且我也同意开发高效代码可以避免瓶颈。但是,就像所有事情一样,我们需要有全局的视角,一个项目中的不可行解决方案在另一个项目中可能是优雅的解决方案。
- 使用 Yaml 作为模板。这是本项目采用的方法。Yaml 的一个重要特性是它比其他格式,如 XML 和 JSON,更易读,也更容易编写。这个方法的灵感是什么?很简单,我们可以用一些简单的规则将 XML 表达为关联数组,然后将其存储为 Yaml 文档,因此我们可以执行相反的操作。