Quickstarters
Feature Overview
Come costruire un backend per SwiftUI?
42 min
introduzione in questo tutorial, imparerai come costruire un backend completo per un swiftui app ios utilizzando back4app ti mostreremo come integrare il parse swift sdk nel tuo progetto swiftui e sfruttare le funzionalità chiave 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—per creare un backend sicuro e scalabile questo approccio ti aiuta a memorizzare i dati in modo sicuro, eseguire operazioni lato server senza dover configurare la tua infrastruttura, e scalare facilmente la tua app ios o app web secondo necessità vedrai anche come la rapida configurazione e l'ambiente intuitivo di back4app possano ridurre drasticamente il tempo e lo sforzo rispetto alla configurazione manuale del tuo server e database alla fine, comprenderai come costruire un backend per swiftui che può essere esteso a un ambiente di produzione o integrato con logica e api personalizzate iniziamo a creare un robusto, backend scalabile con un sovraccarico minimo! requisiti 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 swiftui di base avrai bisogno di xcode installato sul tuo computer e di un progetto di base swiftui o ios configurato swift package manager o cocoapods per aggiungere il parse swift sdk documentazione del parse swift sdk https //github com/netreconlab/parse swift familiarità con swift e swiftui se sei nuovo in swiftui, rivedi documentazione di swiftui di apple https //developer apple com/documentation/swiftui prima di iniziare assicurati che tutto sia in ordine prima di iniziare avere il tuo progetto back4app configurato e il tuo ambiente locale swiftui pronto ti aiuterà a seguire più facilmente passo 1 – configurazione del progetto back4app crea un nuovo progetto il primo passo per costruire il tuo backend swiftui 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, “swiftui backend tutorial”) una volta creato il progetto, lo vedrai elencato nel tuo dashboard di back4app questo progetto sarà la base per tutte le configurazioni del backend discusse in questo tutorial collegare il parse swift 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 swiftui a back4app implica installare il parse swift sdk e inizializzarlo 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” della tua app per trovare il tuo id applicazione e chiave client (o chiave javascript) troverai anche il url del server parse (spesso nel formato https //parseapi back4app com ) installa il parse swift sdk se utilizzi swift package manager , apri il tuo progetto in xcode e poi file → aggiungi pacchetti → inserisci l'url https //github com/netreconlab/parse swift git scegli “fino alla prossima maggiore” dalle regole di versione e conferma se utilizzi cocoapods pod 'parseswiftog' inizializza parse nella tua app ad esempio, nella tua app struct @main struct myapp app { init() { do { try await parseswift initialize( applicationid "your app id", clientkey "your client key", serverurl url(string "https //parseapi back4app com")! ) } catch { print("error initializing parse \\(error)") } } var body some scene { windowgroup { contentview() } } } completando questo passaggio, hai stabilito una connessione sicura tra il tuo front end swiftui e il backend di back4app tutte le richieste e le transazioni di dati sono gestite dal parse swift sdk, riducendo la complessità delle chiamate rest o graphql manuali (anche se puoi comunque usarle quando necessario) passo 2 – configurazione del database salvataggio e query dei dati con il tuo progetto back4app configurato e il parse swift sdk integrato, puoi ora iniziare a salvare e recuperare dati di seguito è riportato un semplice parseobject esempio supponiamo di avere una todo struct import parseswift struct todo parseobject { // parseobject conformance var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom properties var title string? var iscompleted bool? } salvataggio di un nuovo todo func createtodoitem(title string, iscompleted bool) async { var todo = todo() todo title = title todo iscompleted = iscompleted do { let savedtodo = try await todo save() print("todo saved successfully \\(savedtodo)") } catch { print("error saving todo \\(error)") } } query di tutti i todos func fetchtodos() async { do { let todos = try await todo query() find() print("fetched todos \\(todos)") } catch { print("error fetching todos \\(error)") } } in alternativa, puoi utilizzare gli endpoint rest di back4app , o graphql curl x post \\ h "x parse application id your application id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"title" "buy groceries", "iscompleted" false}' \\ https //parseapi back4app com/classes/todo graphql mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } avere più opzioni (parse swift sdk, rest, graphql) ti consente di scegliere l'approccio che funziona meglio per il tuo flusso di lavoro 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 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 title (string) e iscompleted (boolean) back4app supporta vari tipi di dati string , number , boolean , object , date , file , pointer , array , relation , geopoint , e polygon puoi scegliere il tipo appropriato per ciascun campo back4app fornisce anche un ai agent che può aiutarti a progettare il tuo modello di dati apri l'ai agent dal tuo app dashboard descrivi il tuo modello di dati in linguaggio semplice (ad esempio, “per favore crea un nuovo schema di classe todo ”) lascia che l'ai agent generi lo schema per te dati relazionali se hai dati relazionali—diciamo, un category oggetto che punta a più todo elementi—puoi usare pointers o relations in parse ad esempio struct category parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var name string? } struct todo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var title string? var category pointer\<category>? } func createtodowithcategory(categoryid string, title string) async { var todo = todo() todo title = title // construct pointer let categorypointer = pointer\<category>(objectid categoryid) todo category = categorypointer do { try await todo save() } catch { print("error creating todo with category relationship \\(error)") } } quando si interroga, puoi anche includere i dati dei puntatori let query = todo query() include("category") do { let todoswithcategory = try await query find() print("todos with category \\(todoswithcategory)") } catch { print("error fetching todos \\(error)") } query in tempo reale per aggiornamenti in tempo reale, back4app fornisce query in tempo reale nella tua app swiftui, puoi iscriverti ai cambiamenti in una classe specifica abilita le query in tempo reale nel tuo dashboard di back4app sotto impostazioni del server iscriviti nel codice // example snippet using the parse swift subscription system task { let subscription = try todo query() subscribecallback() // react to events for await event in subscription { switch event { case entered(let todo) print("new todo entered \\(todo)") case updated(let todo) print("todo updated \\(todo)") case left(let todo) print("todo deleted or left subscription \\(todo)") default break } } } ogni volta che un todo viene creato, aggiornato o eliminato sul server, la tua app viene notificata in tempo reale questa funzionalità è molto utile per app collaborative o dinamiche che richiedono una sincronizzazione immediata dei dati passo 3 – applicare la sicurezza con acl e clp meccanismo di sicurezza di back4app back4app fornisce access control lists (acls) e class level permissions (clps) per una robusta sicurezza dei dati questi ti permettono 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 access control lists (acls) un acl è applicato a oggetti individuali ad esempio, per garantire che solo un particolare utente possa leggere/scrivere un todo func createprivatetodo(title string, user user) async { var todo = todo() todo title = title var acl = parseacl() // grant read/write to the owner only acl setreadaccess(true, for user) acl setwriteaccess(true, for user) todo acl = acl do { let saved = try await todo save() print("private todo saved \\(saved)") } catch { print("error saving private todo \\(error)") } } class level permissions (clps) clps governano i valori predefiniti di un'intera classe, come se la classe sia leggibile o scrivibile pubblicamente, o se solo determinati ruoli possano accedervi vai al dashboard di back4app e seleziona la tua app apri la database sezione, seleziona una classe (ad es , todo ) apri le class level permissions scheda configura i valori predefiniti come “richiede autenticazione” o “nessun accesso ” queste autorizzazioni impostano una base ampia, mentre le acl ti consentono di affinare la sicurezza a livello di oggetto combinare entrambi garantisce un modello di sicurezza robusto per maggiori dettagli, vedere linee guida sulla sicurezza delle app https //www back4app com/docs/security/parse security passo 4 – scrivere e distribuire funzioni cloud il cloud code ti consente di eseguire codice personalizzato lato server in swift (o javascript) senza gestire server è ideale per aggiungere logica aziendale, convalide dei dati, trigger o integrazioni backend che non dovrebbero essere eseguite dal client come funziona scrivi il tuo cloud code in un file come main js (javascript) o sfrutta l'ambiente cloud code basato su swift distribuisci nel tuo progetto back4app il codice viene eseguito nell'ambiente di parse server, quindi non è necessario mantenere un proprio server chiama il tuo cloud code dal client tramite l'sdk swift, rest o graphql casi d'uso tipici logica aziendale convalide dei dati complesse, calcoli dei campi o integrazioni esterne trigger dei dati esegui logica quando un oggetto viene salvato, aggiornato o eliminato sicurezza proteggi operazioni sensibili dal client eseguendole lato server esempio di funzione di seguito è riportato un esempio di javascript cloud code (poiché cloud code utilizza principalmente js su back4app) che calcola la lunghezza del testo 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 cli installa il back4app cli https //www back4app com/docs/local development/parse cli configura la tua chiave account b4a configure accountkey distribuisci cloud code b4a deploy chiamare la tua funzione da swift struct cloudfunction { static func calculatetextlength(text string) async throws > int { do { if let result = try await parsecloud callfunction("calculatetextlength", with \["text" text]) as? \[string any], let length = result\["length"] as? int { return length } } catch { throw error } return 0 } } task { do { let len = try await cloudfunction calculatetextlength(text "hello back4app") print("text length \\(len)") } catch { print("error calling cloud function \\(error)") } } via rest curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"text" "hello back4app"}' \\ https //parseapi back4app com/functions/calculatetextlength passaggio 5 – configurazione dell'autenticazione utente autenticazione utente in back4app back4app utilizza la parseuser classe per gestire l'autenticazione sicura l'hashing delle password, i token di sessione e i dati vengono gestiti automaticamente, permettendoti di concentrarti sulla logica dell'app impostazione dell'autenticazione utente registrati come nuovo utente struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // required fields var username string? var email string? var emailverified bool? var password string? var authdata \[string \[string string]?]? } func signupuser(username string, password string, email string) async { var newuser = user() newuser username = username newuser password = password newuser email = email do { try await newuser signup() print("user signed up successfully!") } catch { print("error signing up user \\(error)") } } struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // required fields var username string? var email string? var emailverified bool? var password string? var authdata \[string \[string string]?]? } func signupuser(username string, password string, email string) async { var newuser = user() newuser username = username newuser password = password newuser email = email do { try await newuser signup() print("user signed up successfully!") } catch { print("error signing up user \\(error)") } } struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // required fields var username string? var email string? var emailverified bool? var password string? var authdata \[string \[string string]?]? } func signupuser(username string, password string, email string) async { var newuser = user() newuser username = username newuser password = password newuser email = email do { try await newuser signup() print("user signed up successfully!") } catch { print("error signing up user \\(error)") } } accedi a un utente esistente func loginuser(username string, password string) async { do { let user = try await user login(username username, password password) print("user logged in \\(user)") } catch { print("error logging in user \\(error)") } } token di sessione vengono gestiti automaticamente da parse puoi disconnetterti func logout() async { do { try await user logout() print("user logged out ") } catch { print("error logging out \\(error)") } } integrazione del login sociale le integrazioni con google , apple , facebook , ecc , sono possibili con configurazioni aggiuntive controlla la documentazione sul login sociale https //www back4app com/docs/platform/sign in with apple per ulteriori dettagli verifica dell'email e reimpostazione della password abilita la verifica dell'email nel tuo dashboard di back4app e configura le email di reimpostazione della password in modo che gli utenti possano recuperare i loro account in modo sicuro per le reimpostazioni della password try await user passwordreset(email "user\@example com") passaggio 6 – gestione dello storage dei file caricamento e recupero dei file parse include parsefile per gestire i caricamenti dei file func uploadimage(filedata data) async { let parsefile = parsefile(name "photo jpg", data filedata) do { let savedfile = try await parsefile save() print("file saved at \\(savedfile url ?? "no url")") } catch { print("error uploading file \\(error)") } } allegalo a un parseobject struct photo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var imagefile parsefile? } func createphotoobject(filedata data) async { var photo = photo() photo imagefile = parsefile(name "image jpg", data filedata) do { = try await photo save() } catch { print("error saving photo object \\(error)") } } sicurezza dei file per impostazione predefinita, i file sono accessibili tramite un url pubblico puoi configurare la sicurezza dei file utilizzando le impostazioni del server parse https //www back4app com/docs/platform/file storage per controlli più rigorosi sui file, assicurati che solo gli utenti autenticati o i ruoli specificati possano caricare o recuperare file passaggio 7 – pianificazione dei compiti con cloud jobs cloud jobs ti permettono di pianificare ed eseguire compiti ricorrenti come la pulizia dei dati o l'invio di email // main js (javascript cloud code) 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); } }); dopo il deployment, pianificalo tramite il back4app dashboard sotto impostazioni del server > lavori in background passaggio 8 – integrazione dei webhook i webhook consentono alla tua app back4app di inviare richieste http a servizi esterni (come stripe) ogni volta che si verificano determinati eventi questo è utile per collegarsi a strumenti di terze parti o ad altre integrazioni lato server vai a webhook nel tuo dashboard back4app > altro > webhooks aggiungi un endpoint (es , https //your service com/webhook ) configura quali eventi (es , nuovo record nella classe todo) attiveranno il webhook ad esempio, potresti inviare un messaggio slack ogni volta che un utente crea un nuovo todo questo ti aiuta a mantenere i servizi esterni sincronizzati con i tuoi dati di back4app passo 9 – esplorare il pannello di amministrazione di back4app l' app di amministrazione di back4app è un'interfaccia di gestione basata sul web per utenti non tecnici per eseguire operazioni crud sui tuoi dati fornisce un'interfaccia utente intuitiva che è separata dal dashboard di parse, rendendo più facile gestire i dati in produzione abilitare l'app di amministrazione vai al tuo dashboard dell'app > altro > app di amministrazione e clicca su “abilita app di amministrazione ” crea un utente amministratore , che genera automaticamente un ruolo di amministratore e classi associate scegli un sottodominio per l'interfaccia di amministrazione, quindi accedi per gestire i tuoi dati tramite un'interfaccia utente semplice e intuitiva conclusione seguendo questa guida completa, hai imparato come costruire un backend per swiftui utilizzando back4app e il parse swift sdk come memorizzare i dati in modo sicuro con schemi di classi personalizzate e relazioni come integrare query in tempo reale (live queries) per aggiornamenti immediati dei dati come applicare misure di sicurezza utilizzando acl e clp per proteggere e gestire l'accesso ai dati come eseguire la logica aziendale tramite cloud code come gestire l'archiviazione dei file , l'autenticazione e la pianificazione di attività in background con cloud jobs come integrare la tua app con servizi esterni utilizzando webhook con queste competenze, puoi costruire un app ios o app web che sia facile da gestire, sicura e pronta a scalare esplora funzionalità più avanzate—come permessi basati su ruoli, notifiche push o caching avanzato puoi anche integrare altre api o personalizzare il tuo cloud code per adattarlo a casi d'uso specializzati buon coding , e divertiti a costruire fantastiche app su back4app! prossimi passi app swiftui pronta per la produzione estendi questo backend per gestire modelli di dati più complessi, caching e miglioramenti delle prestazioni funzionalità avanzate approfondisci l'autenticazione specializzata, l'accesso basato su ruoli o le integrazioni api di terze parti (come stripe) esplora la documentazione ufficiale di back4app per approfondimenti su sicurezza lato server , analisi dei log e ottimizzazione avanzata del database controlla tutorial aggiuntivi chat in tempo reale, servizi basati sulla posizione o applicazioni multi tenant—combina i metodi appresi qui con api esterne per creare soluzioni sofisticate e reali