Backend
API
Node.js
Banco de Dados
Mobile
Arquitetura

Backend per applicazioni: architettura, tecnologie e best practice

Backend per applicazioni: architettura, tecnologie e best practice

Il backend è il cuore delle applicazioni moderne. Elabora la logica aziendale, archivia i dati, gestisce l'autenticazione ed espone le API affinché il front-end possa utilizzarle. Questa guida introduce concetti fondamentali, tecnologie popolari e best practice per creare backend robusti.

Cos'è il backend

Il backend è lo strato del sistema che l'utente non vede direttamente. Viene eseguito sul server, elabora le richieste, accede al database e restituisce le risposte. L'app mobile o Web (frontend) comunica con il backend tramite API.

Responsabilità del backend

  • Logica aziendale.
  • Persistenza dei dati.
  • Autenticazione e autorizzazione.
  • Integrazioni con terze parti.
  • Elaborazione asincrona.
  • Sicurezza.

Architetture di backend

Monolite

Un'unica applicazione che contiene tutta la logica. Semplice da iniziare. Può diventare complicato su larga scala.

Microservizi

Sistema suddiviso in servizi piccoli ed indipendenti. Ognuno con una responsabilità specifica. Scalabile, ma con maggiore complessità operativa.

Senza server

Funzioni eseguite su richiesta. Non gestisce i server. Si ridimensiona automaticamente. Buono per carichi variabili.

Backend come servizio (BaaS)

Servizi già pronti che eliminano la necessità di codice backend. Firebase, Supabase. Accelera lo sviluppo, limita la flessibilità.

API: l'interfaccia backend

RIPOSO

Modello più comune. Risorse identificate da URL, operazioni tramite metodi HTTP (GET, POST, PUT, DELETE).

###GraficoQL

Linguaggio di query flessibile. Il cliente richiede esattamente i dati di cui ha bisogno. Riduce il recupero eccessivo e quello insufficiente.

###gRPC

Buffer di protocollo su HTTP/2. Efficiente e digitato. Buono per la comunicazione tra i servizi.

###WebSocket

Connessione persistente bidirezionale. In tempo reale: chat, notifiche, giochi.

Progettazione dell'API REST

Risorse ed endpoint

Organizza per risorse: /users, /posts, /orders. Usa nomi, non verbi.

Metodi HTTP

  • GET: legge i dati.
  • POST: crea.
  • PUT/PATCH: aggiornamento.
  • ELIMINA: rimuove.

Codici di stato

  • 200: successo.
  • 201: creato.
  • 400: errore del client.
  • 401: non autenticato.
  • 403: non autorizzato.
  • 404: non trovato.
  • 500: errore del server.

Controllo delle versioni

Percorso: /api/v1/. Intestazione: Accetta-Versione. Permette l'evoluzione senza rompere i vecchi clienti.

Impaginazione

Cursore o offset per elenchi di grandi dimensioni. Evitare di restituire migliaia di record.

Tecnologie di back-end

Node.js

JavaScript sul server. Asincrono, guidato dagli eventi. Ottimo ecosistema. Popolare per le API.

Pitone

Django e FastAPI. Leggibile, produttivo. Forte nella scienza dei dati e nel machine learning.

Vai

Compilato, performativo. Competizione nativa. Crescere nel cloud e nei microservizi.

Java/Kotlin

Impresa tradizionale. Stivale primaverile. Digitazione robusta e forte.

Rubino

Rotaie. Elevata produttività, convenzione sulla configurazione. Adatto alle startup.

.NET

C# con ASP.NET Core. Impresa, alte prestazioni. Ecosistema Microsoft.

##Banca dati

SQL (relazionale)

PostgreSQL, MySQL, SQL Server. Query strutturate, ACID e potenti. Buono per i dati relazionali.

NoSQL (documento)

MongoDB, CouchDB. Flessibile, senza schemi rigidi. Buono per dati semistrutturati.

NoSQL (valore-chiave)

Redis, DynamoDB. Ultra veloce. Ottimo per la memorizzazione nella cache e le sessioni.

NoSQL (colonna larga)

Cassandra, ScillaDB. Scala orizzontalmente. Buono per i big data.

NuovoSQL

CockroachDB, TiDB. Scala orizzontale con garanzie SQL.

ORM e costruttori di query

###ORM

