brahmic / apisutra
API Core SDK for declarative API clients
Requires
- php: ^8.4
- guzzlehttp/promises: ^2.0
- guzzlehttp/psr7: ^2.0
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- psr/http-message: ^1.0
- psr/log: ^3.0
- psr/simple-cache: ^3.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.0
- illuminate/container: ^12.0
- illuminate/http: ^12.0
- illuminate/translation: ^12.0
- illuminate/validation: ^12.0
- pestphp/pest: ^3.8
- phpstan/phpstan: ^2.1
- squizlabs/php_codesniffer: ^4.0
Suggests
- ext-redis: Optional atomic shared rate limits (phpredis >=6.2 with Redis >=7.0)
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-09-16 10:54:09 UTC
README
ApiSutra
Декларативный SDK для создания API-клиентов
ApiSutra — PHP-пакет для создания SDK внешних API. Вы описываете операции, DTO и правила протокола, а пакет выполняет запросы, преобразует ответы и управляет авторизацией, повторными попытками и пагинацией. Приложение получает клиент с понятными операциями, типизированными данными и общей обработкой ошибок.
Нужны PHP 8.4+ и Composer. Ядро работает без приложения Laravel; для Laravel предусмотрена отдельная интеграция.
Возможности
Как выглядит SDK
Импорты в обзорных фрагментах опущены:
Декларация запроса
GetRecordRequest задаёт операцию API:
// HTTP-метод и адрес операции. #[Get('/records/{id}')] // Повторы при временных ошибках API: до 3 попыток, включая первую. #[Retry(attempts: 3)] // Преобразовать содержимое поля data в типизированный DTO. #[Returns(GetRecordResponseDto::class, unwrap: 'data')] final class GetRecordRequest extends AbstractRequest { public function __construct( // Подставить id в {id} адреса запроса. #[Path] public int $id, ) { } }
Декларация ответа (DTO)
GetRecordResponseDto описывает данные, которые получит приложение:
// Типизированная модель записи, которую получит приложение. final readonly class GetRecordResponseDto extends AbstractResponseDto { public function __construct( #[From('record_id', fallback: ['id'])] // Если record_id отсутствует, взять id. public int $id, public string $title, // Преобразовать строку created_at из ответа API в объект даты. #[From('created_at')] #[DateTimeFrom(format: DATE_ATOM)] public DateTimeImmutable $createdAt, #[From('author.name')] // Прочитать имя из вложенного объекта author. public ?string $authorName = null, #[EmptyStringAsNull(blank: true)] // Пустую строку и пробелы превратить в null. public ?string $description = null, // Сохранить неизвестные поля ответа; в запросы клиента они не попадут. #[Extras] public array $_extra = [], ) { } }
_extra — необязательное объявленное свойство: #[Extras] сохраняет в нём непрочитанные поля. Если они не нужны, уберите свойство вместе с атрибутом.
Возможности DTO на одном примере — вложенные модели, коллекции, enum, casts, defaults, исходящий JSON и ошибки.
Создание и конфигурирование клиента
Задайте общую политику DTO к клиенту:
$hydration = new HydrationConfig(policy: new RulePolicy(scalars: ScalarPolicy::Strict)); $client = new DemoClient( new ClientConfig( baseUrl: 'https://api.example.test', timeout: 15, // Таймаут HTTP-запроса в секундах. hydration: $hydration, ), HttpTransport::createDefault(), ); /** @var GetRecordResponseDto $record */ $record = $client->records()->get(7)->send()->dataOrFail(); echo $record->createdAt->format('d.m.Y'); // 15.09.2026
$record — типизированный GetRecordResponseDto. dataOrFail() возвращает DTO или выбрасывает исключение; доступна и явная проверка результата.
Возможности конфигурирования клиента · Подключить свой API.
Установка и первый запуск
Пакет находится на стадии alpha. Установите его и запустите учебный SDK без ключей API и сетевых запросов:
composer require "brahmic/apisutra:^0.2@alpha"
php vendor/brahmic/apisutra/docs/example/sdk/run.php
Быстрый старт объясняет пример и переход к своему API.
Документация
- Создать SDK — от анализа API до проверенной операции и покрытия.
- Использовать готовый SDK — подключение к приложению и работа с результатами.
- Справочник — настройки, контракты, приоритеты и ограничения.
- Примеры — готовый код для локального запуска.
Все разделы и задачи · Передать задачу ИИ-агенту.
Разработка ApiSutra
Точка входа разработчика ApiSutra задаёт общий маршрут для человека и ИИ: окружение, архитектура, устройство пакета и проверка изменений. Подготовка вклада — в CONTRIBUTING.
