TGViewer
@davidobryakov @davidobryakov @davidobryakov · 638 subscribers
Post #1229 813
Настраиваем автодокументирование для express-приложений

Читать полностью: https://blog.kantegory.me/express-autodoc

Долгое время в express было принято использовать решения, которые довольно большую часть работы перекладывают на разработчика. Одним из самых популярных решений и по сей день является swagger-jsdoc.

Поскольку, оно является и самым проверенным, я продолжал рассказывать о нём студентам из года в год. Но в этом году что-то пошло не так... Один из студентов спросил: "а нет ли чего-то такого же удобного, как в Nest.JS?". Тут-то всё и началось.

Я прочитал более десятка статей, пересмотрел несколько роликов в поисках оптимального решения. И вот мы здесь. Я выделил 3 решения для настройки автодокументации и подготовил сравнения и примеры для них.

swagger-jsdoc

Пример кода:

/**
* @openapi
* /v1/testCreate:
* post:
* produces:
* - application/json
* parameters:
* - name: username
* in: formData
* required: true
* type: string
* - name: password
* in: formData
* required: true
* type: string
* description: Test create
* responses:
* 200:
* description: Returns a created object.
*/
router
.route('/testCreate')
.post(exampleController.post)


Полный код примера доступен на github.

Плюсы:
- простота
- универсальность

Минусы:
- много ручной работы

routing-controllers

Пример кода:

@JsonController()
export class ExampleController {
@OpenAPI({ summary: 'Test create' })
@ResponseSchema(TestCreateResponseDto, { statusCode: 200 })
@Post('/testCreate')
post(
@Body({ type: TestCreateDto }) body: TestCreateDto,
@Res() response: Response,
): void {
const uuid: string = randomUUID();

const responseBody = {
uuid,
...body,
};

response.status(201).send(responseBody);
}
}


Полный код примера доступен на github.

Плюсы:
- код более структурирован
- вынужденное использование валидаторов
- синтаксически близко к Nest

Минусы:
- проблема с рантаймом tsx
- остаётся ли express всё ещё таким же лёгким?

tsoa

Пример кода:

@Route()
@Tags('Example')
export class ExampleController extends Controller {
@Post('/testCreate')
@Response<TestCreateResponseDto>(201, 'Returns a created object.')
public async post(
@Body() body: TestCreateDto,
): Promise<TestCreateResponseDto> {
const uuid: string = randomUUID();

return {
uuid,
...body,
};
}
}


Полный код примера доступен на github.

Плюсы:
- код более структурирован
- встроенная валидация
- комплексное решение
- синтаксически близко к Nest

Минусы:
- остаётся ли express всё ещё таким лёгким?

Выводы

Сухое сравнение доступно на npm-compare. По моим личным ощущениям, tsoa — самый оптимальный вариант.

Читать полностью: https://blog.kantegory.me/express-autodoc
Teletype Настраиваем автодокументирование для express-приложений Долгое время в express было принято использовать решения, которые довольно большую часть работы перекладывают на разработчика. Одним...
  • 🔥 5
  • 👍 3
More from @davidobryakov
  1. Feb 14, 2026Оптимизация работы эндпоинта Часто так бывает, что новые фичи заводятся итерационным путём…
  2. May 13, 2025Основные паттерны микросервисной архитектуры: Strangler Fig, API Gateway, Service Mesh и д…
  3. May 11, 2025Поиск мотивации в скучных задачах Частенько бывает, что нехватка мотивации для решения чег…
  4. May 10, 2025Переход с Python на Go и мысли о высшем образовании / ч. 3 Пост в блоге: https://blog.kant…
  5. May 10, 2025Переход с Python на Go и мысли о высшем образовании / ч. 2 Пост в блоге: https://blog.kant…
  6. May 10, 2025Переход с Python на Go и мысли о высшем образовании / ч. 1 Пост в блоге: https://blog.kant…
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 →