Quickstarters
Feature Overview
How to Build a Backend for Elixir?
41 min
introduction dans ce tutoriel, vous apprendrez comment construire un backend pour elixir en utilisant back4app nous allons passer en revue l'intégration des fonctionnalités essentielles de back4app—telles que la gestion de base de données, les fonctions cloud code, les api rest et graphql, l'authentification des utilisateurs et les requêtes en temps réel (live queries)—pour créer un backend sécurisé, évolutif et robuste elixir, fonctionnant sur la vm erlang (beam) et tirant parti d'otp (erlang otp), est connu pour son environnement tolérant aux pannes et concurrent, qui s'associe bien avec back4app pour former une infrastructure moderne et haute performance vous verrez comment la configuration rapide de back4app et son environnement intuitif peuvent réduire considérablement votre temps et vos efforts par rapport à la configuration manuelle des serveurs et des bases de données cela inclut l'utilisation de la correspondance de motifs, ainsi que l'intégration dans le framework web de choix d'elixir à la fin de ce tutoriel, vous aurez une base solide que vous pourrez étendre en une application prête pour la production ou améliorer avec une logique personnalisée et des api tierces prérequis pour compléter ce tutoriel, vous aurez besoin de un compte back4app et un nouveau projet back4app guide de démarrage avec back4app https //www back4app com/docs/get started/new parse app si vous n'avez pas de compte, vous pouvez en créer un gratuitement suivez le guide ci dessus pour préparer votre projet environnement de développement elixir de base assurez vous d'avoir elixir installé sur votre machine si vous prévoyez d'utiliser un framework web tel que phoenix, consultez le guide d'installation de phoenix https //hexdocs pm/phoenix/installation html pour référence familiarité avec les concepts elixir documentation officielle d'elixir https //elixir lang org/docs html si vous êtes nouveau dans elixir, consultez ces ressources ou un tutoriel pour débutants avant de commencer assurez vous d'avoir tous ces prérequis en place avant de commencer avoir votre projet back4app configuré et votre environnement elixir local prêt vous aidera à suivre plus facilement étape 1 – créer un nouveau projet sur back4app et se connecter créer un nouveau projet la première étape pour construire un backend pour elixir sur back4app consiste à créer un nouveau projet si vous ne l'avez pas encore créé, suivez ces étapes connectez vous à votre compte back4app cliquez sur le bouton “nouvelle application” dans votre tableau de bord back4app donnez un nom à votre application (par exemple, “elixir backend tutorial”) une fois le projet créé, vous le verrez listé dans votre tableau de bord back4app ce projet sera la base de toutes les configurations backend discutées dans ce tutoriel connexion via rest ou graphql back4app utilise la plateforme parse comme fondation pour elixir, il n'existe pas de sdk parse officiel pour le moment au lieu de cela, vous pouvez facilement vous connecter à back4app en utilisant les api rest ou graphql dans votre projet elixir, vous devrez récupérer votre id d'application et clés rest ou graphql depuis la section “paramètres de l'application” ou “sécurité & clés” dans le tableau de bord back4app configurer les requêtes http en utilisant une bibliothèque elixir telle que httpoison https //hex pm/packages/httpoison ou tesla https //hex pm/packages/tesla par exemple, pour stocker des identifiants dans un fichier de configuration ( config/dev exs ou similaire) config \ my app, \ b4a, app id "your application id", rest key "your rest api key", server url "https //parseapi back4app com" vous pouvez ensuite référencer ces identifiants dans votre code pour effectuer des appels rest tout au long de ce guide, nous allons montrer comment interagir avec la base de données back4app, le système d'utilisateurs et d'autres fonctionnalités en utilisant des requêtes http ou graphql standard étape 2 – configuration de la base de données création d'un modèle de données dans back4app, les données sont stockées dans des classes vous pouvez créer une nouvelle classe dans le tableau de bord back4app naviguez vers la section “base de données” dans votre tableau de bord back4app créez une nouvelle classe (par exemple, “todo”) et ajoutez des colonnes pertinentes, telles que titre (string) et iscompleted (boolean) création d'un modèle de données en utilisant l'agent ia back4app fournit également un agent ia pour vous aider à décrire et créer votre modèle de données ouvrez l'agent ia depuis votre tableau de bord d'application ou le menu décrivez votre modèle de données en langage simple (par exemple, “veuillez créer une nouvelle application todo avec un schéma de classe complet ”) laissez l'agent ia créer le schéma automatiquement lecture et écriture de données à l'aide du sdk (si applicable) puisqu'elixir n'a pas de sdk parse officiel, nous allons sauter l'utilisation directe du sdk au lieu de cela, nous allons présenter les approches rest , graphql , et live queries ci dessous lecture et écriture de données à l'aide de l'api rest installez un client http comme httpoison dans votre mix exs defp deps do \[ {\ httpoison, " > 1 8"} ] end ensuite, exécutez mix deps get pour créer (sauvegarder) un objet todo depuis votre application 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 et pour interroger vos objets 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 lecture et écriture de données en utilisant l'api graphql vous pouvez également interagir via graphql par exemple, créer un todo mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } en elixir, vous pourriez également envoyer cela avec 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) travailler avec des requêtes en direct (optionnel) pour des mises à jour en temps réel, back4app propose des requêtes en direct vous pouvez activer les requêtes en direct dans les paramètres du serveur comme il n'existe pas de bibliothèque cliente parse elixir native pour le moment, vous vous connecterez généralement via un canal phoenix ou tout client websocket personnalisé au wss\ //your subdomain here b4a io point de terminaison cela peut être plus avancé, nécessitant un codage personnalisé pour gérer les abonnements, les messages, etc étape 3 – application de la sécurité avec les acl et les clp aperçu rapide back4app propose des listes de contrôle d'accès (acl) et des autorisations au niveau de la classe (clp) pour protéger et gérer l'accès aux données les acl s'appliquent à des objets individuels, tandis que les clp s'appliquent à l'ensemble de la classe étape par étape permissions au niveau de la classe (clps) dans votre tableau de bord back4app, sous base de données , sélectionnez une classe (par exemple, “todo”) et ouvrez l'onglet permissions au niveau de la classe ajustez les paramètres (par exemple, “nécessite une authentification” ou “aucun accès” pour le public) configurer les acl lors de la création ou de la mise à jour d'un objet, vous pouvez envoyer des données acl dans votre requête rest ou graphql par exemple, spécifiez le champ acl en json si vous avez besoin d'un contrôle granulaire par objet pour plus d'informations, visitez les directives de sécurité de l'application https //www back4app com/docs/security/parse security étape 4 – écriture des fonctions cloud code pourquoi cloud code le cloud code vous permet d'exécuter une logique côté serveur sans gérer vos propres serveurs avec elixir, vous vous appuyez généralement sur otp pour la concurrence, mais ici, vous pouvez simplement créer du cloud code javascript dans back4app pour gérer la validation, les déclencheurs ou la logique métier personnalisée ce code s'exécute sur parse server, vous pouvez donc garder votre code elixir concentré sur les tâches client ou microservice pendant que le travail lourd se fait dans le cloud code fonction d'exemple dans votre main js sur le tableau de bord back4app ou en utilisant le 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 }; }); déploiement déployez via le back4app cli https //www back4app com/docs/local development/parse cli ou en collant dans le tableau de bord sous cloud code > functions et en cliquant sur déployer appel du cloud code depuis elixir, vous pourriez utiliser 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 étape 5 – configuration de l'authentification activer ou configurer l'authentification back4app utilise la classe user pour l'authentification vous pouvez gérer facilement l'inscription, la connexion et les réinitialisations de mot de passe depuis elixir, vous utiliserez généralement des appels 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 connexion sociale back4app prend en charge l'intégration avec google, apple, facebook, et plus encore dans la plupart des cas, vous dirigerez les utilisateurs vers le flux oauth, puis utiliserez les jetons retournés par ces fournisseurs pour compléter la connexion parse voir documentation sur la connexion sociale https //www back4app com/docs/platform/sign in with apple pour plus de détails étape 6 – gestion du stockage de fichiers configuration du stockage de fichiers back4app stocke les fichiers en toute sécurité depuis elixir, vous pouvez télécharger des fichiers via 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 vous recevrez une réponse json avec l'url du fichier, que vous pouvez stocker dans une classe (par exemple, photo ) pour référence considérations de sécurité vous pouvez configurer qui peut télécharger des fichiers dans les paramètres fileupload de votre projet back4app, en restreignant les téléchargements aux utilisateurs authentifiés si vous le souhaitez étape 7 – vérification par e mail et réinitialisation du mot de passe aperçu la vérification par e mail garantit que les utilisateurs possèdent l'adresse e mail utilisée lors de l'inscription la réinitialisation du mot de passe leur permet de récupérer des comptes en toute sécurité les deux fonctionnalités sont intégrées sur back4app configuration du tableau de bord back4app activer la vérification par e mail dans les “paramètres de l'application” ou “authentification” de votre application configurer le adresse d'expédition et les modèles d'e mail activer la réinitialisation du mot de passe pour permettre aux utilisateurs de réinitialiser via un lien envoyé par e mail code/implémentation une fois activée dans le tableau de bord, vous pouvez déclencher des réinitialisations de mot de passe 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 étape 8 – planification des tâches avec des travaux cloud quels emplois dans le cloud les emplois dans le cloud vous permettent d'automatiser des tâches routinières comme le nettoyage des anciennes données ou l'envoi d'e mails périodiques vous les écrivez dans cloud code exemple // 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); } }); déployer le code allez sur le tableau de bord back4app > paramètres de l'application > paramètres du serveur > emplois en arrière plan planifiez le travail pour qu'il s'exécute quotidiennement ou à une fréquence de votre choix étape 9 – intégration des webhooks définition les webhooks permettent à votre application back4app d'envoyer des requêtes http à un service externe (par exemple, un canal slack ou stripe) lorsque certains événements se produisent configuration accédez à la configuration des webhooks dans votre tableau de bord back4app > plus > webhooks définissez le point de terminaison (par exemple, https //your service com/webhook endpoint ) configurez les déclencheurs tels que “nouvel enregistrement dans la classe todo ” exemple si vous souhaitez envoyer des données à slack chaque fois qu'un todo est créé, vous pouvez ajouter un nouveau webhook pointant vers l'url de votre webhook entrant slack vous pouvez également définir des webhooks dans le cloud code en envoyant des requêtes http personnalisées dans des déclencheurs comme aftersave étape 10 – exploration du panneau d'administration back4app où le trouver l' application admin back4app est une interface conviviale pour gérer vos données vous pouvez l'activer depuis tableau de bord de l'application > plus > application admin fonctionnalités créer un premier utilisateur admin , ce qui configure le rôle b4aadminuser et des classes supplémentaires attribuer un sous domaine pour accéder à l'interface admin se connecter pour visualiser et gérer les données dans une interface simple conclusion en suivant ce tutoriel sur la façon de construire un backend pour elixir avec back4app, vous avez créé une backend sécurisé sur la plateforme de back4app en utilisant elixir pour l'intégration mis en place une base de données avec des classes, des types de données et des relations utilisé rest/graphql pour interagir avec vos données depuis elixir appliqué la sécurité en utilisant des acl et des clp ajouté une logique personnalisée avec des fonctions cloud code configuré l'authentification des utilisateurs avec vérification par e mail et réinitialisation de mot de passe géré le stockage de fichiers et la récupération planifié des tâches en arrière plan pour l'automatisation intégré des services externes avec des webhooks exploré le panneau d'administration de back4app pour une gestion facile des données avec le modèle de concurrence d'elixir (alimenté par l'erlang vm) et otp, combiné avec les services évolutifs et flexibles de back4app, vous pouvez construire des backends très robustes continuez à explorer des fonctionnalités plus avancées, intégrez votre logique métier, et laissez back4app vous aider à gérer le travail lourd prochaines étapes construire une application elixir prête pour la production en superposant ce backend avec votre framework web elixir/phoenix préféré intégrer des fonctionnalités avancées comme le contrôle d'accès basé sur les rôles ou les api tierces (passerelles de paiement, services de messagerie) explorer la documentation officielle de back4app pour la sécurité avancée, les journaux, l'optimisation des performances, et plus encore consulter d'autres tutoriels pour des applications en temps réel, des tableaux de bord iot, ou des services basés sur la localisation avec le pattern matching et la concurrence otp à votre disposition, vous êtes équipé pour aborder une large gamme d'applications!