Capsule Informatiche di Lello De Luca
← Tutte le Capsule

BFF e API Gateway: front door, composizione e Strangler routing

API Gateway e Backend for Frontend supportano routing Strangler, sicurezza e composizione delle API, ma devono restare sottili e privi di business logic di dominio.

API Gateway

L'API Gateway è il punto di ingresso tecnico per routing, TLS, policy, rate limiting, autenticazione e osservabilità. Durante uno Strangler può decidere se una capability viene servita dal legacy o dal nuovo servizio senza modificare i client.

Backend for Frontend

Il BFF è più vicino all'esperienza utente: compone risposte per un frontend specifico, riduce round trip, normalizza errori e propaga il contesto di sicurezza. In un Application Shell con microfrontend può offrire endpoint orientati alle schermate pur lasciando i bounded context indipendenti.

Cosa NON deve fare

  • Decidere regole di ricovero, dimissione o trasferimento.

  • Calcolare lo stato autorevole di un ordine.

  • Accedere direttamente ai database di più bounded context.

  • Diventare il posto dove si inserisce ogni eccezione del legacy.

  • Conservare copie autorevoli dei dati solo per comodità della UI.

Gateway vs Facade

Il Gateway è soprattutto un boundary infrastrutturale e di routing. La Facade semplifica un sottosistema applicativo. Possono coesistere: il Gateway instrada verso una LegacyFacade durante la migrazione e verso il nuovo bounded context dopo il cutover.

Security

Il gateway può validare token e applicare policy grossolane, ma l'autorizzazione di dominio deve essere verificata anche dal servizio proprietario. Non bisogna affidarsi all'idea che «se è passato dal gateway allora è autorizzato».

Osservabilità

Il punto di ingresso deve generare o propagare correlationId/traceId e conservarli lungo BFF, servizi, adapter e messaggi. Questo rende possibile seguire una singola operazione anche quando attraversa il confine tra nuovo e legacy.

Quando separare Gateway e BFF

Quando esistono più consumer, esigenze di sicurezza/infrastruttura comuni e frontend con composizioni diverse, è utile distinguere i due ruoli. In sistemi più piccoli possono essere implementati nello stesso componente, purché le responsabilità restino concettualmente separate.