ticaje / agnostic-connector
无差别PHP连接器
Requires
- php: ^7.0
- ticaje/design-by-contract: ^1.0
Requires (Dev)
- allure-framework/allure-phpunit: ~1.2.0
- friendsofphp/php-cs-fixer: ~2.14.0
- phpmd/phpmd: @stable
- phpunit/phpunit: ^7
- squizlabs/php_codesniffer: ~3.4.0
This package is auto-updated.
Last update: 2024-09-09 15:56:55 UTC
README
PHP无差别连接器
前言
这是一个持续进行的项目,简单来说,我将提供指导方针,以了解它的目的以及最常见的使用场景。
众所周知,在Web服务中公开的API定义了一系列策略,供其他系统交互时遵守,以实现通信,从而满足业务需求。
本主题中描述的模块构成某种中间件,减轻了设计者的工作负担,因为它允许在实现与外部API的交互时专注于高级用例。
安装
您可以使用composer(我唯一推荐的方式)安装此包
composer require ticaje/agnostic-connector
功能
此模块使用基础合同模块来符合该模块中所述的“设计由合同”方法的基础。
想法是建立一套标准程序来构建可扩展的外部API连接器,以规范重复的任务,如认证、请求和处理API响应,并为定义数据和服务合同留出空间,这实际上是领域模型的差异化因素。
此方法的目的在于提供一个框架,允许设计师以最小的努力反映特定领域可能涉及的业务策略。这样,架构师可以专注于创建纯业务实现,将基础设施工作留给这个中间件。
扩展组件
扩展的结构相当明确
- 工厂:负责创建较低级别组件依赖项的低级别模块,例如登录和认证提供者。
- 客户端:中间级别模块,封装外部API消费者,目前支持REST和SOAP。它提供基本操作。
- 登录提供者:负责提供登录覆盖的中间级别模块
- 认证提供者:提供认证的中间级别模块
上述所有模块都实现了相应的接口,因此通过依赖项容器,开发人员可以构建他们想要的解决方案,因为高级方法规定了一个隔离服务驱动的设计。
有趣的一面
重点是为每个特定的领域创建食谱
例如,默认情况下,REST连接器使用Guzzle库来抽象连接到REST API时的低级用例,如果您不想使用或无法使用Guzzle,或者您不确信Guzzle,则创建一个新的虚拟类型以供客户端工厂接口使用(如di.xml文件第4行所示),并定义对它的依赖,这样您的高级模块将使用这个新的虚拟类型。
另一方面,令牌提供者使用我们刚才定义的相同REST客户端来实现给定Token Service的令牌请求的特定逻辑。每当需要新的实现时,可以通过继承和接口实现的力量使用以实现特定的领域建模。
顺便说一句,尽管这个非常具体的实现虽然最小化,但它完全是功能性的;即便如此,在适当的情况下可以轻松覆盖,影响很小,因为已经应用了服务隔离模式。
文档和演示
有一个在本模块中实现的概念验证,在 Dummy Module中,请随时使用。
同样,基础合约模块的文档也已提供,您可以开始深入了解它。
贡献
请参阅CONTRIBUTING以获取详细信息。
致谢
许可证
GNU通用公共许可证(GPLv3)。请参阅许可证文件获取更多信息。