Ogni volta che l'utente inserisce una richiesta HTTP per uno di questi, React costruisce la richiesta con i parametri necessari e la invia al server di back-end. Nel back-end, FastAPI indirizza la richiesta al metodo appropriato e richiama il metodo del database appropriato per eseguire l'operazione. Una volta eseguita correttamente la query a livello di database, la risposta viene ricevuta ed elaborata dal back-end e inviata al front-end React. React visualizza quindi il messaggio di successo/fallimento all'utente.
Front-end di React
La libreria React JS accelera lo sviluppo di applicazioni front-end pronte per la produzione fornendo molte utilità e componenti comuni pronti all'uso che possono essere riutilizzati. Come parte dello stack FARM, React viene utilizzato per inviare richieste HTTP al back-end e visualizzare la risposta del back-end al front-end.
React JS utilizza un DOM virtuale, che aggiorna solo le parti modificate dell'applicazione e non l'intera struttura ad albero. Ciò rende l'applicazione veloce. Un'altra caratteristica degna di nota è la sintassi JSX (JavaScript Extension), attraverso la quale è possibile aggiungere elementi JavaScript all'interno di tag HTML. Pertanto, qualsiasi modifica del valore dell'elemento si riflette immediatamente senza la necessità di un aggiornamento o di un riavvio del server.
Si consideri una semplice richiesta HTTP effettuata da un utente per aggiornare il proprio numero di cellulare. React memorizza i dati inseriti dall'utente utilizzando un semplice hook (useState).
Questi dati verranno inviati al layer dell'applicazione utilizzando la richiesta PUT in formato JSON.
Poiché lo stack FARM supporta la programmazione asincrona, possiamo utilizzare la libreria JS di axios che è basata su promesse e supporta tutti i browser. Utilizzando axios, possiamo astrarre la complessità della creazione e della configurazione delle richieste HTTP.
Sebbene React accetti molti formati di dati, il formato JSON è il preferito in quanto è leggero e utilizza meno larghezza di banda.
FastAPI
FastAPI è un framework web asincrono basato su Python. Nello stack FARM, Fast API funge da middleware che elabora le richieste HTTP ricevute dall'app React e invia la risposta. FastAPI viene eseguito sul server uvicorn, basato sulle specifiche del server ASGI per server web asincroni.
Fast API sfrutta le operazioni di I/O senza blocchi per gestire più carichi simultanei tramite coroutine. Ad esempio, se sono in arrivo più richieste di aggiornamento di un numero di cellulare su un portale online, invece di bloccare le risorse, FastAPI creerà una coroutine, dove può elaborare parallelamente più richieste.
Supponiamo che vi siano cinque richieste simultanee di aggiornamento di un numero di cellulare. Se ognuno di essi dovesse essere elaborato uno per uno, sarebbe una perdita di tempo e CPU. Utilizzando la parola chiave async dalla libreria asyncio di Python, possiamo iniziare a elaborare le richieste in parallelo. Supponiamo che la prima richiesta sia in attesa dei risultati di recupero (ricerca del numero di cellulare da aggiornare). Questo tempo di attesa può essere utilizzato per avviare la seconda richiesta e così via. In questo modo, ogni richiesta è completamente indipendente dalle altre e non vi è alcun blocco o attesa.
Nella suddetta coroutine, main() è il punto di ingresso del programma, dopodiché ogni richiesta viene elaborata in modo asincrono come una coroutine separata.
Il framework web fornito da FastAPI fornisce:
- Supporto completo per la programmazione asincrona, con prestazioni elevate.
- Iniezione delle dipendenze, ovvero la dichiarazione delle dipendenze del progetto e l'iniezione durante il runtime.
- Convalida e serializzazione dei dati utilizzando la libreria pydantic.
- Programmazione asincrona utilizzando la libreria python asyncio.
- Documentazione API automatica per gli endpoint API utilizzando Swagger.
- Digita suggerimenti e annotazioni.
Possiamo usare decoratori Python (@app.get, @app.put e così via) per definire le richieste HTTP e i percorsi di routing.
Successivamente, è possibile accedere ai dati di input utilizzando il percorso o i parametri di query della richiesta. L'utilizzo della libreria pydantic si occuperà della convalida dei dati.
È quindi possibile creare la funzione asincrona che aggiorna il numero di cellulare nella tabella del database MongoDB:
In un caso reale, molto probabilmente vorrai aggiornare il numero di cellulare in base a qualche criterio, come un customer_id. In tal caso, puoi aggiungere un parametro di percorso nell'endpoint FastAPI (URL di routing):
La funzione asincrona per aggiornare il numero di cellulare prenderà customer_id insieme al numero di cellulare da aggiornare, come parametro:
Il "risultato" è un documento BSON, che viene automaticamente convertito in un dizionario Python dal motore del driver asincrono. FastAPI lo converte quindi in una risposta JSON.
Puoi anche creare una risposta personalizzata in base al risultato, nel codice FastAPI.
L'applicazione React utilizza gli hook per impostare uno stato variabile, quindi puoi semplicemente impostare la risposta nella variabile e React la visualizzerà sulla pagina front-end:
FastAPI utilizza le dipendenze per fornire supporto integrato per la gestione delle autorizzazioni e il controllo degli accessi basato sui ruoli, ad esempio per l'autenticazione di un utente o l'autorizzazione dell'accesso a un percorso.
Interfaccia ASGI (Asincrono Server Gateway Interface)
ASGI fornisce le specifiche per creare applicazioni e server asincroni in Python. Ciò consente alle applicazioni di eseguire operazioni di I/O come query di database o richieste di rete senza bloccare altre operazioni. ASGI è progettato per gestire connessioni di lunga durata oltre alle consuete richieste e risposte HTTP. Questa funzionalità li rende utili per le applicazioni in tempo reale, dove è necessaria la comunicazione bidirezionale tra client e server.
Server web Uvicorn
Uvicorn è un server web asincrono basato sulle specifiche ASGI. Fornisce prestazioni elevate ed è particolarmente adatto per gestire in modo efficiente carichi applicativi elevati. Gli sviluppatori Python che utilizzano Fast API possono utilizzare il server uvicorn per distribuire e gestire le proprie applicazioni. Uvicorn supporta anche i socket web. FastAPI è compatibile con pochi altri server, come Hypercorn e Quart, ma uvicorn è preferito per le sue prestazioni e stabilità.
Driver per motori asincroni
motor è un driver asincrono per connettere FastAPI (Python) e MongoDB. È simile al driver pymongo ma per applicazioni asincrone. Il motore funziona bene anche con la versione community o enterprise del server MongoDB. Per ulteriori informazioni sul motore, visita la pagina della documentazione.
Piattaforma dati MongoDB
MongoDB è il layer di dati che archivia e recupera i dati come richiesto dall'applicazione.
MongoDB è un database di documenti che archivia i dati in un formato simile a JSON noto come BSON (Binary JavaScript Object Notation). Grazie al suo modello di documento, MongoDB offre un'elevata flessibilità nell'archiviazione dei dati e si adatta facilmente a qualsiasi modifica dello schema.
I database MongoDB sono disponibili in varie versioni: il database MongoDB enterprise, il database MongoDB community e il database cloud (Atlas). Con MongoDB Atlas, non è necessario installare nulla. Basta creare un account gratuito e puoi avviare un cluster.
MongoDB offre opzioni efficienti di modellazione dei dati per ottimizzare le prestazioni mantenendo intatte la coerenza e la flessibilità dei dati. Ad esempio, per creare modelli di dati per l'applicazione stack FARM, è possibile definire il carico di lavoro e identificare i diversi tipi di relazioni tra le entità principali: una relazione 1:1, 1:molti o molti:molti. In base a ciò, puoi decidere la struttura del tuo documento. MongoDB segue una semplice regola secondo cui i dati a cui si accede insieme devono essere archiviati insieme. Puoi scegliere di incorporare tutti i dettagli rilevanti di un'entità in un singolo documento, o normalizzare i dati e farvi riferimento utilizzando identificatori (come in un relational database).
MongoDB Atlas è una piattaforma di sviluppo dati cloud che fornisce funzionalità complete per gestire applicazioni moderne — ad esempio, alta disponibilità e tolleranza agli errori integrate, backup e ripristino automatizzati, scalabilità verticale e orizzontale, provisioning, configurazione e patching automatizzati dei server.
Il ricco framework di aggregazione di MongoDB, abbinato alle vaste librerie scientifiche di Python, è più adatto per i casi d'uso dell'AI e dell'apprendimento automatico di oggi, come il rilevamento di frodi, l'analisi dei dati in tempo reale, le raccomandazioni mirate dei clienti, l'analisi del comportamento degli utenti e così via. L'utilizzo di MongoDB Atlas ti consente di accedere a funzionalità aggiuntive come Atlas Search, MongoDB Charts, App Services, connettore per strumenti di BI, data federation, stream processing e molto altro ancora.
Per creare una connessione MongoDB dal back-end FastAPI, è sufficiente impostare l'URL e quindi aprire la tabella:
Una volta stabilita la connessione e ottenuto il database, è possibile utilizzarli per eseguire qualsiasi operazione CRUD utilizzando i metodi appropriati, ad esempio il metodo update_one() che abbiamo utilizzato nella sezione FastAPI.
Puoi creare un'applicazione stack FARM completa utilizzando la nostra applicazione TODO per ricevere indicazioni sul codice end-to-end e sulla configurazione necessarie per creare la tua applicazione.
Generatore di app FastAPI full stack per sviluppatori Python
MongoDB fornisce il generatore di app FastAPI full stack per gli sviluppatori Python. In precedenza, gli sviluppatori Python dovevano integrare manualmente componenti come l'autenticazione, i test e l'integrazione nell'applicazione principale. Il generatore di app FastAPI Full Stack di MongoDB fornisce uno scheletro di app ben strutturato, semplificando così la configurazione iniziale del progetto. Alcune delle funzionalità chiave del generatore di app sono:
- Uno stack di applicazioni web completo che integra componenti front-end e back-end.
- Un sistema di autenticazione integrato.
- Strumenti operativi e di monitoraggio.
Stack FARM vs stack MERN
Sia lo stack FARM che quello MERN utilizzano React e MongoDB che offrono flessibilità e prestazioni elevate. La differenza sta nell'uso di Node.js rispetto a FastAPI e la scelta di uno dei due stack dipende dal caso d'uso aziendale o dalle preferenze personali.
- Lo stack MERN ha una curva di apprendimento più breve in quanto uno sviluppatore deve solo apprendere e scrivere codice JavaScript sia per il back-end che per il front-end, mentre per lo stack FARM, è necessario imparare anche Python. Inoltre, lo stack MERN offre un'esperienza unificata e una migliore leggibilità e manutenibilità del codice.
- Node.js gode di un maggiore supporto della community e dispone di una vasta documentazione per un gran numero di casi d'uso e domini.
Detto questo, FastAPI ottiene punteggi molto migliori quando si tratta di analisi dei dati e supporto della scienza dei dati:
- Python ha un vasto ecosistema di librerie avanzate per attività di data science e machine learning, che semplificano l'aggiunta di pipeline di analytics e di elaborazione dati nelle applicazioni web. Sebbene Node.js supporti queste librerie, non sono esaustive come le librerie Python.
- Il design intuitivo delle API di FastAPI, la generazione automatica della documentazione OpenAPI e il supporto integrato per la convalida dei dati semplificano lo sviluppo delle API e lo rendono accessibile agli sviluppatori di tutti i livelli. Node.js potrebbe essere difficile da imparare per un principiante a causa dei concetti di programmazione basata su callback e della complessità della gestione delle dipendenze.
- Mentre Python è rigorosamente tipizzato, JavaScript è liberamente tipizzato, il che potrebbe causare errori di runtime.
Casi d'uso per lo stack FARM
Lo stack FARM è adatto a un'ampia gamma di casi d'uso in vari domini e settori, alcuni dei quali sono elencati di seguito:
- Creazione di siti Web e pagine Web dinamici e interattivi: sul front-end, React offre agli utenti un'esperienza interattiva e in tempo reale, mentre il back-end FastAPI consente di creare robuste REST API per gestire l'autenticazione, l'autorizzazione e le transazioni. MongoDB, grazie al suo schema flessibile, soddisfa facilmente i requisiti delle applicazioni in evoluzione e le diverse strutture dei dati, ad esempio piattaforme di e-commerce e sistemi di gestione dei contenuti.
- AI e data analytics: utilizzando la potenza del framework di aggregazione MongoDB e delle librerie Python per la scienza dei dati, lo stack FARM fornisce agli sviluppatori una solida base per creare sistemi per l’elaborazione dei dati, l’analisi in tempo reale, l’estrazione di insight e la generazione di report visivi. Il front-end React può essere utilizzato per dashboard interattivi ed esplorazione dei dati.
- Applicazioni IoT (Internet of Things): utilizzando React, gli sviluppatori possono creare un'interfaccia fluida per il monitoraggio e il controllo remoti. FastAPI gestisce servizi come l'inserimento dei dati, la comunicazione con i dispositivi e il routing. MongoDB può archiviare i sensor data, i metadati e i log e può essere utilizzato per l'analisi e il rilevamento di anomalie.
- Applicazioni di chat: le funzionalità di rendering in tempo reale di React consentono una comunicazione fluida e in tempo reale tra l'agente di chat e gli utenti. Le funzionalità di routing e il supporto websocket di FastAPI consentono di gestire le richieste HTTP di autenticazione, messaggistica in tempo reale e comunicazione BIdirezionale. L'architettura flessibile e scalabile di MongoDB lo rende particolarmente adatto per la gestione di dati di chat dinamici e in evoluzione.
Sommario
Lo stack FARM è uno stack tecnologico promettente e offre una potenza di funzionalità per creare applicazioni altamente flessibili, scalabili e performanti. Nei prossimi giorni, ci si può aspettare ulteriori innovazioni e progressi nelle tecnologie, con una maggiore attenzione al miglioramento dell'esperienza e della produttività degli sviluppatori, all'automazione e all'integrazione con altre tecnologie per facilitare nuovi casi d'uso e applicazioni. Per iniziare con lo stack FARM, guarda il tutorial di MongoDB.live.