ensi/initial-event-propagation

0.3.0 2024-06-26 12:58 UTC

This package is auto-updated.

Last update: 2024-08-27 08:51:30 UTC


README

Latest Version on Packagist Tests Total Downloads

本软件包帮助将初始事件数据传播到其他后端服务 Laravel Bridge

安装

您可以通过composer安装此软件包

composer require ensi/initial-event-propagation

版本兼容性

基本用法

首先,您需要创建初始事件数据并将其放置在持有者中

use Ensi\InitialEventPropagation\InitialEventHolder;
use Ensi\InitialEventPropagation\InitialEventDTO;

InitialEventHolder::getInstance()
    ->setInitialEvent(
        InitialEventDTO::fromScratch(
            userId: "1",
            userType: "admin",
            app: "mobile-api-gateway",
            entrypoint: "/api/v1/users/{id}"
        )
    );

如果您不在初始入口点上下文中,则需要从请求头X-Initial-Event获取初始事件,而不是从头创建它

use Ensi\InitialEventPropagation\Config;
use Ensi\InitialEventPropagation\InitialEventHolder;
use Ensi\InitialEventPropagation\InitialEventDTO;

InitialEventHolder::getInstance()
    ->setInitialEvent(
        InitialEventDTO::fromSerializedString($request->header(Config::REQUEST_HEADER))
    );

接下来,从持有者中提取DTO(InitialEventHolder::getInstance()->getInitialEvent())并将其传递给任何后续出站请求(Guzzle、RabbitMQ、Kafka等)。例如

use Ensi\InitialEventPropagation\Config;
use Ensi\InitialEventPropagation\InitialEventHolder;

function some_middleware(callable $handler)
{
    return function (RequestInterface $request, $options) use ($handler) {
        $inititiator = InitialEventHolder::getInstance()->getInitialEvent();

        return $handler(
            $inititiator ? $request->withHeader(Config::REQUEST_HEADER, $inititiator->serialize()) : $request,
            $options
        );
    };
}

贡献

请参阅CONTRIBUTING以获取详细信息。

测试

  1. composer install
  2. composer test

安全漏洞

请审查我们的安全策略,了解如何报告安全漏洞。

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。