В статье обсуждается проблема валидации данных при взаимодействии фронтенда и бэкенда, где часто возникают ошибки из-за несогласованности контрактов или ручных ошибок в коде. Автор предлагает три подхода к решению этой задачи. Первый подход предполагает генерацию клиентского кода и валидаторов из OpenAPI-схем. Этот метод, хоть и распространен в энтерпрайз-проектах, имеет существенные недостатки: сгенерированные схемы могут расходиться с реальным поведением бэкенда, что усложняет версионирование и требует постоянной перегенерации. Кроме того, создается монолитный API-клиент, который не поддерживает tree-shaking, загружая все эндпоинты даже если используются лишь некоторые из них, а также усложняет параллельную разработку из-за необходимости наличия бэкенда для генерации пакетов.
Второй подход заключается в ручном описании схем валидации на фронтенде с использованием библиотек вроде Zod или Valibot. Хотя это удобно для проектов, переросших MVP, но не достигших масштаба энтерпрайза, у него есть нюансы. Библиотеки для форм могут быть избыточны для проверки API-контрактов, а ручное написание схем увеличивает время typecheck-проверок и создает путаницу при выводе типов. Также такие схемы не всегда эффективно очищают лишние параметры и логгируют их.
Третий подход, который автор считает наиболее универсальным, основан на генерации валидаторов непосредственно из TypeScript-типов. Для этого используется библиотека api-contract-check, входящая в состав ARFA Generator. Она работает в пайплайне сборки, создавая схемы валидации из TS-типов, и в рантайме выполняет проверку и очистку данных. Библиотека использует производительный алгоритм syntax interpreter, который быстрее стандартных парсеров, и весит менее килобайта в сжатом виде. Этот метод обеспечивает единство источника правды в виде нативных TS-типов, автоматически отлавливает расхождения между запросами и ответами, очищает лишние поля и позволяет избежать непредсказуемых ошибок в приложении, не требуя сложной инфраструктуры.