Crea un'API REST sicura con NodeJS ed Express

Prova Il Nostro Strumento Per Eliminare I Problemi

In questo tutorial completo imparerai le best practice per creare, proteggere e distribuire un'API REST pronta per la produzione utilizzando Node.js ed Express.

Cos'è un'API REST?

Un'API (Application Programming Interface) consente la comunicazione software e lo scambio di dati tra le applicazioni. REST (Trasferimento di Stato rappresentativo) è uno stile di architettura popolare per la progettazione di API Web scalabili.

Alcune qualità chiave delle API REST includono:

  • Separazione client-server
  • Apolidia tra richieste
  • Risorse esposti agli endpoint
  • Utilizzo di metodi HTTP per manipolare le risorse
  • Condivisibile con più clienti

Perché Node.js ed Express per l'API REST?

Il runtime leggero di Node combinato con il framework Express fornisce strumenti eccellenti per creare rapidamente backend API REST:

  • Prestazioni veloci con loop di eventi non bloccante
  • Ottimo ecosistema di pacchetti NPM
  • Popolare per siti scalabili e ad alto traffico
  • JavaScript puro rende lo sviluppo accessibile
  • Percorsi REST e modelli di database facili da connettere

Passaggio 1: progetto di ponteggi

Impostiamo un nuovo progetto chiamato |_+_|:

|_+_|

Questo creerà un |_+_| con configurazioni predefinite per gestire le dipendenze.

Installa le dipendenze principali

Successivamente installa Express nella directory del progetto:

|_+_|

E alcuni altri pacchetti utili:

|_+_|
  • |_+_| - Connetti e modella il database MongoDB
  • |_+_| - Carica le variabili d'ambiente da |_+_| file
  • |_+_| - Middleware di sicurezza per le intestazioni HTTP
  • |_+_| - Middleware di registrazione delle richieste HTTP
  • |_+_| - Abilita CORS per richieste HTTP multiorigine

Passaggio 2: configurare l'app

Con le dipendenze installate, apri |_+_| e imposta il punto di ingresso dell'app:

|_+_|
  • Carica le variabili d'ambiente
  • Inizializza l'app Express
  • Utilizzare la sicurezza e richiedere il middleware di analisi
  • Definire la porta da ENV o 5000
  • Avvia il server

Middleware di sicurezza

Il casco aiuta a proteggere l'app impostando varie intestazioni di risposta HTTP:

  • Filtro XSS
  • Prevenzione dello sniffing MIME
  • Disabilita la memorizzazione nella cache del client
  • Frameguard per prevenire il clickjacking

Utilizza sempre Casco quando esegui app Node/Express esposte su Internet.

Passaggio 3: connettere il database MongoDB

Successivamente configureremo MongoDB per rendere persistenti i nostri dati API. Crea un |_+_| file per memorizzare le credenziali:

|_+_|

Sostituisci con la tua vera stringa di connessione MongoDB. Questo carica le informazioni su MongoDB dalle variabili di ambiente a cui faremo riferimento in seguito.

Connessione Mangusta

Installa Mongoose per la modellazione dei dati degli oggetti:

|_+_|

Connettiti al database MongoDB:

|_+_|
  • Utilizza il valore MONGO_URI da |_+_| file
  • Registra la connessione o rileva gli errori

Modello utente di esempio

Definire schema e modello utente di esempio:

|_+_|

Modifica i campi per soddisfare le tue esigenze di dati API.

Passaggio 4: definire i percorsi API REST

Ora possiamo costruire le rotte CRUD per eseguire operazioni sulle risorse REST.

Per prima cosa crea un |_+_| cartella con |_+_| file:

|_+_|

Importa il router Express e il modello utente, quindi crea un gestore per la route |_+_| per recuperare tutti gli utenti.

Esempi di percorsi CRUD

Ulteriori percorsi CRUD comuni:

|_+_|

Funzioni del gestore riutilizzabile

Estrai la logica riutilizzabile come il recupero degli utenti in base all'ID:

|_+_|

Passaggio 5: autenticazione e sicurezza

Aggiungere l'autenticazione e proteggere l'accesso all'API dovrebbe essere una priorità. Ecco le migliori pratiche per proteggere un'API REST Express.

Crittografia e hashing

Utilizza bcrypt per eseguire l'hashing delle password archiviate nel database per un'archiviazione più sicura. Quindi confronta gli hash all'accesso dell'utente mantenendo la password di origine protetta.

