76 lines
3.9 KiB
Markdown
76 lines
3.9 KiB
Markdown
|
|
---
|
|||
|
|
title: Создание клиента
|
|||
|
|
description: Из чего состоит REST-клиент и какие части нужно подготовить перед использованием API.
|
|||
|
|
keywords: [rest, клиент, infrastructure, методы, openapi, get-хуки, swr]
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Создание клиента
|
|||
|
|
|
|||
|
|
REST-клиент — это infrastructure-модуль, через который проект работает с внешним REST API.
|
|||
|
|
|
|||
|
|
На этом этапе нужно подготовить клиент сервиса: создать оболочку клиента, получить методы API и добавить GET-хуки для клиентских компонентов.
|
|||
|
|
|
|||
|
|
## Из чего состоит клиент
|
|||
|
|
|
|||
|
|
REST-клиент состоит из трёх основных частей:
|
|||
|
|
|
|||
|
|
1. **Клиент** — самописная оболочка над транспортом.
|
|||
|
|
2. **Методы** — сгенерированные из OpenAPI или написанные вручную вызовы API.
|
|||
|
|
3. **GET-хуки** — SWR-обёртки для GET-запросов.
|
|||
|
|
|
|||
|
|
Эти части живут в одном REST-модуле, потому что относятся к одному внешнему сервису.
|
|||
|
|
|
|||
|
|
## Клиент
|
|||
|
|
|
|||
|
|
Клиент — ручной слой, который настраивает работу с API: `baseUrl`, заголовки, авторизацию, обработку ошибок и создание инстанса сервиса.
|
|||
|
|
|
|||
|
|
Даже если методы генерируются из OpenAPI, `client.ts` остаётся ручным файлом проекта.
|
|||
|
|
|
|||
|
|
`client.ts` — только сборочная точка клиента. В нём не размещаются DTO, `declare module`, `Extended`-типы, GET-хуки и бизнес-логика.
|
|||
|
|
|
|||
|
|
## Методы
|
|||
|
|
|
|||
|
|
Методы описывают конкретные запросы к API.
|
|||
|
|
|
|||
|
|
Они появляются одним из двух способов:
|
|||
|
|
|
|||
|
|
- генерируются из OpenAPI в `generated/`;
|
|||
|
|
- создаются вручную в `methods/`.
|
|||
|
|
|
|||
|
|
Подробности:
|
|||
|
|
|
|||
|
|
- [Автогенерация из OpenAPI](./auto.md)
|
|||
|
|
- [Ручное создание](./manual.md)
|
|||
|
|
|
|||
|
|
## GET-хуки
|
|||
|
|
|
|||
|
|
Для GET-запросов добавляются GET-хуки REST-клиента.
|
|||
|
|
|
|||
|
|
Это прозрачные SWR-обёртки над GET-методами клиента. Они живут в `hooks/` этого же REST-модуля и нужны для использования данных в Client Components.
|
|||
|
|
|
|||
|
|
GET-хуки именуются с префиксом `useGet`: `useGetPetList`, `useGetPetDetail`, `useGetCurrentUser`.
|
|||
|
|
|
|||
|
|
Подробности:
|
|||
|
|
|
|||
|
|
- [GET-хуки REST-клиента](./hooks.md)
|
|||
|
|
|
|||
|
|
## Структура модуля
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
src/infrastructure/{service-name}/
|
|||
|
|
├── client.ts # самописная оболочка и инстанс клиента
|
|||
|
|
├── generated/ или methods/ # методы API
|
|||
|
|
├── hooks/ # GET-хуки REST-клиента
|
|||
|
|
├── types/ # DTO, типы API и расширения типов
|
|||
|
|
├── errors/ # ошибки API, если нужны
|
|||
|
|
└── index.ts # публичный API
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
`index.ts` — единственная точка входа в REST-модуль для внешнего кода.
|
|||
|
|
|
|||
|
|
## Что делаем дальше
|
|||
|
|
|
|||
|
|
1. Создайте методы клиента: [Автогенерация из OpenAPI](./auto.md) или [Ручное создание](./manual.md).
|
|||
|
|
2. Добавьте GET-хуки для GET-запросов: [GET-хуки REST-клиента](./hooks.md).
|
|||
|
|
3. После создания клиента переходите к [Стратегиям получения данных](../strategies/index.md).
|