Розширення SDK
Джерело документації: IDocReader
namespace Ufo\RpcSdk\Maker\DocReader\Interfaces;
interface IDocReader
{
public function getApiDocumentation(): array; // декодований документ OpenRPC
}
Вбудовані: HttpReader(string $apiUrl, array $headers = []) — за URL, зокрема із заголовком токена для захищеної документації; FileReader(string $docFilePath) — з локального JSON. Власний читач (наприклад, документ з репозиторію чи об'єднання кількох) передається в ConfigsHolder.
Генератори: IMaker
namespace Ufo\RpcSdk\Maker\Interfaces;
interface IMaker
{
public function make(?callable $callbackOutput = null): void;
}
Maker(ConfigsHolder $configs, Generator $generator, IMaker[] $makers) запускає генератори по черзі; $callbackOutput отримує кожне згенероване визначення (IClassLikeDefinition) — так виводиться перелік класів у консоль. Вбудовані: SdkEnumMaker, SdkDtoMaker, SdkProcedureMaker, SdkConfigMaker.
Власні шаблони
Окремої опції для шаблонів немає. Успадкуйте потрібний генератор і перевизначте властивість $template:
final class MyProcedureMaker extends SdkProcedureMaker
{
protected string $template = __DIR__.'/templates/procedure.php';
}
Вбудовані шаблони лежать у templates/ пакета (procedure, sync_method, async_method, dto, enum, namespace, docs). Попри розширення .php.twig, це PHP-шаблони MakerBundle, не Twig.
Обробники відповіді: IResponseHandler
namespace Ufo\RpcSdk\Procedures\ResponseTransformer\Interfaces;
interface IResponseHandler // тег ufo.sdk_response_handler, const int PRIORITY = 0
{
public function canHandle(array $schema): bool;
public function handle(array $schema, mixed $result, callable $transform, SdkResponseCreator $creator): mixed;
}
Обробник отримує JSON Schema очікуваного результату (з @return методу). Перший, чий canHandle() повернув true, перетворює значення; $transform рекурсивно обробляє вкладені значення. Передаються аргументом $handlers конструктора процедури; непорожній список повністю замінює стандартні, тож додавайте й вбудовані (EnumResponseHandler, UnionResponseHandler, CollectionResponseHandler, DtoResponseHandler). SDK Bundle збирає всі сервіси з тегом і впорядковує за PRIORITY.
Спеціальні параметри: IRpcSpecialParamHandler
Синхронні класи приймають власну реалізацію Ufo\RpcObject\IRpcSpecialParamHandler (аргумент $rpcSpecialParams) — наприклад, щоб автоматично додавати rayId з контексту трасування. За замовчуванням — Ufo\RpcSdk\Procedures\RpcSpecialParamHandler. Асинхронні класи власного обробника не приймають.
Асинхронні транспорти
Див. Асинхронні виклики: AsyncTransportResolverInterface / AbstractAsyncTransportResolver з пакета ufo-tech/component-transport-contracts.
Атрибути
| Атрибут | Де | Призначення |
|---|---|---|
#[ApiMethod('User.get')] |
метод | Назва RPC-методу |
#[ApiUrl($url, $method = 'POST')] |
клас | Явна адреса сервера замість sdk_config.yaml (генератор його не створює — див. Актуальні помилки) |
#[AsyncTransport($dsn)] |
— | Допоміжний клас плейсхолдера секрету |