API
OpenAPI: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый — это решение по реальному API: не определение для заучивания, а выбор, где живёт истина и как пайплайн держит её честной.
Убедись, что связываешь spec-first vs code-first, contract drift, gate на breaking changes, codegen и валидацию на краю в одну историю про enforcement — тот синтез, к которому вёл урок.
У команды есть написанный вручную OpenAPI spec, отрендеренный в красивый docs-портал. Коллега говорит: 'мы защищены от breaking changes.' Чего на самом деле не хватает?
Твои написанные вручную docs помечают поле как optional, но работающий сервер теперь отклоняет запросы без него. Как это называется и что это предотвращает?
Публичный API потребляют мобильные приложения, которые ты не можешь форс-обновить, и три внешних партнёра. Какая стратегия enforcement подходит?
Ты генерируешь TypeScript-клиент из spec, и результат полон any и слабо типизированных объектов. В чём первопричина?
Ты апгрейдишь spec с OpenAPI 3.0 до 3.1. Какое изменение реально и почему оно важно?
Какое изменение контракта запроса/ответа обратно совместимо и безопасно для выкатки без мажорного бампа версии?
Сквозная линия юнита — одна история про enforcement: spec становится контрактом, только когда CI делает его несущим. Spec-first vs code-first решает, где живёт истина и проверяется ли контракт до кода, но ни один не уходит от gate — валидируй запросы на краю, диффь каждый PR через oasdiff, чтобы breaking changes (новое required-поле, удалённое поле ответа, суженный тип) роняли сборку, и скармливай тугие схемы генератору, чтобы codegen давал сильные типы. OpenAPI 3.1 переводит схемы на JSON Schema 2020-12, заменяя nullable на type-массивы. Без enforcement spec дрейфует в фикцию и ломает клиентов.