TGViewer
Организованное программирование | Кирилл Мокевнин Организованное программирование | Кирилл Мокевнин @orgprog · 14.3K subscribers
Post #386 9.7K
REST API на максималках

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

Для начала нужны генераторы кода на базе openapi-схемы, таких в каждой экосистема по несколько штук как минимум. Как они помогают?

На базовом уровне генераторы просто создают DTO, которые вы сами парсите и валидируете вручную:


router.POST("/loginJSON", func(c *gin.Context) {
var json Login // Login сгенерирован
if err := c.ShouldBindJSON(&json); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
})


Это уже хорошая помощь от наличия спеки, но все еще очень много рукопашки и отсутствие контроля, того, что обработчики написаны правильно. Потому что одно дело сгенерировать структуры, а другое правильно (в соответствии со спекой openapi) их использовать в нужных местах. В общем что еще хотелось бы:

⁃ Валидацию запроса по схеме
⁃ Биндинг JSON → объект
⁃ Проверку ответа и статусов
⁃ Соответствие маршрутов и сигнатур контроллеров контракту

Только в этом случае, мы получим 100% пользу от наличия openapi схемы с максимальной автоматизацией всей рутины.

На практике же очень часто проверка ответа сводится к тестам, где JSON просто парсят и изучают его внутреннюю структуру вручную: сравнивают поля, типы, значения. В лучшем случае подключают валидацию по JSON Schema в тестах. Это по сути всё — ручная работа и проверки только на этапе выполнения тестов, без статических гарантий, подсказок редактора и без встроенного контроля на уровне фреймворка.

Полная генерация

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

Давайте для примера возьмем Java и Spring Boot, где подобные задачи решаются давно и хорошо. В Spring Boot обычно используют OpenAPI Generator - он по спецификации генерирует интерфейсы контроллеров и модели (DTO). Вот пример интерфейса, который он генерирует:


public interface LoginApi {

@PostMapping("/login")
ResponseEntity<LoginResponse> login(@Valid @RequestBody LoginRequest request);
}


⁃ LoginRequest / LoginResponse — сгенерированные модели (с аннотациями валидации).
⁃ @RequestBody - Jackson сам парсит JSON → объект.
⁃ @Valid — проверка по аннотациям из схемы (400/422 уедут в хендлер ошибок).

И конкретная реализация


@RestController
class LoginController implements LoginApi {

@Override
public ResponseEntity<LoginResponse> login(LoginRequest req) {
var user = new User().id("u1").email(req.getEmail());
return ResponseEntity.ok(new LoginResponse().token("jwt...").user(user));
}
}


В итоге маршрут, сигнатура и типы подтягиваются из OpenAPI, модели тоже сгенерены. Мы пишем только логику внутри метода.

p.s. В ваших проектах используется полная генерация или частичная?

Ссылки: Телеграм | Youtube | VK
Telegram Организованное программирование | Кирилл Мокевнин Делюсь опытом и обучаю. И ИИ? И ИИ. Ютуб https://youtube.com/@mokevnin AI Клуб @hexletclub | Внедрение AI в SDLC https://praxor.ru/ Для предложений в личку канала
  • 🔥 25
  • 👍 16
  • ❤ 6
  • 🥱 3
  • 🤔 2
  • 👀 1
More from @orgprog
  1. Oct 1, 2026Статистика по задачам. Как повлиял ии? Заметил интересный эффект. По мере внедрения агенто…
  2. Sep 29, 2026Плановое обслуживание кода Даже если вы настроили у себя процесс разработки, в котором все…
  3. Sep 27, 2026Выпуск опубликован, можно смотреть и слушать. Сегодня в подкасте создатель Вастрик Клуба В…
  4. Sep 26, 2026Костные наушники Под каждым видео коммент, что за наушники ты носишь? Это костные наушники…
  5. Sep 24, 2026Статистика участия в опенсорсе Активно разрабатывая я регулярно наыткаюсь на баги и не дор…
  6. Sep 21, 2026Банда четырех для эпохи агентов Количество паттернов по тому, как эффективно работать с ИИ…
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 →