Quickstarters
Feature Overview
¿Cómo construir un backend para Elixir?
40 min
introducción en este tutorial, aprenderás cómo construir un backend para elixir utilizando back4app recorreremos la integración de características esenciales de back4app, como la gestión de bases de datos, funciones de cloud code, apis rest y graphql, autenticación de usuarios y consultas en tiempo real (live queries), para crear un backend seguro, escalable y robusto elixir, que se ejecuta en la máquina virtual erlang (beam) y aprovecha otp (erlang otp), es conocido por su entorno tolerante a fallos y concurrente, que se complementa bien con back4app para formar una infraestructura moderna y de alto rendimiento verás cómo la rápida configuración y el entorno intuitivo de back4app pueden reducir drásticamente tu tiempo y esfuerzo en comparación con la configuración manual de servidores y bases de datos esto incluye aprovechar el patrón de coincidencia, además de conectarse al marco web de elección de elixir al final de este tutorial, tendrás una base sólida que podrás extender a una aplicación lista para producción o mejorar con lógica personalizada y apis de terceros requisitos previos para completar este tutorial, necesitarás una cuenta de back4app y un nuevo proyecto de back4app comenzando con back4app https //www back4app com/docs/get started/new parse app si no tienes una cuenta, puedes crear una gratis sigue la guía anterior para preparar tu proyecto entorno de desarrollo básico de elixir asegúrate de tener elixir instalado en tu máquina si planeas usar un marco web como phoenix, consulta la guía de instalación de phoenix https //hexdocs pm/phoenix/installation html como referencia familiaridad con los conceptos de elixir documentación oficial de elixir https //elixir lang org/docs html si eres nuevo en elixir, revisa estos recursos o un tutorial para principiantes antes de comenzar asegúrate de tener todos estos requisitos previos en su lugar antes de comenzar tener tu proyecto de back4app configurado y tu entorno local de elixir listo te ayudará a seguir más fácilmente paso 1 – crear un nuevo proyecto en back4app y conectarse crear un nuevo proyecto el primer paso en cómo construir un backend para elixir en back4app es crear un nuevo proyecto si aún no has creado uno, sigue estos pasos inicia sesión en tu cuenta de back4app haz clic en el botón “nueva app” en tu panel de back4app dale un nombre a tu app (por ejemplo, “elixir backend tutorial”) una vez que se crea el proyecto, lo verás listado en tu panel de control de back4app este proyecto será la base para todas las configuraciones de backend discutidas en este tutorial conectando a través de rest o graphql back4app utiliza la plataforma parse como base para elixir, no hay un sdk oficial de parse en este momento en su lugar, puedes conectarte fácilmente a back4app utilizando las apis rest o graphql en tu proyecto de elixir, deberás recupera tu id de aplicación y claves rest o graphql desde la sección “configuración de la app” o “seguridad y claves” en el panel de control de back4app configura las solicitudes http utilizando una biblioteca de elixir como httpoison https //hex pm/packages/httpoison o tesla https //hex pm/packages/tesla por ejemplo, para almacenar credenciales en un archivo de configuración ( config/dev exs o similar) config \ my app, \ b4a, app id "your application id", rest key "your rest api key", server url "https //parseapi back4app com" luego puedes hacer referencia a estas credenciales en tu código para realizar llamadas rest a lo largo de esta guía, mostraremos cómo interactuar con la base de datos de back4app, el sistema de usuarios y otras características utilizando solicitudes http o graphql estándar paso 2 – configurando la base de datos creando un modelo de datos en back4app, los datos se almacenan en clases puedes crear una nueva clase en el panel de control de back4app navega a la sección “base de datos” en tu panel de control de back4app crea una nueva clase (por ejemplo, “todo”) y agrega columnas relevantes, como título (string) y iscompleted (boolean) creando un modelo de datos utilizando el agente de ia back4app también proporciona un agente de ia para ayudarte a describir y crear tu modelo de datos abre el agente de ia desde tu panel de control de la aplicación o el menú describe tu modelo de datos en lenguaje sencillo (por ejemplo, “por favor, crea una nueva aplicación todo con un esquema de clase completo ”) deja que el agente de ia cree el esquema automáticamente lectura y escritura de datos usando sdk (si corresponde) dado que elixir no tiene un sdk de parse oficial, omitiremos el uso directo del sdk en su lugar, mostraremos rest , graphql , y consultas en vivo enfoques a continuación lectura y escritura de datos usando rest api instala un cliente http como httpoison en tu mix exs defp deps do \[ {\ httpoison, " > 1 8"} ] end luego, ejecuta mix deps get para crear (guardar) un objeto todo desde tu aplicación 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 y para consultar tus objetos 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 lectura y escritura de datos usando la api de graphql también puedes interactuar a través de graphql por ejemplo, creando un todo mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } en elixir, también podrías enviar esto con un cliente 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) trabajando con consultas en vivo (opcional) para actualizaciones en tiempo real, back4app ofrece consultas en vivo puedes habilitar consultas en vivo en la configuración del servidor dado que no hay una biblioteca de cliente parse nativa para elixir en este momento, normalmente te conectarías a través de un canal de phoenix o cualquier cliente websocket personalizado al wss\ //your subdomain here b4a io punto final esto puede ser más avanzado, requiriendo codificación personalizada para manejar suscripciones, mensajes, etc paso 3 – aplicando seguridad con acls y clps resumen breve back4app ofrece listas de control de acceso (acls) y permisos a nivel de clase (clps) para proteger y gestionar el acceso a los datos las acls se aplican a objetos individuales, mientras que los clps se aplican a toda la clase paso a paso permisos a nivel de clase (clps) en tu panel de back4app, bajo base de datos , selecciona una clase (por ejemplo, “todo”) y abre la pestaña de permisos a nivel de clase ajusta la configuración (por ejemplo, “requiere autenticación” o “sin acceso” para el público) configurar acls al crear o actualizar un objeto, puedes enviar datos de acl en tu solicitud rest o graphql por ejemplo, especifica el acl campo en json si necesitas un control detallado por objeto para más información, visita las directrices de seguridad de la aplicación https //www back4app com/docs/security/parse security paso 4 – escribiendo funciones de cloud code por qué cloud code cloud code te permite ejecutar lógica del lado del servidor sin gestionar tus propios servidores con elixir, normalmente confías en otp para la concurrencia, pero aquí puedes simplemente crear cloud code en javascript en back4app para manejar validaciones, disparadores o lógica de negocio personalizada este código se ejecuta en parse server, por lo que puedes mantener tu código de elixir enfocado en tareas de cliente o microservicio mientras el trabajo pesado ocurre en cloud code función de ejemplo en tu main js en el panel de back4app o usando 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 }; }); despliegue despliega a través de la back4app cli https //www back4app com/docs/local development/parse cli o pegando en el panel bajo cloud code > functions y haciendo clic en deploy llamando a cloud code desde elixir, podrías usar 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 paso 5 – configuración de la autenticación habilitar o configurar la autenticación back4app utiliza la clase user para la autenticación puedes gestionar el registro, inicio de sesión y restablecimiento de contraseñas fácilmente desde elixir, normalmente usarás llamadas 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 inicio de sesión social back4app soporta la integración con google, apple, facebook y más en la mayoría de los casos, dirigirás a los usuarios al flujo de oauth, luego usarás los tokens devueltos por estos proveedores para completar el inicio de sesión en parse consulta documentación de inicio de sesión social https //www back4app com/docs/platform/sign in with apple para más detalles paso 6 – manejo del almacenamiento de archivos configuración del almacenamiento de archivos back4app almacena archivos de forma segura desde elixir, puedes subir archivos a través de 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 recibirás una respuesta json con la url del archivo, que puedes almacenar en una clase (por ejemplo, foto ) para referencia consideraciones de seguridad puedes configurar quién puede subir archivos en fileupload configuraciones en tu proyecto de back4app, restringiendo las subidas a usuarios autenticados si lo deseas paso 7 – verificación de correo electrónico y restablecimiento de contraseña descripción general la verificación de correo electrónico asegura que los usuarios posean la dirección de correo electrónico utilizada durante el registro el restablecimiento de contraseña les permite recuperar cuentas de manera segura ambas funciones están integradas en back4app configuración del panel de control de back4app habilitar la verificación de correo electrónico en “configuración de la aplicación” o “autenticación” de su aplicación configurar el dirección de envío y las plantillas de correo electrónico habilitar el restablecimiento de contraseña para permitir que los usuarios restablezcan a través de un enlace enviado por correo electrónico código/implementación una vez habilitado en el panel de control, puede activar los restablecimientos de contraseña 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 paso 8 – programación de tareas con cloud jobs qué hacen los trabajos en la nube los trabajos en la nube te permiten automatizar tareas rutinarias como limpiar datos antiguos o enviar correos electrónicos periódicos los escribes en cloud code ejemplo // 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); } }); desplegar el código ir al panel de control de back4app > configuraciones de la aplicación > configuraciones del servidor > trabajos en segundo plano programar el trabajo para que se ejecute diariamente o con la frecuencia que elijas paso 9 – integrando webhooks definición los webhooks permiten que tu aplicación back4app envíe solicitudes http a un servicio externo (por ejemplo, un canal de slack o stripe) cuando ocurren ciertos eventos configuración navega a la configuración de webhooks en tu panel de back4app > más > webhooks establece el endpoint (por ejemplo, https //your service com/webhook endpoint ) configura los triggers como “nuevo registro en la clase todo ” ejemplo si deseas enviar datos a slack cada vez que se crea un todo, puedes agregar un nuevo webhook apuntando a la url de tu webhook entrante de slack también puedes definir webhooks en cloud code enviando solicitudes http personalizadas en triggers como aftersave paso 10 – explorando el panel de administración de back4app dónde encontrarlo la aplicación de administración de back4app es una interfaz fácil de usar para gestionar tus datos puedes habilitarla desde panel de la aplicación > más > aplicación de administración características crear un primer usuario administrador , que configura el rol de b4aadminuser y clases adicionales asignar un subdominio para acceder a la interfaz de administración iniciar sesión para ver y gestionar datos en una interfaz simple conclusión al seguir este tutorial sobre cómo construir un backend para elixir con back4app, has creado un backend seguro en la plataforma de back4app utilizando elixir para la integración configurado una base de datos con clases, tipos de datos y relaciones usado rest/graphql para interactuar con tus datos desde elixir aplicado seguridad utilizando acls y clps añadido lógica personalizada con funciones de cloud code configurado la autenticación de usuarios con verificación de correo electrónico y restablecimiento de contraseñas manejado el almacenamiento y recuperación de archivos programado trabajos en segundo plano para automatización integrado servicios externos con webhooks explorado el panel de administración de back4app para una fácil gestión de datos con el modelo de concurrencia de elixir (impulsado por la máquina virtual erlang) y otp, combinado con los servicios escalables y flexibles de back4app, puedes construir backends altamente robustos continúa explorando características más avanzadas, integra tu lógica de negocio y deja que back4app te ayude a manejar el trabajo pesado próximos pasos construir una aplicación elixir lista para producción combinando este backend con tu marco web elixir/phoenix preferido integrar características avanzadas como control de acceso basado en roles o apis de terceros (pasarelas de pago, servicios de mensajería) explorar la documentación oficial de back4app para seguridad avanzada, registros, ajuste de rendimiento y más revisar otros tutoriales para aplicaciones en tiempo real, paneles de iot o servicios basados en ubicación con la coincidencia de patrones y la concurrencia de otp a tu disposición, ¡estás equipado para abordar una amplia gama de aplicaciones!