Вы читаете предварительную версию v0.1. API могут измениться.
~ 1 мин чтенияОбновлено: 2026-10-30

HTTP-клиент для внешних API

Для партнёрских API используйте внедряемый Elang Http Client. Первый пример работает без внешнего сервиса: ответ возвращает fake transport.

Рабочий пример

use Elang\Http\Client\{Client, FakeTransport, Response};

$fake = (new FakeTransport())->when(
    'https://partner.example.test/stock*',
    new Response(200, '{"data":{"quantity":12}}'),
);
$http = new Client($fake);
$quantity = $http->baseUrl('https://partner.example.test')
    ->timeout(10)->retry(3, 100)
    ->get('/stock', ['sku' => 'A-100'])
    ->throw()->json('data.quantity'); // 12
$fake->assertSentCount(1);

Настройка партнёра

Для реального API внедрите Client в контроллер вместо fake. Базовый URL храните в серверной конфигурации, секрет читайте через Config::secret. withToken и withHeaders создают отдельную конфигурацию запроса; общий клиент не переносит эти данные в другие запросы. Переход с заданного базового URL на другой origin запрещён.

Ограничения и ошибки

По умолчанию TLS проверяется, перенаправления и cookies отключены; таймаут запроса/чтения — 10 секунд, соединения — 5 секунд, предел ответа — 8 MiB. Настройте ограничения под нагрузку. Stream handler и cURL могут по-разному применять таймаут соединения. throw создаёт RequestException только со статусом для 4xx/5xx; JSON разбирайте явно через json.

Повторы и fakes

retry(3, 100) означает максимум три попытки с паузой 100 мс. Автоматически повторяются только GET, HEAD и OPTIONS при ошибке соединения или 429/502/503/504. Для записи нужны явный retryUnsafe: true и идемпотентность приложения. Retry-After больше десяти секунд возвращает ответ без преждевременного повтора. Неожиданный fake-запрос падает без выхода в сеть. Не стройте URL серверного запроса из непроверенного пользовательского ввода.

Проверьте вместе

Запустите полный пример каталога из приложения с установленной ORM. Он использует временную базу в памяти и fake API партнёра. В результате ожидается "checks":"passed". Пример объединяет связи, fetch join, ресурсы, коллекции и HTTP/kernel assertions.

php vendor/elang/framework/examples/orm-catalog/run.php

Следующий шаг · GitHub: complete runnable source

Частые ошибки

Симптом Исправление
Неожиданный fake-запрос Зарегистрируйте полный URL или осознанный wildcard с query parameters.
429 с большим Retry-After Запланируйте задачу позже; не сокращайте требуемую паузу.
Нужна помощь?

Проверьте руководство по решению проблем, найдите термин в глоссарий, или пройдите полноценный проект доски задач.

Поиск по документации Elang

Начните вводить, чтобы найти следующий шаг.