--- title: REST description: Как правильно работать с REST API в проекте. keywords: [rest, api, данные, infrastructure, клиент, swr, стратегии] --- # REST Раздел описывает, как правильно работать с REST API в проекте: создать клиент сервиса и выбрать способ получения данных в приложении. REST в проекте проходит через два главных этапа: 1. Создание клиента. 2. Использование. ## 1. Создание клиента На этом этапе внешний API оформляется как модуль слоя `infrastructure/`. Клиент отвечает за: - генерацию или ручное описание методов API; - настройку `baseUrl`; - заголовки и авторизацию; - обработку ошибок; - кастомизацию и расширение типов; - GET-хуки для клиентских компонентов; - публичный API модуля. Если у API есть OpenAPI-спецификация — клиент генерируется автоматически. Если OpenAPI нет или он неполный — клиент создаётся вручную. GET-хуки относятся к клиенту, потому что это прозрачные SWR-обёртки над GET-методами этого клиента. Подробнее: - [Создание клиента](./clients/index.md) - [Автогенерация из OpenAPI](./clients/auto.md) - [Ручное создание](./clients/manual.md) - [GET-хуки REST-клиента](./clients/hooks.md) ## 2. Использование После создания клиента нужно определить рендер страницы и выбрать, как получать данные в конкретном месте приложения. Раздел использования отвечает на вопросы: - как понять, можно ли сохранить static/ISR; - когда страница становится dynamic/SSR; - когда получать данные через серверный `await`; - когда запускать несколько серверных запросов параллельно; - когда передавать промис ниже по дереву; - когда передавать начальные данные клиентским GET-хукам; - когда использовать GET-хук в клиентском компоненте; - когда выносить композицию и бизнес-смысл в `business/`. Подробнее: - [Стратегии получения данных](./strategies/index.md) - [Серверный await](./strategies/server-await.md) - [Параллельные серверные запросы](./strategies/parallel-server-requests.md) - [Передача промиса ниже](./strategies/pass-promise-down.md) - [Начальные данные для клиентских хуков](./strategies/client-hooks-initial-data.md) - [Клиентский GET-хук](./strategies/client-get-hook.md) - [Business-композиция](./strategies/business-composition.md) ## Как читать раздел Если API ещё не подключён — начните с [Создания клиента](./clients/index.md). Если клиент уже есть, но непонятно как получить данные — начните со [Стратегий получения данных](./strategies/index.md). Если данные нужны в Client Component — сначала проверьте, есть ли [GET-хук REST-клиента](./clients/hooks.md). Если в коде появляется бизнес-смысл вроде `isAuth`, `canEdit`, `hasAccess` — это уже не REST-клиент, а `business/`.