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

<Meta title='@dxtmisha/ru/functional-basic/Classes/ApiDataReturn - Обработка данных ответа API'/>

# Класс ApiDataReturn

Класс для обработки и подготовки данных, полученных в результате запроса к API. Он преобразует необработанные данные ответа в структурированный формат, извлекает метаданные и сопоставляет содержимое в соответствии с запрошенной конфигурацией.

> `ApiDataReturn` является **вспомогательным классом**, предназначенным для обработки и форматирования данных ответа API. В большинстве случаев рекомендуется взаимодействовать с результатами через ответ, возвращаемый методами `ApiInstance` или глобальным объектом `Api`.

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

- **Автоматический парсинг** — интеллектуально анализирует JSON-ответы или возвращает необработанный текст на основе заголовков Content-Type.
- **Нормализация данных** — гарантирует, что возвращаемый объект соответствует согласованной структуре, даже если ответ сервера различается.
- **Извлечение метаданных** — автоматически извлекает общие поля, такие как `success`, `status`, `code` и `message`, из корня ответа и объединяет их с объектом данных.
- **Гибкая конфигурация** — поддерживает пользовательскую логику обработки через `queryReturn` и управляет развертыванием поля `data` с помощью `toData`.

## Методы

### Действие

- `async init(): Promise<this>` — Инициализирует класс, считывая и анализируя данные из объекта ответа.
- `get(): ApiData<T>` — Возвращает обработанные и отформатированные данные.
- `getAndStatus(status: ApiStatus): ApiData<T>` — Возвращает обработанные данные с внедренным объектом `statusObject` из предоставленного экземпляра статуса.
- `getData(): ApiData<T> | undefined` — Возвращает исходные, неотформатированные данные, как они были изначально считаны из ответа.

## Внутренняя логика (Protected)

- `readData<T>(): Promise<ApiData<T>>` — Низкоуровневый метод, который считывает тело ответа и парсит его как JSON или текст.
- `initData(): ApiData<T>` — Форматирует необработанные данные в соответствии с конфигурацией, обрабатывая развертывание свойств.
- `initItem(data: Record<string, any>): ApiData<T>` — Переносит поля метаданных из корня ответа в основной объект данных.

