61 lines
5.6 KiB
Markdown
61 lines
5.6 KiB
Markdown
|
|
---
|
|||
|
|
title: Источники данных
|
|||
|
|
description: Какие источники данных используются в проекте и как с ними работать.
|
|||
|
|
keywords: [данные, api, rest, realtime, клиент, swr, infrastructure, введение, карта раздела]
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Источники данных
|
|||
|
|
|
|||
|
|
Какие источники данных используются в проекте и как с ними работать.
|
|||
|
|
|
|||
|
|
## Принципы раздела
|
|||
|
|
|
|||
|
|
- **Клиент — в `infrastructure/`.** Каждый внешний сервис — отдельный модуль слоя `infrastructure/{service-name}/`.
|
|||
|
|
- **Прямой `fetch` запрещён.** Запросы идут только через клиент модуля. Исключения — точечные и обоснованные.
|
|||
|
|
- **Источник данных диктует канал.** REST, realtime и т.п. — независимые подразделы, у каждого своя модель клиента и своё потребление.
|
|||
|
|
- **Серверные и клиентские компоненты потребляют по-разному.** Server Components — прямой `await` метода клиента, клиентские — через готовые GET-хуки REST-клиента (`useGetUserList`, `useGetPostDetail` и т.п.). SWR инкапсулирован в хуке, компонент про него не знает.
|
|||
|
|
|
|||
|
|
## Карта раздела
|
|||
|
|
|
|||
|
|
### REST
|
|||
|
|
|
|||
|
|
Канал «запрос-ответ» по HTTP. Покрывает большинство API.
|
|||
|
|
|
|||
|
|
- [REST](./rest/index.md) — обзор раздела: создание клиента и использование.
|
|||
|
|
- **Создание клиента** — как оформляется REST API в проекте:
|
|||
|
|
- [Обзор](./rest/clients/index.md) — когда нужен клиент и как выбрать подход.
|
|||
|
|
- [Автогенерация из OpenAPI](./rest/clients/auto.md) — для API с OpenAPI-спецификацией, через `@gromlab/api-codegen`.
|
|||
|
|
- [Ручное создание](./rest/clients/manual.md) — для API без схемы, клиент пишется и поддерживается руками.
|
|||
|
|
- [GET-хуки REST-клиента](./rest/clients/hooks.md) — прозрачные SWR-обёртки над GET-методами клиента.
|
|||
|
|
- **Использование** — как получать данные через готовый клиент:
|
|||
|
|
- [Стратегии получения данных](./rest/strategies/index.md) — как выбрать способ получения данных под ситуацию.
|
|||
|
|
- [Серверный await](./rest/strategies/server-await.md) — прямой `await` метода клиента в Server Components.
|
|||
|
|
- [Параллельные серверные запросы](./rest/strategies/parallel-server-requests.md) — запуск независимых серверных запросов без waterfall.
|
|||
|
|
- [Передача промиса ниже](./rest/strategies/pass-promise-down.md) — серверный стриминг через промис и `Suspense`.
|
|||
|
|
- [Начальные данные для клиентских хуков](./rest/strategies/client-hooks-initial-data.md) — серверный промис в `SWRConfig fallback`.
|
|||
|
|
- [Клиентский GET-хук](./rest/strategies/client-get-hook.md) — получение данных в Client Components через готовый GET-хук.
|
|||
|
|
- [Business-композиция](./rest/strategies/business-composition.md) — доменная интерпретация и композиция REST-данных.
|
|||
|
|
|
|||
|
|
### Realtime
|
|||
|
|
|
|||
|
|
Канал push-данных: WebSocket, SSE, событийные шины. Транспорт не зашит в правила — важна абстракция «подписка».
|
|||
|
|
|
|||
|
|
- [Realtime](./realtime.md) — клиент realtime в `infrastructure/`, потребление через `useSWRSubscription` или прямые подписки.
|
|||
|
|
|
|||
|
|
## Что даёт раздел
|
|||
|
|
|
|||
|
|
После прочтения раздела понятно:
|
|||
|
|
|
|||
|
|
- Где живёт код работы с API и почему именно там.
|
|||
|
|
- Когда генерировать клиент автоматически, а когда писать вручную, и как структурирован каждый из вариантов.
|
|||
|
|
- Какие GET-хуки относятся к REST-клиенту и почему они живут в `infrastructure/{service-name}/hooks/`.
|
|||
|
|
- Как выбрать стратегию получения REST-данных под конкретную ситуацию.
|
|||
|
|
- Как подключать realtime-источники в общую модель работы с данными.
|
|||
|
|
- Какие правила обязательны и какие отклонения допустимы.
|
|||
|
|
|
|||
|
|
## Что не входит в раздел
|
|||
|
|
|
|||
|
|
- **Глобальное состояние UI** — Stores, формы, фичефлаги. Это [Stores](../applied/stores.md).
|
|||
|
|
- **Доменная логика** — как данные превращаются в сценарии бизнеса. Это слой `business/` в [Архитектуре](../basics/architecture/index.md).
|
|||
|
|
- **Хуки общего назначения** — переиспользуемые хуки UI, не привязанные к конкретному API. Отдельный прикладной раздел для них пока не ведётся.
|