2026-04-30 19:32:10 +03:00
---
2026-05-08 19:34:39 +03:00
title: Настройка REST-клиента
description: Подготовка REST-клиента сервиса к использованию.
2026-05-08 08:21:34 +03:00
keywords: [rest, клиент, infra, методы, openapi, get-хуки, swr]
2026-04-30 19:32:10 +03:00
---
2026-05-08 19:34:39 +03:00
# Настройка REST-клиента
Подготовка REST-клиента сервиса к использованию.
## Что настраиваем
2026-04-30 19:32:10 +03:00
2026-05-08 08:21:34 +03:00
REST-клиент — это infra-модуль, через который проект работает с внешним REST API.
2026-04-30 19:32:10 +03:00
2026-05-08 19:34:39 +03:00
Н а этапе настройки нужно подготовить клиент сервиса: оболочку клиента, методы API и GET-хуки для клиентских компонентов.
2026-04-30 19:32:10 +03:00
## Из чего состоит клиент
REST-клиент состоит из трёх основных частей:
1. **Клиент** — самописная оболочка над транспортом.
2. **Методы** — сгенерированные из OpenAPI или написанные вручную вызовы API.
3. **GET-хуки** — SWR-обёртки для GET-запросов.
Эти части живут в одном REST-модуле, потому что относятся к одному внешнему сервису.
## Клиент
Клиент — ручной слой, который настраивает работу с API: `baseUrl` , заголовки, авторизацию, обработку ошибок и создание инстанса сервиса.
Даже если методы генерируются из OpenAPI, `client.ts` остаётся ручным файлом проекта.
`client.ts` — только сборочная точка клиента. В нём не размещаются DTO, `declare module` , `Extended` -типы, GET-хуки и бизнес-логика.
2026-05-08 19:34:39 +03:00
`baseUrl` API задаётся обязательной env-переменной без fallback-значения в коде. Н е используйте записи вроде `process.env.NEXT_PUBLIC_PET_STORE_API_BASE_URL ?? 'http://localhost:8080/api/v3'` или `?? ''` : локальный URL должен лежать в `.env.local` , а отсутствие переменной должно приводить к явной ошибке конфигурации.
2026-04-30 19:32:10 +03:00
## Методы
Методы описывают конкретные запросы к API.
Они появляются одним из двух способов:
- генерируются из OpenAPI в `generated/` ;
- создаются вручную в `methods/` .
Подробности:
- [Автогенерация из OpenAPI ](./auto.md )
- [Ручное создание ](./manual.md )
## GET-хуки
Для GET-запросов добавляются GET-хуки REST-клиента.
Это прозрачные SWR-обёртки над GET-методами клиента. Они живут в `hooks/` этого же REST-модуля и нужны для использования данных в Client Components.
GET-хуки именуются с префиксом `useGet` : `useGetPetList` , `useGetPetDetail` , `useGetCurrentUser` .
2026-05-08 19:34:39 +03:00
Каждый GET-хук имеет экспортируемую key-функцию. SWR-ключ всегда имеет формат `[serviceName, endpoint]` : например `['pet-store-api', '/pet/10']` .
Хук принимает generated-параметры метода и SWR-настройки: `params?: GetPetByIdParams | null` , `config?: SWRConfiguration<Pet>` .
2026-04-30 19:32:10 +03:00
Подробности:
- [GET-хуки REST-клиента ](./hooks.md )
## Структура модуля
```text
2026-05-08 08:21:34 +03:00
src/infra/{service-name}/
2026-04-30 19:32:10 +03:00
├── client.ts # самописная оболочка и инстанс клиента
├── generated/ или methods/ # методы API
├── hooks/ # GET-хуки REST-клиента
2026-05-08 19:34:39 +03:00
├── types/ # DTO, именованные response-типы и расширения типов
2026-04-30 19:32:10 +03:00
├── errors/ # ошибки API, если нужны
└── index.ts # публичный API
```
`index.ts` — единственная точка входа в REST-модуль для внешнего кода.
2026-05-08 19:34:39 +03:00
Если generated-метод возвращает безымянный тип вроде `Record<string, number>` , а этот тип нужен снаружи, вынесите е г о в `types/` . Н е объявляйте DTO внутри `hooks/use-get-*.hook.ts` .
2026-04-30 19:32:10 +03:00
## Что делаем дальше
1. Создайте методы клиента: [Автогенерация из OpenAPI ](./auto.md ) или [Ручное создание ](./manual.md ).
2. Добавьте GET-хуки для GET-запросов: [GET-хуки REST-клиента ](./hooks.md ).
2026-05-08 19:34:39 +03:00
3. Проверьте прямые вызовы клиента: [Использование REST-клиента ](../usage.md ).
4. После настройки клиента переходите к [Получению данных ](../../data-fetch/index.md ).