Сначала определите контракт интеграции

Запишите endpoint, method, обязательные поля, auth, допустимые HTTP-коды, timeout, rate limit и правило повторов. Это важнее выбора HTTP-библиотеки.

HTTP-код → действие клиента

КодЧто делать
200–299обработать результат
400/422исправить payload, не повторять автоматически
401/403проверить token/permissions
404проверить endpoint/id объекта
409конфликт/duplicate — зависит от API
429учесть Retry-After/rate limit
500–504ограниченный retry с backoff

Минимальный JSON API client на PHP cURL

PHP
$ch = curl_init('https://api.example.com/v1/items');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Accept: application/json',
        'Authorization: Bearer ' . getenv('API_TOKEN'),
    ],
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 15,
]);

$body = curl_exec($ch);
$status = (int) curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$error = curl_error($ch);
curl_close($ch);

if ($body === false) {
    throw new RuntimeException($error);
}

$data = json_decode($body, true);

Таймаут — не значит, что операция не выполнилась

Особенно опасны POST-запросы: сервер мог создать объект, а клиент не получил ответ. Поэтому для платежей, CRM и заказов используйте idempotency/external_id или запрос статуса перед повтором.

Где хранить токены

Не помещайте секретный API token в JavaScript, HTML или публичный repository. Серверные секреты должны жить в env/config вне public web root или в secret storage.

Пример простого backoff

PHP
$delays = [1, 2, 4, 8];

foreach ($delays as $delay) {
    $result = callApi();

    if ($result['status'] < 500 && $result['status'] !== 429) {
        break;
    }

    sleep($delay);
}

Скачать примеры для веб-разработки

RuJul Web Development Examples — один ZIP

Связанные материалы

Надёжная интеграция REST API

До интеграции зафиксируйте методы API, способы авторизации, лимиты запросов, версии схемы данных и коды ошибок. Устанавливайте таймауты и разделяйте повторяемые операции от тех, которые могут создавать дубли. При ответе 429 учитывайте ограничения провайдера, а при ошибках 4xx сначала проверяйте запрос — повтор без изменений часто бессмысленен.

В журнале храните время, корреляционный идентификатор, статус и обезличенный ответ, но не пароли и bearer-токены. Для приёмки нужны тесты на потерю соединения и устаревший токен.