TGViewer
yet another dev yet another dev @yet_another_dev · 382 subscribers
Post #196 459
👩‍💻 Используем OpenAPI для синхронизации API на Frontend и Backend

Read on website.
Читать на сайте.

Очень часто в проектах приходится поддерживать в актуальном состоянии типы и описание эндпоинтов. Если делать это вручную, то высока вероятность допустить ошибку. В результате получаются баги и тратиться время на исправление. Сегодня я пошагово покажу:

1. Как настроить бэкенд-проект ASP.NET Web API для генерации OpenAPI-спецификаций.
2. Как из спецификации автоматически генерировать http-клиент и TypeScript-типы для фронта.

В итоге синхронизировать бек и фронт можно будет всего двумя командами буквально за секунды.

Настраиваем бекенд

Создаём новый проект:

mkdir -p backend
cd backend
dotnet new webapi


По умолчанию файл проекта (*.csproj) использует пакет Swashbuckle.AspNetCore. Этот пакет автоматически генерирует OpenAPI (Swagger) спецификацию для всех контроллеров и моделей в ASP.NET Web API.

<PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />


Важно запомнить версию пакета. Она должна совпадать с версией dotnet‑утилиты, которую мы установим дальше. В моём проекте стояла версия 6.6.2, я обновил до последней (9.0.4 на момент написания):

dotnet add package Swashbuckle.AspNetCore –version 9.0.4


Следующий шаг – установка утилиты, которая будет генерировать спецификацию из сборки:

dotnet new tool-manifest
dotnet tool install Swashbuckle.AspNetCore.Cli --version 9.0.4


Первая команда создаёт файл‑манифест для dotnet‑утилит (аналог package.json или Directory.Packages.props). Манифест полезен тем, что чтобы восстановить нужные для проекта утилиты, достаточно будет выполнить команду dotnet tool restore. Это удобно как и для остальных членов вашей команды, так и при сборке/деплое проекта в CI/CD.

Осталось сгенерировать спецификацию:

dotnet build && dotnet swagger tofile \
--output openapi.yaml \
--yaml \
bin/Debug/net8.0/backend.dll \
v1

Файл спецификации будет лежать в backend/openapi.yaml.

Настраиваем фронтенд

Создаём Svelte приложение (я использую pnpm).

pnpx sv create \
--template minimal \
--types ts \
--install pnpm \
--no-add-ons \
./frontend


Генерируем клиента со всеми типами.

pnpx swagger-typescript-api generate \
--path ./backend/openapi.yaml \
-o ./frontend/src/generated \
-n WebApi.ts


Готово. Сгенерированный файл лежит в frontend/src/generated/WebApi.ts.

Заключение

Теперь, после изменений в API, для синхронизации достаточно выполнить 2 команды:

dotnet build && dotnet swagger tofile \
--output openapi.yaml \
--yaml \
bin/Debug/net8.0/backend.dll \
v1

pnpx swagger-typescript-api generate \
--path ./backend/openapi.yaml \
-o ./frontend/src/generated \
-n WebApi.ts


Полный пример скрипта лежит в GitHub.
  • 👍 8
More from @yet_another_dev
  1. Sep 21, 2026Опубликовал вчера ролик в одной запрещённой в России соцсети про то, как сходил на выборы.…
  2. Sep 20, 2026Мы пришли в 7:50 и очередь уже была 🥲 Пообщались с другими людьми. Многие приехали из дру…
  3. Sep 19, 2026Post #383
  4. Sep 18, 2026Последние пару недель на чат нападают боты со спамом (прикрыл стикером). Поэтому чат тепер…
  5. Sep 17, 2026Что интересного в этой статье: 1. Потрачено $120К, а агенты суммарно отработали около 3-х…
  6. Sep 17, 2026В Microsoft переписали рантайм GitHub Copilot с TypeScript на Rust при помощи агентов. Под…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →