mnavarrocarter/service-consumer-bundle

此包已被废弃,不再维护。未建议替代包。

1.1.0 2018-04-23 18:26 UTC

This package is auto-updated.

Last update: 2019-08-18 18:31:46 UTC


README

一个用于高效管理 Soap 和 Http 请求的 Symfony Bundle。

TravisCI Code Climate TestCoverage Total Downloads Monthly Downloads License

安装

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'

用法

创建方法

首先,您必须创建一个方法,以便消费者可以使用它。推荐的做法是创建一个名为 SoapMethodHttpMethod 的文件夹,然后根据情况将不同的服务分组到它们的文件夹中。

然后,创建一个类,扩展 SoapMethodInterfaceHttpMethodInterface 并实现所需的方法。您可以在接口中找到有关它们的文档。请确保您阅读了它!

一个好的做法是首先创建一个抽象类,这样您就可以为常用的一组调用配置默认值,例如 base_uriwsdl 或 soap 类映射信息。

如果您使用Symfony的自动装配和自动配置功能,所有实现这些接口的类将被自动配置并注入到相应的消费者中。如果没有,请确保将它们注册为服务,并添加mnc_service_consumer.soap_methodmnc_service_consumer.http_method标签。

从消费者调用您的函数

确保已启用您的消费者,并使用其服务名称调用它:mnc_service_consumer.httpmnc_service_consumer.soap

您还可以通过其完全限定类名(FQCN)或通过注入接口(接口绑定到实现,因此可以使用自动装配,或者如果您想的话,可以轻松创建自己的实现并替换它)来调用它们。在这种情况下,我们通过类型提示接口来注入服务。

Executing a Consumer

从外部传递参数到您的函数

始终在方法类内部构建所需的参数是最佳实践,但有时允许从外部调用添加这些参数是有用的,也许是为了测试目的。

为此,执行方法接受一个可选的第二个参数,即一个数组,它将以不同方式根据方法类型(Soap或Http)注入不同的参数。

Passing Arguments

对于实现HttpMehtodInterface的类,参数将被注入到getRequest()方法中作为一个数组。因此,您可以检索它们

Args Http

对于实现SoapMethodInterface的类,它们将与来自getArguments()方法的参数合并。如果键重复,则将被消费者调用中传入的参数覆盖。

您可以使用的其他方法

还有一些您可以从消费者调用的其他方法可能很有用。

Other Methods