abrouter/abrouter-php-client

AbrPHPClient :construction_worker_woman: 是一个用于通过ABRouter运行AB测试的PHP库。

0.24.0 2024-08-01 00:33 UTC

README

AbrPHPClient 👷‍♀️ 是一个用于通过ABRouter运行AB测试的PHP库。请查看ABRouter主仓库:https://github.com/abrouter/abrouter

欢迎访问文档

什么是ABRouter服务?

ABRouter 是一个用于管理实验(AB测试)的服务。该服务提供了一个易于管理的仪表板来控制实验。在那里,您可以创建实验、分支,并为每个分支设置百分比。然后,当您在PHP上运行AB测试时,您将收到一个完美的分支响应,该响应遵循您设置的规则。

也可以用作功能标志或功能开关,且为开源。免费提供。

📦 安装

通过composer

$ composer require abrouter/abrouter-php-client

🚀 使用

客户端使用 PHP-DI 进行依赖注入。如果您使用自己的DI,则必须将其配置如下示例。如果您没有使用任何DI,请将 php-di 从开发依赖项移至依赖项

$ composer require "php-di/php-di": "^6.0"

与PHP-DI一起使用

use Abrouter\Client\Config\Config;
use DI\ContainerBuilder;
use Abrouter\Client\Client;

require '/app/vendor/autoload.php';

$containerBuilder = new ContainerBuilder();
$di = $containerBuilder->build();

$token = '04890788ba2c89c4ff21668c60838a00a87b1cf42c9c6b45d6aa8e11174f0d5762b16b6c09b6b822'; //you can find your token in ABRouter dashboard

$di->set(Config::class, new Config($token, 'https://abrouter.com'));
/**
 * @var Client $client
 */
$client = $di->make(Abrouter\Client\Client::class);
$userSignature = $_SERSSION['userId'] ?? uniqid();
$experimentId = 'button_color';//experiment id is also there


$runExperimentResult = $client->experiments()->run($userSignature, $experimentId);
$experimentId = $runExperimentResult->getExperimentId(); //form-color
$branchId = $runExperimentResult->getBranchId(); //red
echo '<button style="color: '. $branchId .'">Hello</button>';

您可以在 ABRouter 上创建实验并获取您的令牌和实验ID,或直接阅读 文档

发送统计数据

use Abrouter\Client\Config\Config;
use DI\ContainerBuilder;
use Abrouter\Client\Client;
use Abrouter\Client\Builders\StatEventBuilder;

require '/app/vendor/autoload.php';

$userSignature = $_SERSSION['userId'] ?? uniqid();

$containerBuilder = new ContainerBuilder();
$di = $containerBuilder->build();

/**
 * @var Client $client
 */
$client = $di->make(Abrouter\Client\Client::class); // using PHP-DI

$eventBuilder = $this->getContainer()->make(StatEventBuilder::class);

//sending button_click event as button_click+1
$client->statistics()->sendEvent(
    $eventBuilder
        ->incremental()
        ->event('button_click')
        ->setUserId($userSignature)
        ->build()
);

// sending purchase event with purchase amount
$client->statistics()->sendEvent(
    $eventBuilder
        ->summarize()
        ->event('purchase')
        ->setValue(30)
        ->setUserId($userSignature)
        ->build()
);

有关发送事件的详细信息,请参阅 StatEventBuilder 类。

并行运行

并行运行是一种模式,允许您异步运行实验。使其工作的主要事情是配置 KvStorage 和 TaskManager。KvStorage 和 TaskManager 使用 Redis 存储数据和任务。

ABRouter php客户端内置了KvStorage和TaskManager,但您可以通过DI和契约自行实现并替换它。我们强烈建议您使用内置解决方案。该实现经过了完全测试并且表现良好。使用并行运行可以极大地提高速度。

并行运行的配置与默认配置略有不同。

配置

use Abrouter\Client\Config\Config;
use DI\ContainerBuilder;
use Abrouter\Client\Client;
use Abrouter\Client\Config\RedisConfig;
use Abrouter\Client\Contracts\KvStorageContract;
use Abrouter\Client\DB\RedisConnection;
use Abrouter\Client\Services\KvStorage\KvStorage;
use Abrouter\Client\Services\TaskManager\TaskManager;
        
require '/app/vendor/autoload.php';
        
$containerBuilder = new ContainerBuilder();
$di = $containerBuilder->build();


$redisConfig = new RedisConfig(
    $_SERVER['REDIS_HOST'] ?? 'redis',
    6379,
    '',
    '',
    ''
);

$host = 'https://abrouter.com';
$token = uniqid();

$config = new Config(
    $token,
    $host,
);
$config->setRedisConfig($redisConfig);
$container->set(Config::class, $config);

$kvStorage = $container->make(KvStorage::class);
$container->make(KvStorage::class);
$container->set(
    KvStorageContract::class,
    $kvStorage
);

$config->setKvStorageConfig($kvStorage);
$container->set(Config::class, $config);
$taskManager = $container->make(TaskManager::class);

$config->setParallelRunConfig(new ParallelRunConfig(true, $taskManager));

工作进程

工作进程是一个运行处理您任务的进程的监督器配置。请确保您的机器上已安装监督器。监督器配置的示例位于 worker/worker.conf。请在运行监督器配置之前配置 worker.php。您必须将客户端的相同配置放在那里,正如在您的主应用程序中一样。将监督器配置复制到 etc/init.d/supervisord.conf 中指定的特定文件夹。并且,请记住调整 worker.php 的路径以与您的应用程序基本目录对齐。

✅ 测试

需要安装 docker-compose 和 docker。

$ make up
$ make test-run

🔧 贡献

请随时分叉并发送Pull Requests。此项目遵循 语义版本化2PSR-2

📄 许可证

GPL3。请参阅 许可证文件 获取更多信息。