Quickstarters
Feature Overview
Come-costruire-un-backend-per-il-Blazor?
39 min
introduzione in questo tutorial, imparerai come costruire un backend completo per un'applicazione blazor utilizzando back4app esploreremo l'integrazione delle funzionalità essenziali di back4app come la gestione del database, le funzioni cloud code, le api rest e graphql, l'autenticazione degli utenti e le query in tempo reale (live queries) per creare un backend sicuro, scalabile e robusto che comunica senza problemi con il tuo frontend blazor sfruttare i robusti servizi backend di back4app con blazor, un framework asp net core per costruire interfacce web interattive utilizzando c#, consente agli sviluppatori di accelerare lo sviluppo del backend che tu stia costruendo un'app blazor server o un'app blazor webassembly, l'integrazione senza soluzione di continuità con back4app può ridurre drasticamente i tempi di sviluppo garantendo al contempo una logica di business di alta qualità lato server alla fine di questo tutorial, avrai costruito una struttura backend sicura su misura per un'applicazione web full stack utilizzando blazor acquisirai informazioni su come gestire le operazioni sui dati, applicare controlli di sicurezza e implementare funzioni cloud, rendendo la tua applicazione web blazor robusta e scalabile prerequisiti per completare questo tutorial, avrai bisogno di un account back4app e un nuovo progetto back4app iniziare con back4app https //www back4app com/docs/get started/new parse app se non hai un account, puoi crearne uno gratuitamente segui la guida sopra per preparare il tuo progetto ambiente di sviluppo blazor di base puoi configurarlo installando l'ultima versione del net sdk da microsoft https //dotnet microsoft com/download e creando un nuovo progetto blazor utilizzando modelli come dotnet new blazorserver o dotnet new blazorwasm net sdk (versione 6 o superiore) installato assicurati di avere il net sdk per costruire e eseguire app blazor familiarità con c# e concetti di blazor documentazione ufficiale di blazor https //docs microsoft com/en us/aspnet/core/blazor/?view=aspnetcore 6 0 se sei nuovo a blazor, rivedi la documentazione ufficiale o un tutorial per principianti prima di iniziare assicurati di avere questi prerequisiti prima di iniziare per garantire un'esperienza di tutorial fluida passo 1 – impostare il progetto back4app crea un nuovo progetto il primo passo per costruire il tuo backend blazor su back4app è creare un nuovo progetto se non ne hai già creato uno, segui questi passaggi accedi al tuo account back4app clicca sul pulsante “nuova app” nel tuo dashboard di back4app dai un nome alla tua app (ad esempio, “blazor backend tutorial”) una volta creato il progetto, lo vedrai elencato nel tuo dashboard di back4app questo progetto sarà la base per tutte le configurazioni backend discusse in questo tutorial collegare il parse sdk back4app si basa sulla parse platform per gestire i tuoi dati, fornire funzionalità in tempo reale, gestire l'autenticazione degli utenti e altro ancora collegare la tua applicazione blazor a back4app comporta l'installazione del parse sdk per net e la sua inizializzazione con le credenziali dal tuo dashboard di back4app recupera le tue chiavi parse nel tuo dashboard di back4app, vai alla sezione “impostazioni app” o “sicurezza e chiavi” per trovare il tuo id applicazione e net key troverai anche il url del server parse (spesso nel formato https //parseapi back4app com ) installa il parse sdk nel tuo progetto blazor dotnet add package parse inizializza parse nella tua applicazione blazor tipicamente, configureresti l'inizializzazione nel program cs o in una classe di servizio dedicata program cs using parse; var builder = webapplication createbuilder(args); // inizializza parse parseclient initialize(new parseclient configuration { applicationid = "your application id", windowskey = "your dotnet key", server = "https //parseapi back4app com" }); var app = builder build(); // resto della tua configurazione questa configurazione garantisce che ogni volta che utilizzi parse nella tua applicazione blazor, sia preconfigurato per connettersi alla tua specifica istanza di back4app completando questo passaggio, hai stabilito una connessione sicura tra il tuo frontend blazor e il backend di back4app, aprendo la strada per eseguire operazioni sul database, gestione degli utenti e altro passo 2 – configurazione del database salvataggio e query dei dati con il tuo progetto back4app configurato e il parse sdk integrato nella tua app blazor, puoi ora iniziare a salvare e recuperare dati il modo più semplice per creare un record è utilizzare la parseobject classe somedataservice cs using parse; using system threading tasks; public class somedataservice { public async task\<parseobject> createtodoitemasync(string title, bool iscompleted) { var todo = new parseobject("todo"); todo\["title"] = title; todo\["iscompleted"] = iscompleted; try { await todo saveasync(); console writeline("todo saved successfully " + todo objectid); return todo; } catch (exception ex) { console writeline("error saving todo " + ex message); return null; } } public async task\<ilist\<parseobject>> fetchtodosasync() { var query = new parsequery\<parseobject>("todo"); try { var results = await query findasync(); console writeline("fetched todo items " + results count); return results; } catch (exception ex) { console writeline("error fetching todos " + ex message); return null; } } } in alternativa, puoi utilizzare gli endpoint api rest di back4app per le operazioni progettazione dello schema e tipi di dati per impostazione predefinita, parse consente la creazione di schemi al volo , ma puoi anche definire le tue classi e i tuoi tipi di dati nel dashboard di back4app per avere maggiore controllo naviga nella sezione “database” nel tuo dashboard di back4app crea una nuova classe (ad esempio, “todo”) e aggiungi colonne pertinenti, come titolo (string) e iscompleted (boolean) back4app supporta anche vari tipi di dati string , number , boolean , object , date , file , pointer, array, relation , geopoint , e polygon puoi scegliere il tipo appropriato per ciascun campo se preferisci, puoi anche lasciare che parse crei automaticamente queste colonne quando salvi per la prima volta un oggetto dalla tua app blazor back4app offre un agente ai che può aiutarti a progettare il tuo modello di dati apri l'agente ai dal tuo app dashboard o nel menu descrivi il tuo modello di dati in linguaggio semplice (ad esempio, “per favore, crea una nuova app todo su back4app con uno schema di classe completo ”) lascia che l'agente ai crei lo schema per te utilizzare l'agente ai può farti risparmiare tempo nella configurazione della tua architettura dati e garantire coerenza nella tua applicazione dati relazionali se hai dati relazionali ad esempio, un oggetto categoria che punta a più elementi todo puoi utilizzare puntatori o relazioni in parse il processo è simile a reactjs ma utilizzando oggetti net somedataservice cs (continuazione) public async task\<parseobject> createtaskforcategoryasync(string categoryobjectid, string title) { var todo = new parseobject("todo"); // crea un puntatore alla categoria var categorypointer = parseobject createwithoutdata("category", categoryobjectid); todo\["title"] = title; todo\["category"] = categorypointer; try { await todo saveasync(); return todo; } catch (exception ex) { console writeline("errore nella creazione del task con relazione alla categoria " + ex message); return null; } } quando interroghi, includi i dati del puntatore somedataservice cs (continuation) public async task\<ilist\<parseobject>> fetchtodoswithcategoryasync() { var query = new parsequery\<parseobject>("todo") include("category"); try { var todoswithcategory = await query findasync(); return todoswithcategory; } catch (exception ex) { console writeline("error fetching todos with category " + ex message); return null; } } query in tempo reale per aggiornamenti in tempo reale in un'app blazor server, considera di utilizzare la connessione signalr per le query in tempo reale sebbene il parse net sdk supporti le query in tempo reale, integrarle direttamente all'interno di un'applicazione blazor potrebbe richiedere una configurazione aggiuntiva con signalr per la comunicazione in tempo reale abilita le query in tempo reale nel tuo dashboard di back4app sotto le impostazioni del server assicurati che “query in tempo reale” sia attivato configura il client per le query in tempo reale in net se necessario tuttavia, per le app blazor, sfruttare signalr potrebbe essere più idiomatico per le connessioni lato server a causa della complessità di configurare le query in tempo reale all'interno di blazor e delle potenziali limitazioni del parse net sdk in blazor webassembly, potrebbe essere necessario implementare un servizio lato server che colleghi le query in tempo reale di parse con i client signalr passo 3 – applicare la sicurezza con acl e clp meccanismo di sicurezza di back4app back4app prende sul serio la sicurezza fornendo liste di controllo degli accessi (acl) e permessi a livello di classe (clp) queste funzionalità ti consentono di limitare chi può leggere o scrivere dati su base per oggetto o per classe, garantendo che solo gli utenti autorizzati possano modificare i tuoi dati liste di controllo degli accessi (acl) un acl è applicato a singoli oggetti per determinare quali utenti, ruoli o il pubblico possono eseguire operazioni di lettura/scrittura ad esempio somedataservice cs (acl example) public async task\<parseobject> createprivatetodoasync(string title, parseuser owneruser) { var todo = new parseobject("todo"); todo\["title"] = title; // create an acl granting read/write access only to the owner var acl = new parseacl(owneruser); acl publicreadaccess = false; acl publicwriteaccess = false; todo acl = acl; try { await todo saveasync(); return todo; } catch (exception ex) { console writeline("error saving private todo " + ex message); return null; } } quando salvi l'oggetto, ha un acl che impedisce a chiunque tranne l'utente specificato di leggerlo o modificarlo permessi a livello di classe (clp) i clp governano i permessi predefiniti di un'intera classe, come se la classe sia leggibile o scrivibile pubblicamente, o se solo determinati ruoli possano accedervi vai al tuo dashboard di back4app , seleziona la tua app e apri la database sezione seleziona una classe (ad esempio, “todo”) apri la scheda dei permessi a livello di classe configura i tuoi predefiniti, come “richiede autenticazione” per la lettura o la scrittura, o “nessun accesso” per il pubblico questi permessi impostano la base, mentre gli acl affinano i permessi per singoli oggetti un modello di sicurezza robusto combina tipicamente sia i clp (restrizioni ampie) che gli acl (restrizioni dettagliate per oggetto) per ulteriori informazioni, vai a linee guida sulla sicurezza dell'app https //www back4app com/docs/security/parse security passo 4 – scrivere e distribuire funzioni cloud il cloud code è una funzionalità dell'ambiente parse server che consente di eseguire codice javascript personalizzato sul lato server senza la necessità di gestire i propri server o infrastruttura scrivendo cloud code, puoi estendere il tuo backend back4app con logica aziendale aggiuntiva, validazioni, trigger e integrazioni che vengono eseguite in modo sicuro ed efficiente all'interno del parse server come funziona quando scrivi cloud code, di solito posizioni le tue funzioni javascript, trigger e eventuali moduli npm richiesti in un main js (o app js ) file questo file viene quindi distribuito al tuo progetto back4app, che viene eseguito all'interno dell'ambiente parse server poiché queste funzioni e trigger vengono eseguiti sul server, puoi fidarti di loro per gestire logiche riservate, elaborare dati sensibili o effettuare chiamate api solo backend processi che potresti non voler esporre direttamente al client tutto il cloud code per la tua app back4app viene eseguito all'interno del parse server gestito da back4app, quindi non devi preoccuparti della manutenzione del server, della scalabilità o della fornitura ogni volta che aggiorni e distribuisci il tuo file main js, il server parse in esecuzione viene aggiornato con il tuo codice più recente struttura del file main js un tipico main js potrebbe contenere dichiarazioni require per eventuali moduli necessari (pacchetti npm, moduli node integrati o altri file di codice cloud) definizioni di funzioni cloud utilizzando parse cloud define() trigger come parse cloud beforesave() , parse cloud aftersave() , ecc moduli npm che hai installato (se necessario) main js // main js // 1 import necessary modules and other cloud code files const axios = require('axios'); const report = require(' /reports'); // 2 define a custom cloud function parse cloud define('fetchexternaldata', async (request) => { const url = request params url; if (!url) { throw new error('url parameter is required'); } const response = await axios get(url); return response data; }); // 3 example of a beforesave trigger parse cloud beforesave('todo', (request) => { const todo = request object; if (!todo get('title')) { throw new error('todo must have a title'); } }); con la possibilità di installare e utilizzare moduli npm, il codice cloud diventa incredibilmente flessibile, permettendoti di integrarti con api esterne, eseguire trasformazioni dei dati o eseguire logiche complesse lato server casi d'uso tipici logica aziendale ad esempio, aggregare dati per analisi o eseguire calcoli prima di salvare nel database validazioni dei dati assicurarsi che determinati campi siano presenti o che un utente abbia le autorizzazioni corrette prima di salvare o eliminare un record attivatori eseguire azioni quando i dati cambiano (ad es , inviare una notifica quando un utente aggiorna il proprio profilo) integrazioni connettersi con api o servizi di terze parti applicazione della sicurezza validare e sanificare gli input per applicare la sicurezza prima di eseguire operazioni sensibili distribuisci la tua funzione di seguito è riportata una semplice funzione di cloud code che calcola la lunghezza di una stringa di testo inviata dal client main js // main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); distribuzione tramite il back4app cli https //www back4app com/docs/local development/parse cli 1 installa il cli per linux/macos curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash per windows scarica il b4a exe https //github com/back4app/parse cli/releases/download/release 3 3 1/b4a exe file dalla pagina delle versioni 2 configura la tua chiave account https //www back4app com/docs/local development/parse cli#f cxi b4a configure accountkey 3 distribuisci il tuo codice cloud b4a deploy distribuzione tramite il dashboard nel dashboard della tua app, vai su cloud code > funzioni copia/incolla la funzione nell' main js editor clicca su distribuisci chiamare la tua funzione da blazor utilizzando il parse net sdk somedataservice cs (calling function) public async task\<int?> gettextlengthasync(string text) { try { var result = await parsecloud callfunctionasync\<dictionary\<string, object>>("calculatetextlength", new dictionary\<string, object> { { "text", text } }); if(result != null && result containskey("length")) return convert toint32(result\["length"]); return null; } catch(exception ex) { console writeline("error calling cloud function " + ex message); return null; } } puoi anche chiamarlo tramite rest o graphql come mostrato nel tutorial di reactjs passo 5 – configurazione dell'autenticazione utente autenticazione utente in back4app back4app sfrutta la parse user classe come base per l'autenticazione per impostazione predefinita, parse gestisce l'hashing delle password, i token di sessione e lo storage sicuro questo significa che non devi impostare manualmente flussi di sicurezza complessi impostazione dell'autenticazione utente in un'applicazione blazor, puoi creare un nuovo utente con authservice cs using parse; using system threading tasks; public class authservice { public async task signupuserasync(string username, string password, string email) { var user = new parseuser() { username = username, password = password, email = email }; try { await user signupasync(); console writeline("user signed up successfully!"); } catch (exception ex) { console writeline("error signing up user " + ex message); } } public async task loginuserasync(string username, string password) { try { var user = await parseuser loginasync(username, password); console writeline("user logged in " + user username); } catch (exception ex) { console writeline("error logging in user " + ex message); } } } gestione delle sessioni dopo un login riuscito, parse crea un token di sessione che viene memorizzato nell'oggetto utente nella tua app blazor, puoi accedere all'utente attualmente connesso somecomponent razor cs var currentuser = parseuser currentuser; if (currentuser != null) { console writeline("currently logged in user " + currentuser username); } else { console writeline("no user is logged in"); } parse gestisce automaticamente le sessioni basate su token in background, ma puoi anche gestirle o revocarle manualmente per disconnettersi authservice cs (logout) public async task logoutasync() { await parseuser logoutasync(); console writeline("user logged out"); } integrazione del login sociale back4app e parse possono integrarsi con i provider oauth più popolari, come google o facebook la configurazione può variare e spesso comporta impostazioni lato server o pacchetti aggiuntivi fare riferimento alla documentazione sul login sociale https //www back4app com/docs/platform/sign in with apple per istruzioni dettagliate poiché le app blazor server funzionano su asp net core, potresti integrare il login sociale utilizzando i provider di identità di asp net core insieme a parse per un'autenticazione senza soluzione di continuità verifica email e ripristino password per abilitare la verifica email e il ripristino della password naviga nelle impostazioni email nel tuo dashboard di back4app abilita la verifica email per garantire che i nuovi utenti verifichino la proprietà dei loro indirizzi email configura l'indirizzo del mittente , i modelli email e il tuo dominio personalizzato se desiderato queste funzionalità migliorano la sicurezza dell'account e l'esperienza dell'utente convalidando la proprietà delle email da parte degli utenti e fornendo un metodo sicuro di recupero della password passo 6 – gestione dello storage dei file caricamento e recupero dei file parse include la parsefile classe per gestire i caricamenti di file, che back4app memorizza in modo sicuro fileservice cs using parse; using system; using system threading tasks; public class fileservice { public async task\<string> uploadimageasync(byte\[] filedata, string filename) { var parsefile = new parsefile(filename, filedata); try { await parsefile saveasync(); console writeline("file saved " + parsefile url); return parsefile url; } catch (exception ex) { console writeline("error uploading file " + ex message); return null; } } } per allegare il file a un oggetto fileservice cs (continued) public async task\<parseobject> createphotoobjectasync(byte\[] filedata, string filename) { var photo = new parseobject("photo"); var parsefile = new parsefile(filename, filedata); photo\["imagefile"] = parsefile; try { await photo saveasync(); return photo; } catch (exception ex) { console writeline("error creating photo object " + ex message); return null; } } recupero dell'url del file somecomponent razor cs var imagefile = photo get\<parsefile>("imagefile"); var imageurl = imagefile url; puoi visualizzare questo imageurl nei tuoi componenti blazor impostandolo come sorgente di un \<img> tag sicurezza dei file parse server fornisce configurazioni flessibili per gestire la sicurezza del caricamento dei file usa acl sui parsefiles o imposta configurazioni a livello di server secondo necessità passo 7 – pianificazione dei compiti con cloud jobs cloud jobs cloud jobs in back4app ti permettono di pianificare ed eseguire compiti di routine sul tuo backend come pulire dati obsoleti o inviare un'email di riepilogo giornaliero un tipico cloud job potrebbe apparire così main js parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); const now = new date(); const thirty days = 30 24 60 60 1000; const cutoff = new date(now thirty days); query lessthan('createdat', cutoff); try { const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; } catch (err) { throw new error('error during cleanup ' + err message); } }); distribuisci il tuo cloud code con il nuovo lavoro (tramite cli o la dashboard) vai alla dashboard di back4app > impostazioni app > impostazioni server > compiti in background pianifica il lavoro per essere eseguito quotidianamente o a qualsiasi intervallo che soddisfi le tue esigenze i cloud jobs ti consentono di automatizzare la manutenzione in background o altri processi periodici senza richiedere intervento manuale passo 8 – integrazione dei webhook i webhook consentono alla tua app back4app di inviare richieste http a un servizio esterno ogni volta che si verificano determinati eventi questo è potente per l'integrazione con sistemi di terze parti come gateway di pagamento, strumenti di email marketing o piattaforme di analisi naviga nella configurazione dei webhook nel tuo dashboard di back4app > altro > webhooks e poi clicca su aggiungi webhook imposta un endpoint (ad esempio, https //your external service com/webhook endpoint https //your external service com/webhook endpoint ) configura i trigger per specificare quali eventi nelle tue classi back4app o nelle funzioni cloud code attiveranno il webhook ad esempio, se vuoi notificare un canale slack ogni volta che viene creato un nuovo todo crea un'app slack che accetta webhook in entrata copia l'url del webhook di slack nel tuo dashboard di back4app, imposta l'endpoint su quell'url slack per l'evento “nuovo record nella classe todo ” puoi anche aggiungere intestazioni http personalizzate o payload se necessario puoi anche definire webhook nel cloud code effettuando richieste http personalizzate nei trigger come beforesave, aftersave passo 9 – esplorare il pannello di amministrazione di back4app il back4app admin app è un'interfaccia di gestione basata sul web progettata per utenti non tecnici per eseguire operazioni crud e gestire attività di dati di routine senza scrivere alcun codice fornisce un modello centrico , interfaccia user friendly che semplifica l'amministrazione del database, la gestione dei dati personalizzati e le operazioni a livello aziendale abilitare l'app di amministrazione abilitalo andando su app dashboard > altro > app di amministrazione e cliccando sul pulsante “abilita app di amministrazione” crea un primo utente amministratore (nome utente/password), che genera automaticamente un nuovo ruolo (b4aadminuser) e classi (b4asetting, b4amenuitem e b4acustomfield) nello schema della tua app scegli un sottodominio per accedere all'interfaccia di amministrazione e completare la configurazione accedi utilizzando le credenziali di amministratore che hai creato per accedere al tuo nuovo dashboard dell'app di amministrazione una volta abilitata, l'app di amministrazione di back4app rende facile visualizzare, modificare o rimuovere record dal tuo database senza richiedere l'uso diretto del parse dashboard o del codice backend conclusione seguendo questo tutorial completo, hai creato un backend sicuro per un'app blazor su back4app configurato un database con schemi di classe, tipi di dati e relazioni integrato query in tempo reale dove applicabile per aggiornamenti immediati dei dati applicato misure di sicurezza utilizzando acl e clp per proteggere e gestire l'accesso ai dati implementato funzioni di cloud code per eseguire logica aziendale personalizzata sul lato server impostato l'autenticazione degli utenti con supporto per la verifica dell'email e il ripristino della password gestito caricamenti di file e recupero, con controlli di sicurezza dei file opzionali pianificato cloud jobs per attività di background automatizzate utilizzato webhook per integrarsi con servizi esterni esplorato il pannello di amministrazione di back4app per la gestione dei dati con un solido frontend blazor e un robusto backend back4app, sei ora ben attrezzato per sviluppare applicazioni web ricche di funzionalità, scalabili e sicure continua a esplorare funzionalità più avanzate, integra la tua logica aziendale e sfrutta la potenza di back4app per risparmiare innumerevoli ore nella gestione di server e database buon coding! prossimi passi crea un'app blazor pronta per la produzione estendendo questo backend per gestire modelli di dati più complessi, strategie di caching e ottimizzazioni delle prestazioni integra funzionalità avanzate come flussi di autenticazione specializzati, controllo degli accessi basato sui ruoli o api esterne controlla la documentazione ufficiale di back4app per approfondimenti su sicurezza avanzata, ottimizzazione delle prestazioni e analisi dei log esplora altri tutorial su applicazioni di chat in tempo reale, dashboard iot o servizi basati sulla posizione combina le tecniche apprese qui con api di terze parti per creare applicazioni complesse e reali