import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/functional-basic/Classes/ApiHydration - Гидратация данных API'/>

# Класс ApiHydration

Класс для сбора данных API для гидратации на стороне клиента во время SSR (Server-Side Rendering). Он позволяет серверу захватывать ответы API во время начальной отрисовки и передавать их клиенту, предотвращая избыточные сетевые запросы при инициализации приложения в браузере.

> `ApiHydration` является **вспомогательным классом**, предназначенным для управления данными SSR. В большинстве случаев рекомендуется взаимодействовать с гидратацией через глобальный объект `Api`, используя такие методы, как `Api.getHydrationScript()`.

## Ключевые особенности

- **Оптимизация SSR** — сокращает количество запросов после загрузки страницы за счет повторного использования серверных данных.
- **Захват данных** — автоматически собирает успешные ответы API, помеченные для глобального использования.
- **Внедрение в HTML** — генерирует безопасный тег `<script>` с JSON-сериализованными данными для вставки в документ.
- **Синхронизация с клиентом** — позволяет `ApiResponse` автоматически загружать гидрированные данные на стороне клиента.

## Методы

### Действие

#### `toClient`

Сохраняет ответ API для гидратации на стороне клиента. Этот метод выполняется только на сервере и только для запросов, где `global` установлен в true.

**Параметры:**
- `apiFetch: ApiFetch` — Конфигурация запроса API.
- `response: T` — Данные ответа, которые будут переданы клиенту.

#### `toString`

Возвращает строковое представление захваченных данных гидратации, обернутое в безопасный тег `<script>` с уникальным ID.

**Возвращает:** `string` — Отформатированный HTML-тег скрипта.

### Конфигурация

- `initResponse(response: ApiResponse): void` — Инициализирует экземпляр `ApiResponse` данными гидратации, если код выполняется в среде DOM.

## Типы

#### `ApiHydrationList`
Список захваченных ответов API для гидратации.
- `path: string` — Путь эндпоинта API.
- `method: ApiMethodItem` — Используемый HTTP-метод.
- `request: any` — Данные запроса.
- `response: any` — Данные ответа сервера.
- `global?: boolean` — Флаг глобального использования.

## Руководство: Механика гидратации

Следующие правила и условия определяют, как система гидратации захватывает и передает данные между сервером и браузером:

- **Флаг global** — захватываются только те запросы, у которых свойство `global` в конфигурации установлено в `true`.
- **Автоматическая обработка** — флаг `global` автоматически устанавливается в `true` для всех `GET`-запросов. Другие методы требуют явного включения вручную.
- **Серверное выполнение** — захват данных происходит исключительно на стороне сервера (где `isDomRuntime()` возвращает false).
