abrouter / abrouter-php-client
AbrPHPClient :construction_worker_woman: 是一个用于通过ABRouter运行AB测试的PHP库。
Requires
- php: ^7.4 || ^8.0
- ext-json: *
- abrouter/related-users: 0.0.5
- art4/json-api-client: ^1.0
- guzzlehttp/guzzle: ^6.5 || ^7.0
- predis/predis: ^1.0 || ^2.0
Requires (Dev)
- php-di/php-di: ^6.0
- phpunit/phpunit: ^9
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。此项目遵循 语义版本化2 和 PSR-2。
📄 许可证
GPL3。请参阅 许可证文件 获取更多信息。