athlan / press-server-api-client
Press Server API 客户端
0.2.1
2016-12-30 21:15 UTC
Requires
- guzzlehttp/guzzle: ~6.0
Requires (Dev)
- phpunit/phpunit: 5.5.*
This package is auto-updated.
Last update: 2024-08-29 04:31:15 UTC
README
此库允许您从Press Server接收回调请求。
推荐
-
请记住事件顺序的重要性。尝试检索操作,将其顺序反转并按正确的顺序存储/处理,因为存在依赖性。例如,公告添加事件依赖于类别创建事件。
-
本地存储事件以供进一步处理。
尝试从Press Server检索事件数据并将其本地存储以供进一步处理,以避免Press Server等待您的处理。只需将事件内容存储到您的本地事件存储(文件、数据库)中,并在单独的线程或计划任务(例如cron)中处理它们。
简单文件存储的示例包含在
/example
目录中。
示例用法
示例用法位于/example
目录中。
use GuzzleHttp\Psr7\ServerRequest; use PressServerApi\Callback\OperationInterface; use PressServerApi\Callback\Operation\Factory\Psr7Request\OperationsFromRequestFactory; use PressServerApi\Callback\Operation\Factory\OperationFactoryInterface; use PressServerApi\Callback\Operation\Factory\AnnouncementOperationFactory; use PressServerApi\Callback\Operation\Factory\AnnouncementDeleteOperationFactory; use PressServerApi\Callback\Operation\Factory\AnnouncementPhotoOperationFactory; use PressServerApi\Callback\Operation\Factory\AnnouncementPhotoDeleteOperationFactory; use PressServerApi\Callback\Operation\Factory\CategoryOperationFactory; use PressServerApi\Callback\Operation\Factory\CategoryDeleteOperationFactory; use PressServerApi\Callback\Operation\Factory\UnknownOperationFactory; use PressServerApi\Callback\OperationGroupProcessingResult; use PressServerApi\Callback\OperationProcessingResult; use PressServerApi\Callback\Response\ProcessingResultResponseFactory; use PressServerApi\Callback\Response\Psr7Response\ProcessingResultResponseFactory as ProcessingResultPsr7ResponseFactory; use Example\EventStore\Event; use Example\EventStore\EventStoreInterface; use Example\EventStore\SimpleFilesystemEventStore; use Example\EventStore\Exception\EventAlreadyInStoreException; use function QuimCalpe\ResponseSender\send AS send_response; include 'vendor/autoload.php'; // Step 1. Configure Context (components). $responseFactory = new ProcessingResultResponseFactory(); $responseFactoryPsr7 = new ProcessingResultPsr7ResponseFactory($responseFactory); /* @var $factories OperationFactoryInterface[] */ $factories = [ new AnnouncementOperationFactory(), new AnnouncementDeleteOperationFactory(), new AnnouncementPhotoOperationFactory(), new AnnouncementPhotoDeleteOperationFactory(), new CategoryOperationFactory(), new CategoryDeleteOperationFactory(), new UnknownOperationFactory(), ]; $operationsFromRequestFactory = new OperationsFromRequestFactory($factories); // Step 2. Receive HTTP Request and get operations. $request = ServerRequest::fromGlobals(); // validate if($request->getMethod() != "POST") { return send_response(new \GuzzleHttp\Psr7\Response(401)); } /* @var $eventStore EventStoreInterface */ $eventStore = new SimpleFilesystemEventStore('./eventstore'); /* @var $operations OperationInterface[] */ $operations = $operationsFromRequestFactory->createOperations($request); $operations = array_reverse($operations); $results = new OperationGroupProcessingResult(); foreach($operations as $operation) { // TODO process operation here... // here there is storing events for further processing, which is recommended way // to fast and reliable retrieve events from 3rd party callback try { $eventStore->store(new Event($operation->getOperationKey(), $operation)); } catch(EventAlreadyInStoreException $e) { } // after processing, create the OperarionProcessingResult (success or failure) $result = OperationProcessingResult::createResultSuccess($operation); $results->addResult($result); } // Step 3. Prepare response. $response = $responseFactoryPsr7->createProcessingResultResponse($results); // Step 4. Send response. return send_response($response);