Mappa gli oggetti sulle tabelle. Prisma, Sequelizza, TypeORM, SQLAlchemy. Produttivo, ma può nascondere query inefficienti.

Generatore di query

Costruzione programmatica di SQL. Knex, Diesel. Maggiore controllo rispetto all'ORM.

SQL grezzo

Massimo controllo. Necessario per query o ottimizzazioni complesse.

Autenticazione e autorizzazione

###JWT

Token senza stato per autenticazione. Portabilità, scalabilità.

OAuth 2.0

Delega di accesso. Consente l'accesso tramite Google, Apple.

RBAC/ABAC

Modelli per il controllo dei permessi. Vedi articolo specifico.

Cache

Perché arricciare

Riduce il carico sulla banca, migliora la latenza. Risultati ripetuti serviti immediatamente.

Redis

Cache in memoria più popolare. Anche per sessioni, code, pub/sub.

###CDN

Caching dei contenuti statici a livello periferico. Cloudflare, CloudFront.

Invalidazione della cache

Il problema difficile. TTL, invalidazione esplicita, strategie di aggiornamento.

Elaborazione asincrona

Code di messaggi

RabbitMQ, SQS, coda Redis. Disaccoppia produttore e consumatore.

###Lavoratori

Processi che consumano code in background. Sedano, Sidekiq, Toro.

Streaming di eventi

Kafka, Kinesis. Elaborazione degli eventi in tempo reale e su larga scala.

##Sicurezza

Convalida dell'input

Convalida tutti gli input. Non fidarsi mai del cliente.

Iniezione SQL

Utilizzare query con parametri. Non concatenare mai l'input in SQL.

###XSS

Uscita di fuga. Politica sulla sicurezza dei contenuti.

###HTTPS

Sempre. Nessuna eccezione. TLS su tutte le comunicazioni.

Limitazione della velocità

Limita le richieste per utente/IP. Previene gli abusi.

Gestione dei segreti

Non codificare mai. Utilizza variabili di ambiente, AWS Secrets Manager, Vault.

Osservabilità

Registrazione

Registri strutturati. Livelli (debug, informazioni, avviso, errore). Aggregazione centralizzata.

Metriche

Prometeo, Datadog. Monitora latenza, throughput, errori.

Tracciamento

Tieni traccia delle richieste tra i servizi. Jaeger, raggi X.

Distribuzione e infrastruttura

Contenitori

Docker incapsula l'applicazione. Kubernetes orchestra su larga scala.

Fornitori di servizi cloud

AWS, GCP, Azure. I servizi gestiti riducono le operazioni.

###CI/CD

Pipeline automatizzata: testare, creare, distribuire. Azioni GitHub, CI GitLab.

Infrastruttura come codice

Terraformazione, Pulumi. Infrastruttura versionata e riproducibile.

Test

Test unitari

Testare le funzioni in modo isolato. Veloci, ce ne sono tanti.

Test di integrazione

Testare l'interazione tra i componenti. Banca, API.

Test E2E

Testare il flusso completo. Più lenti, meno.

Documentazione

OpenAPI/Swagger

Specifica API. Genera documentazione interattiva.

LEGGIMI

Istruzioni di installazione, architettura, decisioni.

ADR

Documenti decisionali sull'architettura. Documentare le ragioni delle scelte.

Conclusione

Il backend per le applicazioni è un'ampia disciplina che combina architettura, sicurezza, prestazioni e funzionamento. Scegli tecnologie adatte al contesto, progetta API coerenti, affronta la sicurezza fin dall'inizio e crea osservabilità. Un backend ben progettato è il fondamento di prodotti affidabili e scalabili.

##Domande frequenti

1) Quale lingua scegliere per il backend? Dipende dalla squadra e dal contesto. Node.js e Python sono popolari per le startup. Go e Java per i sistemi critici.

2) RESTO o GraficoQL? REST è più semplice e sufficiente per la maggior parte. GraficoQL quando la flessibilità delle query è cruciale.

3) Ho bisogno di microservizi? Probabilmente non all'inizio. Inizia con un monolite. Migrare quando necessario.

4) Firebase sostituisce il proprio backend? Per MVP e app semplici, sì. Per la logica complessa, avrai bisogno del tuo codice.

5) Come scalare il backend? Orizzontale (più istanze), cache, ottimizzazione delle query, elaborazione asincrona.

Leggi anche