Quickstarters
Feature Overview
Come costruire un backend per Elixir?
40 min
introduzione in questo tutorial, imparerai come costruire un backend per elixir 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 elixir, che gira sulla vm erlang (beam) e sfrutta otp (erlang otp), è noto per il suo ambiente tollerante ai guasti e concorrente, che si abbina bene a back4app per formare un'infrastruttura moderna e ad alte prestazioni vedrai come la rapida configurazione di back4app e l'ambiente intuitivo possano ridurre drasticamente il tuo tempo e sforzo rispetto alla configurazione manuale di server e database questo include l'utilizzo del pattern matching, oltre a collegarsi al framework web di scelta di elixir alla fine di questo tutorial, avrai una solida base che potrai estendere in un'applicazione pronta per la produzione o migliorare con logica personalizzata e api di terze parti 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 elixir di base assicurati di avere elixir installato sul tuo computer se prevedi di utilizzare un framework web come phoenix, consulta la guida all'installazione di phoenix https //hexdocs pm/phoenix/installation html come riferimento familiarità con i concetti di elixir documentazione ufficiale di elixir https //elixir lang org/docs html se sei nuovo in elixir, rivedi queste risorse o un tutorial per principianti prima di iniziare assicurati di avere tutti questi prerequisiti in atto prima di iniziare avere il tuo progetto back4app configurato e il tuo ambiente elixir locale pronto ti aiuterà a seguire più agevolmente passo 1 – creare un nuovo progetto su back4app e connettersi crea un nuovo progetto il primo passo in come costruire un backend per elixir 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, “elixir 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 collegamento tramite rest o graphql back4app utilizza la piattaforma parse come base per elixir, al momento non esiste un sdk ufficiale di parse invece, puoi facilmente connetterti a back4app utilizzando le api rest o graphql nel tuo progetto elixir, dovrai recupera il tuo application id e rest o graphql keys dalla sezione “impostazioni app” o “sicurezza & chiavi” nel dashboard di back4app configura le richieste http utilizzando una libreria elixir come httpoison https //hex pm/packages/httpoison o tesla https //hex pm/packages/tesla ad esempio, per memorizzare le credenziali in un file di configurazione ( config/dev exs o simile) config \ my app, \ b4a, app id "your application id", rest key "your rest api key", server url "https //parseapi back4app com" puoi quindi fare riferimento a queste credenziali nel tuo codice per effettuare chiamate rest in tutta questa guida, mostreremo come interagire con il database di back4app, il sistema utente e altre funzionalità utilizzando richieste standard http o graphql passo 2 – configurazione del database creare un modello di dati in back4app, i dati sono memorizzati in classi puoi creare una nuova classe nel dashboard di back4app 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) creare un modello di dati utilizzando l'agente ai back4app fornisce anche un agente ai per aiutarti a descrivere e creare il tuo modello di dati apri l'agente ai dal tuo app dashboard o dal menu descrivi il tuo modello di dati in linguaggio semplice (ad esempio, “per favore, crea una nuova app todo con uno schema di classe completo ”) lascia che l'agente ai crei lo schema automaticamente lettura e scrittura dei dati utilizzando sdk (se applicabile) poiché elixir non ha un sdk parse ufficiale, salteremo l'uso diretto dell'sdk invece, mostreremo rest , graphql , e live queries approcci qui sotto lettura e scrittura dei dati utilizzando rest api installa un client http come httpoison nel tuo mix exs defp deps do \[ {\ httpoison, " > 1 8"} ] end poi, esegui mix deps get per creare (salvare) un oggetto todo dalla tua applicazione elixir defmodule myapp todo do @moduledoc false require logger alias myapp config def create todo(title, is completed) do url = config server url() <> "/classes/todo" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{"title" => title, "iscompleted" => is completed}) case httpoison post(url, body, headers) do {\ ok, %httpoison response{status code 201, body resp body}} > logger info("todo created #{resp body}") {\ ok, resp body} {\ ok, %httpoison response{status code status, body error body}} > logger error("error creating todo (#{status}) #{error body}") {\ error, error body} {\ error, error} > logger error("http error #{inspect(error)}") {\ error, error} end end end e per interrogare i tuoi oggetti todo def fetch todos() do url = config server url() <> "/classes/todo" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()} ] httpoison get(url, headers) end lettura e scrittura dei dati utilizzando l'api graphql puoi anche interagire tramite graphql ad esempio, creando un todo mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } in elixir, potresti inviare questo anche con un client http graph query = """ mutation { createtodo(input { fields { title "new from graphql", iscompleted false } }) { todo { objectid title } } } """ url = config server url() <> "/graphql" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] httpoison post(url, jason encode!(%{"query" => graph query}), headers) lavorare con le query live (opzionale) per aggiornamenti in tempo reale, back4app offre live queries puoi abilitare le live queries nelle impostazioni del server poiché attualmente non esiste una libreria client parse nativa per elixir, di solito ti connetteresti tramite un canale phoenix o qualsiasi client websocket personalizzato all'endpoint fornito wss\ //your subdomain here b4a io questo può essere più avanzato, richiedendo codifica personalizzata per gestire abbonamenti, messaggi, ecc passo 3 – applicare la sicurezza con acl e clp panoramica breve back4app offre liste di controllo degli accessi (acl) e permessi a livello di classe (clp) per proteggere e gestire l'accesso ai dati le acl si applicano a singoli oggetti, mentre i clp si applicano all'intera classe passo dopo passo permessi a livello di classe (clp) nel tuo dashboard di back4app, sotto database , seleziona una classe (ad esempio, “todo”) e apri la scheda permessi a livello di classe regola le impostazioni (ad esempio, “richiede autenticazione” o “nessun accesso” per il pubblico) configura acl quando crei o aggiorni un oggetto, puoi inviare i dati acl nella tua richiesta rest o graphql ad esempio, specifica il acl campo in json se hai bisogno di un controllo dettagliato per oggetto per ulteriori informazioni, visita le linee guida sulla sicurezza dell'app https //www back4app com/docs/security/parse security passo 4 – scrivere funzioni di cloud code perché cloud code il cloud code ti consente di eseguire logica lato server senza gestire i tuoi server con elixir, di solito ti affidi a otp per la concorrenza, ma qui puoi semplicemente creare cloud code in javascript in back4app per gestire la convalida, i trigger o la logica aziendale personalizzata questo codice viene eseguito su parse server, quindi puoi mantenere il tuo codice elixir focalizzato su attività client o microservizi mentre il lavoro pesante avviene nel cloud code funzione esempio nel tuo main js nel dashboard di back4app o utilizzando la cli // 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 distribuisci tramite il back4app cli https //www back4app com/docs/local development/parse cli o incollando nel dashboard sotto cloud code > funzioni e cliccando su distribuisci chiamare il cloud code da elixir, potresti usare defmodule myapp cloudfunctions do alias myapp config def calculate text length(text) do url = config server url() <> "/functions/calculatetextlength" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{text text}) httpoison post(url, body, headers) end end passo 5 – configurazione dell'autenticazione abilita o configura l'autenticazione back4app utilizza la classe user per l'autenticazione puoi gestire facilmente la registrazione, il login e il ripristino della password da elixir, di solito utilizzerai chiamate rest defmodule myapp auth do alias myapp config def sign up user(username, password, email) do url = config server url() <> "/users" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{ username username, password password, email email }) httpoison post(url, body, headers) end def log in user(username, password) do url = config server url() <> "/login?username=#{username}\&password=#{password}" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()} ] httpoison get(url, headers) end end accesso sociale back4app supporta l'integrazione con google, apple, facebook e altro ancora nella maggior parte dei casi, indirizzerai gli utenti al flusso oauth, quindi utilizzerai i token restituiti da questi fornitori per completare il login di parse vedi documentazione accesso sociale https //www back4app com/docs/platform/sign in with apple per dettagli passo 6 – gestione dello storage dei file impostazione dello storage dei file back4app memorizza i file in modo sicuro da elixir, puoi caricare file tramite rest defmodule myapp filestorage do alias myapp config require logger def upload file(file path) do file name = path basename(file path) url = config server url() <> "/files/#{file name}" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/octet stream"} ] body = file read!(file path) case httpoison post(url, body, headers) do {\ ok, %httpoison response{status code 201, body resp body}} > logger info("file uploaded #{resp body}") {\ ok, resp body} error > logger error("error uploading file #{inspect(error)}") error end end end riceverai una risposta json con l'url del file, che puoi memorizzare in una classe (ad esempio, foto ) per riferimento considerazioni sulla sicurezza puoi configurare chi può caricare file nelle impostazioni fileupload del tuo progetto back4app, limitando i caricamenti agli utenti autenticati se desiderato passo 7 – verifica email e reimpostazione password panoramica la verifica dell'email assicura che gli utenti possiedano l'indirizzo email utilizzato durante la registrazione il ripristino della password consente loro di recuperare gli account in modo sicuro entrambe le funzionalità sono integrate in back4app configurazione del dashboard di back4app abilita la verifica dell'email nelle “impostazioni app” o “autenticazione” della tua app configura il indirizzo del mittente e i modelli email abilita il ripristino della password per consentire agli utenti di reimpostare tramite un link inviato via email codice/implementazione una volta abilitato nel dashboard, puoi attivare i ripristini della password defmodule myapp auth do def request password reset(email) do url = config server url() <> "/requestpasswordreset" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{email email}) httpoison post(url, body, headers) end end passo 8 – pianificazione dei compiti con cloud jobs quali lavori nel cloud fare i lavori nel cloud ti permettono di automatizzare compiti di routine come la pulizia dei dati obsoleti o l'invio di email periodiche li scrivi in cloud code esempio // 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 codice vai al dashboard di back4app > impostazioni app > impostazioni server > lavori in background pianifica il lavoro per essere eseguito quotidianamente o con una frequenza a tua scelta passo 9 – integrazione dei webhook definizione i webhook consentono alla tua applicazione back4app di inviare richieste http a un servizio esterno (ad esempio, un canale slack o stripe) quando si verificano determinati eventi configurazione naviga verso la configurazione dei webhook nel tuo dashboard di back4app > altro > webhook imposta l'endpoint (ad esempio, https //your service com/webhook endpoint ) configura i trigger come “nuovo record nella classe todo ” esempio se desideri inviare dati a slack ogni volta che viene creato un todo, puoi aggiungere un nuovo webhook che punta al tuo url del webhook in entrata di slack puoi anche definire i webhook nel cloud code inviando richieste http personalizzate in trigger come aftersave passo 10 – esplorare il pannello di amministrazione di back4app dove trovarlo l' app di amministrazione di back4app è un'interfaccia facile da usare per gestire i tuoi dati puoi attivarla da app dashboard > altro > app di amministrazione caratteristiche crea un primo utente amministratore , che imposta il ruolo di b4aadminuser e classi aggiuntive assegna un sottodominio per accedere all'interfaccia di amministrazione accedi per visualizzare e gestire i dati in un'interfaccia semplice conclusione seguendo questo tutorial su come costruire un backend per elixir con back4app, hai creato un backend sicuro sulla piattaforma di back4app utilizzando elixir per l'integrazione impostato un database con classi, tipi di dati e relazioni utilizzato rest/graphql per interagire con i tuoi dati da elixir applicato la sicurezza utilizzando acl e clp aggiunto logica personalizzata con funzioni di cloud code configurato l'autenticazione degli utenti con verifica email e reset della password gestito l'archiviazione dei file e il recupero pianificato lavori in background per l'automazione integrato servizi esterni con webhook esplorato il pannello di amministrazione di back4app per una facile gestione dei dati con il modello di concorrenza di elixir (alimentato dal vm erlang) e otp, combinato con i servizi scalabili e flessibili di back4app, puoi costruire backend altamente robusti continua a esplorare funzionalità più avanzate, integra la tua logica aziendale e lascia che back4app ti aiuti a gestire il lavoro pesante prossimi passi costruisci un'app elixir pronta per la produzione sovrapponendo questo backend con il tuo framework web elixir/phoenix preferito integra funzionalità avanzate come il controllo degli accessi basato sui ruoli o api di terze parti (gateway di pagamento, servizi di messaggistica) esplora la documentazione ufficiale di back4app per sicurezza avanzata, registri, ottimizzazione delle prestazioni e altro dai un'occhiata ad altri tutorial per app in tempo reale, dashboard iot o servizi basati sulla posizione con il pattern matching e la concorrenza otp a tua disposizione, sei attrezzato per affrontare una vasta gamma di applicazioni!