Интеграция, модульное и E2E-тестирование не исключают друг друга, но их, безусловно, сложно реализовать в системе BFF. Может ли сделать это проще безопасная для типов библиотека WunderGraph для тестирования и имитации?

С помощью шаблона Backend-for-frontends (BFF) вы создаете серверы, которые являются промежуточным уровнем агрегации, организуя несколько вызовов API для предоставления одного конкретного API, адаптированного к потребностям конкретного клиента.

Зачем создавать BFF? Что ж, если вы создаете приложения даже среднего размера, вам придется иметь дело с целой кучей базовых доменных служб — будь то внутренние микросервисы, API CRM/контента, сторонние API, критически важные для бизнеса, или просто базы данных — и вам нужно будет их как-то свести воедино. Это много вызовов API.

В 10 случаях из 10 я собираюсь агрегировать эти вызовы на уровне сервера BFF с нисходящим межсоединением ~10 Гбит/с с намного меньшими задержками между моими службами, а не на моем клиенте, который имел бы где угодно от ~10–100 Мбит/с в восходящем направлении (в два раза меньше, чем на мобильных устройствах) с более крупными, более медленными и крайне непредсказуемыми переходами.

Но поскольку BFF могут агрегировать и отображать нисходящие данные, как вам угодно, из различных источников, каждый со своей собственной архитектурой (и особенностями), тестирование становится еще более важным.

Почему? И как тогда нам подходить к тестированию лучших друзей? Давай поговорим об этом. Я уже некоторое время использую WunderGraph — фреймворк BFF с открытым исходным кодом — для создания BFF для приложений с большим объемом данных, и его интегрированная библиотека тестирования, которая позволяет мне писать интеграционные тесты, не зависящие от фреймворка (имитирующие данные при необходимости), имеет было находкой.

Но сначала давайте ответим на один животрепещущий вопрос, который возникает у большинства разработчиков:

Что такого особенного в BFF, что делает тестирование таким важным?

TL;DR: с шаблоном Backend-for-frontends у вас есть несколько точек отказа.

Для любого другого приложения, если вы используете TypeScript и выполняете проверку во время выполнения с помощью Zod, конечно, вы можете обойтись без тестирования. Но что происходит, когда вам нужно организовать несколько нисходящих вызовов на сервере BFF с помощью…