75 lines
4.0 KiB
Markdown
75 lines
4.0 KiB
Markdown
|
|
---
|
|||
|
|
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/`.
|