mnavarrocarter / service-consumer-bundle
Requires
- php: ^7.1.3
- guzzlehttp/guzzle: ^6.3
- psr/http-message: ^1.0
- psr/log: ^1.0
- symfony/framework-bundle: ^4.0
Requires (Dev)
- symfony/phpunit-bridge: ^4.0
- symfony/var-dumper: ^4.0
- symfony/yaml: ^4.0
This package is auto-updated.
Last update: 2019-08-18 18:31:46 UTC
README
一个用于高效管理 Soap 和 Http 请求的 Symfony Bundle。
安装
composer require mnavarrocarter/service-consumer-bundle
为何使用此包?
当与不同的应用程序和 Web 服务协同工作时,很容易通过混合责任和将多个调用分组到它们上来膨胀类。此包帮助您实现良好的关注点分离,以及一种有用的 Http 和 Soap 请求组织方式。每个调用都有自己的类的想法,该类将负责管理请求构建、错误处理和其他事情。
特性
- 在类中组织外部调用,保持它们与其他代码部分的分离。
- 自动将每个 Soap 和 Http 请求的请求/响应记录到您喜欢的
LoggerInterface
实现。
要求
HttpConsumer
需要一个可以与 PSR-7 消息实现一起工作的客户端。默认情况下,此包的替代方案是Guzzle 6+。这将是这种情况,直到 PSR-18 被批准(希望如此!)这将可能是此包的 2.0 版本,消除与 Guzzle 的耦合。
SoapConsumer
唯一的要求是在您的机器上安装/启用 php-soap
扩展。
Logger
还需要一个 PSR-3 日志记录器实现。随 Symfony 框架包一起捆绑的 Monolog 是默认的,但您可以通过在包配置中引用有效的服务名称来交换实现。
配置
默认情况下,两个服务消费者都是禁用的。您必须在配置中明确启用您希望使用的消费者,它们默认是禁用的。
mnc_service_consumer: http: enabled: true soap: enabled: true # You can pass an array of wsdl dirs to use function auto discovery. wsdl_dirs: - '%kernel.project_dir%/Tests/Builder/Fixtures' # You can swap the logger implementation here. logger: 'logger'
用法
创建方法
首先,您必须创建一个方法,以便消费者可以使用它。推荐的做法是创建一个名为 SoapMethod
或 HttpMethod
的文件夹,然后根据情况将不同的服务分组到它们的文件夹中。
然后,创建一个类,扩展 SoapMethodInterface
或 HttpMethodInterface
并实现所需的方法。您可以在接口中找到有关它们的文档。请确保您阅读了它!
一个好的做法是首先创建一个抽象类,这样您就可以为常用的一组调用配置默认值,例如 base_uri
或 wsdl
或 soap 类映射信息。
如果您使用Symfony的自动装配和自动配置功能,所有实现这些接口的类将被自动配置并注入到相应的消费者中。如果没有,请确保将它们注册为服务,并添加mnc_service_consumer.soap_method
或mnc_service_consumer.http_method
标签。
从消费者调用您的函数
确保已启用您的消费者,并使用其服务名称调用它:mnc_service_consumer.http
或mnc_service_consumer.soap
。
您还可以通过其完全限定类名(FQCN)或通过注入接口(接口绑定到实现,因此可以使用自动装配,或者如果您想的话,可以轻松创建自己的实现并替换它)来调用它们。在这种情况下,我们通过类型提示接口来注入服务。
从外部传递参数到您的函数
始终在方法类内部构建所需的参数是最佳实践,但有时允许从外部调用添加这些参数是有用的,也许是为了测试目的。
为此,执行方法接受一个可选的第二个参数,即一个数组,它将以不同方式根据方法类型(Soap或Http)注入不同的参数。
对于实现HttpMehtodInterface
的类,参数将被注入到getRequest()
方法中作为一个数组。因此,您可以检索它们
对于实现SoapMethodInterface
的类,它们将与来自getArguments()
方法的参数合并。如果键重复,则将被消费者调用中传入的参数覆盖。
您可以使用的其他方法
还有一些您可以从消费者调用的其他方法可能很有用。