Gettoni JWT

Utilizza i token Web JSON per l'autenticazione invece delle sessioni. I JWT codificano i dati dell'utente in token firmati inviati su richieste:

|_+_|

Autenticazione basata sui ruoli

Assegna ruoli utente per controllare l'accesso ai percorsi. Controlla i permessi sulle richieste:

|_+_|

Limitazione della velocità

Utilizza middleware di limitazione della velocità come Express Rate Limit per limitare le richieste eccessive e prevenire abusi DDoS o attacchi di forza bruta.

SSL e HTTP

Abilita HTTP con certificati SSL sul dominio API. Tutte le API di produzione dovrebbero utilizzare la sicurezza del trasporto crittografato.

Passaggio 6: documentazione

Una documentazione adeguata aiuta gli sviluppatori a utilizzare correttamente l'API senza accedere al codice sottostante. Alcune opzioni per i documenti API includono:

Spavalderia

Swagger genera automaticamente documentazione interattiva dai commenti JSDoc nel codice del gestore del percorso.

Collezioni di postini

Crea raccolte Postman riutilizzabili con endpoint documentati per assistere nel test e nell'utilizzo dei servizi.

File di riduzione

Funzionano anche i semplici file Markdown archiviati nel repository GitHub. Assicurati però di mantenere tutte le versioni aggiornate.

Strumenti ospitati

Anche strumenti di terze parti come Stoplight, ReadMe.io e APIary sono utili per creare e visualizzare la documentazione.

Passaggio 7: strategia di controllo delle versioni

È consigliabile creare la versione delle API REST in modo che l'aggiornamento non interrompa involontariamente i client dipendenti. Le strategie comuni sono:

Controllo delle versioni dell'URI

Includi la versione API nei percorsi del percorso:

|_+_|

Intestazione della richiesta personalizzata

Passa la versione API tramite intestazione personalizzata:

|_+_|

Accetta intestazione

Sfrutta l'intestazione Accetta per specificare il tipo di supporto:

|_+_|

Parametro di query

È inoltre possibile utilizzare |_+_| parametro di query per il controllo delle versioni.

Passaggio 8: test e qualità

Test approfonditi garantiscono che l'API soddisfi i requisiti e protegga da future regressioni dovute alle modifiche.

Test unitari

Isolare e testare singole funzioni, componenti e classi.

Test d'integrazione

Verificare che i componenti combinati funzionino insieme attraverso flussi end-to-end.

Test delle prestazioni

Simula carichi di traffico elevati per identificare limiti di scalabilità o endpoint lenti.

Test di sicurezza

Tentare l'accesso non autorizzato o la gestione di dati non corretti per individuare i punti deboli.

Documentazione

Controlla che i documenti rimangano accurati man mano che l'API si evolve.

Passaggio 9: distribuzione e hosting

Quando sei pronto per la produzione, distribuisci contenitori di database e server API a strumenti come:

  • AWS ECS, Fargate
  • Istanze di contenitore di Azure
  • Motore Google Kubernetes

Questo si ridimensiona orizzontalmente e gestisce carichi di traffico elevati. Dipende dal numero di microservizi che compongono system.

Orchestrazione dei contenitori

Gestisci contenitori e servizi utilizzando:

  • Kubernetes: standard di fatto
  • Docker Swarm: semplice gestione dei cluster

Conduttura CI/CD

Configura uno strumento di pipeline CI/CD come Travis CI, Circle CI, GitHub Actions o Jenkins per automatizzare test e distribuzioni.

Infrastruttura come codice

Mantieni gli script di configurazione per creare l'infrastruttura nel controllo del codice sorgente: opzioni popolari Terraform e Ansible.

Conclusione

Con questo si conclude questa guida completa per creare, proteggere e distribuire un'API RESTful a livello di produzione utilizzando Node.js, Express e MongoDB!

I principi fondamentali del takeaway sono:

  • Utilizza Node + Express per API veloci e scalabili
  • Modella i dati con un database NoSQL come MongoDB
  • Autenticare le richieste
  • Limite di velocità e crittografia appropriata
  • Implementare la strategia di controllo delle versioni per l'evoluzione dei cambiamenti
  • Ospitare l'infrastruttura su piattaforme cloud

L'applicazione di queste linee guida di progettazione produrrà API REST sostenibili e robuste.

Guarda Anche: