Quickstarters
Feature Overview
How to Build a Backend for Elm?
47 min
introducción en este tutorial, aprenderás a construir un backend completo para una aplicación elm 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 (consultas en vivo), para crear un backend seguro, escalable y robusto que se comunique sin problemas con tu frontend elm también verás cómo la configuración rápida de back4app y su entorno intuitivo pueden reducir drásticamente el tiempo y el esfuerzo en comparación con la configuración manual de servidores y bases de datos a lo largo del camino, ganarás experiencia práctica con funcionalidades clave, incluyendo características de seguridad avanzadas, programación de tareas con cloud jobs y configuración de webhooks para integraciones externas al final de este tutorial, estarás bien preparado para mejorar esta configuración básica en una aplicación lista para producción o incorporar fácilmente lógica personalizada y apis de terceros según sea necesario 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 elm puedes configurarlo instalando elm https //guide elm lang org/install/ asegúrate de tener elm (0 19 o superior) instalado en tu máquina familiaridad con elm documentación oficial de elm https //guide elm lang org/ si eres nuevo en elm, revisa la documentación oficial o un tutorial para principiantes antes de comenzar biblioteca de solicitudes http o enfoque graphql para elm usaremos llamadas rest y graphql desde elm, ya que no hay un sdk oficial de parse para elm asegúrate de tener la elm/http https //package elm lang org/packages/elm/http/latest/ y, si es necesario, una biblioteca de graphql configurada 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 elm listo te ayudará a seguir más fácilmente paso 1 – configuración del proyecto de back4app crear un nuevo proyecto el primer paso para construir tu backend de elm 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 control de back4app dale un nombre a tu app (por ejemplo, “elm 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 conéctate con back4app desde elm back4app se basa en la plataforma parse para gestionar tus datos, proporcionar características en tiempo real, manejar la autenticación de usuarios y más dado que no hay un sdk oficial de elm parse, utilizaremos rest o graphql llamadas desde nuestra aplicación elm para comunicarnos con el backend de back4app recupera tus claves de parse en tu panel de control de back4app, navega a la sección “configuraciones de la app” o “seguridad y claves” de tu app para encontrar tu id de aplicación , clave de api rest , y endpoint de graphql también encontrarás la url del servidor parse (a menudo https //parseapi back4app com ) desde elm, puedes almacenar estas credenciales en un archivo de configuración o módulo por ejemplo src/config elm module config exposing (applicationid, restapikey, serverurl, graphqlendpoint) applicationid string applicationid = "your application id" restapikey string restapikey = "your rest api key" serverurl string serverurl = "https //parseapi back4app com" graphqlendpoint string graphqlendpoint = "https //parseapi back4app com/graphql" usarás estos valores cada vez que realices solicitudes http a back4app desde elm al completar este paso, has establecido cómo conectar de manera segura tu front end de elm con el backend de back4app paso 2 – configuración de la base de datos guardando y consultando datos con tu proyecto de back4app configurado, ahora puedes comenzar a guardar y recuperar datos a través de rest o graphql desde elm para un ejemplo simple, demostraremos cómo crear y obtener un todo usando rest desde elm usaremos elm/http https //package elm lang org/packages/elm/http/latest/ para hacer solicitudes rest aquí hay un ejemplo simplificado para crear un elemento todo src/todoapi elm module todoapi exposing (createtodo, fetchtodos) import config exposing (applicationid, restapikey, serverurl) import http import json decode as decode import json encode as encode \ a simplified representation of a todo type alias todo = { objectid string , title string , iscompleted bool } \ encoder for creating a todo createtodoencoder string > bool > encode value createtodoencoder title iscompleted = encode object \[ ( "title", encode string title ) , ( "iscompleted", encode bool iscompleted ) ] \ decoder for todo tododecoder decode decoder todo tododecoder = decode map3 todo (decode field "objectid" decode string) (decode field "title" decode string) (decode field "iscompleted" decode bool) createtodo string > bool > http request todo createtodo title iscompleted = http request { method = "post" , headers = \[ http header "x parse application id" applicationid , http header "x parse rest api key" restapikey , http header "content type" "application/json" ] , url = serverurl ++ "/classes/todo" , body = http jsonbody (createtodoencoder title iscompleted) , expect = http expectjson tododecoder , timeout = nothing , tracker = nothing } fetchtodos http request (list todo) fetchtodos = http request { method = "get" , headers = \[ http header "x parse application id" applicationid , http header "x parse rest api key" restapikey ] , url = serverurl ++ "/classes/todo" , body = http emptybody , expect = http expectjson (decode field "results" (decode list tododecoder)) , timeout = nothing , tracker = nothing } luego puedes llamar a createtodo o fetchtodos en tu función de actualización de elm, manejar las http respuestas e integrar los datos en el modelo de tu aplicación uso de rest directamente (ejemplo en curl) si prefieres probar o quieres hacer llamadas rápidas fuera de elm, puedes usar curl 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 uso de graphql back4app también proporciona una interfaz graphql a continuación se muestra una mutación de graphql de ejemplo para crear un todo mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } en elm, puedes usar una biblioteca de graphql o crear manualmente tus solicitudes http para enviar estas mutaciones y consultas, muy similar a como usamos elm/http arriba diseño de esquema y tipos de datos por defecto, parse permite creación de esquemas sobre la marcha , pero también puedes definir tus clases y tipos de datos en el panel de control de back4app para tener más control navega a la sección “base de datos” en tu panel de control de back4app crea una nueva clase (por ejemplo, “todo”) y añade columnas relevantes, como título (string) y iscompleted (boolean) back4app también soporta varios tipos de datos string , number , boolean , object , date , file , pointer , array , relation , geopoint , y polygon puedes elegir el tipo apropiado para cada campo o dejar que parse cree automáticamente estas columnas cuando guardes un objeto desde tu aplicación elm utilizando el enfoque rest o graphql back4app ofrece un agente de ia que puede ayudarte a diseñar tu modelo de datos abre el agente de ia desde tu panel de aplicaciones o en el menú describe tu modelo de datos en un lenguaje simple (por ejemplo, “por favor, crea una nueva aplicación todo en back4app con un esquema de clase completo ”) deja que el agente de ia cree el esquema por ti usar el agente de ia puede ahorrarte tiempo al configurar tu arquitectura de datos y asegurar consistencia en tu aplicación datos relacionales si tienes datos relacionales – digamos, un categoría objeto que apunta a múltiples todo elementos – puedes usar punteros o relaciones en parse desde elm, puedes gestionar estas relaciones incluyendo los campos de puntero o relación en tus llamadas rest o graphql por ejemplo, para agregar un puntero a través de rest { "title" "task with category", "category" { " type" "pointer", "classname" "category", "objectid" "your category object id" } } cuando consultas, también puedes incluir datos de puntero utilizando el parámetro ?include=category en rest o utilizando include en consultas graphql consultas en vivo para actualizaciones en tiempo real, back4app proporciona consultas en vivo aunque no hay un paquete nativo de elm para consultas en vivo de parse, aún puedes habilitarlo en tu panel de control de back4app habilitar consultas en vivo en la configuración del servidor de tu aplicación usar el punto final de websocket para consultas en vivo en un cliente especializado si deseas integrar consultas en vivo con elm, podrías aprovechar elm websocket (u otro enfoque personalizado) para suscribirte a los cambios sin embargo, esto requiere una configuración más avanzada ya que no existe un cliente oficial de consultas en vivo de elm en este momento paso 3 – aplicando seguridad con acls y clps mecanismo de seguridad de back4app back4app toma la seguridad en serio al proporcionar listas de control de acceso (acls) y permisos a nivel de clase (clps) estas características te permiten restringir quién puede leer o escribir datos a nivel de objeto o de clase, asegurando que solo los usuarios autorizados puedan modificar tus datos listas de control de acceso (acls) una acl se aplica a objetos individuales para determinar qué usuarios, roles o el público pueden realizar operaciones de lectura/escritura puedes configurar acls desde elm incluyendo la acl propiedad en tu json al crear o actualizar objetos a través de rest o graphql por ejemplo, para crear un todo privado, podrías establecer { "title" "private task", "acl" { "user object id" { "read" true, "write" true } } } esto impide que cualquier persona que no sea ese usuario lea o modifique el objeto permisos a nivel de clase (clps) clps gobiernan los permisos predeterminados de toda una clase, como si la clase es legible o escribible públicamente, o si solo ciertos roles pueden acceder a ella ve a tu panel de control de back4app , selecciona tu aplicación y abre la base de datos sección selecciona una clase (por ejemplo, “todo”) abre la pestaña de permisos a nivel de clase configura tus valores predeterminados, como “requiere autenticación” para leer o escribir, o “sin acceso” para el público estos permisos establecen la línea base, mientras que los acls ajustan los permisos para objetos individuales un modelo de seguridad robusto combina típicamente tanto clps (restricciones amplias) como acls (restricciones detalladas por objeto) para más información, ve a directrices de seguridad de la aplicación paso 4 – escribir y desplegar funciones en la nube el código en la nube es una característica del entorno de parse server que te permite ejecutar código javascript personalizado en el lado del servidor, sin necesidad de gestionar servidores o infraestructura al escribir código en la nube, puedes extender tu backend de back4app con lógica de negocio adicional, validaciones, disparadores e integraciones que se ejecutan de manera segura y eficiente en el parse server cómo funciona cuando escribes código en la nube, normalmente colocas tus funciones de javascript, disparadores y cualquier módulo npm requerido en un main js (o app js ) archivo este archivo se despliega luego en tu proyecto de back4app, que se ejecuta dentro del entorno de parse server todo el código en la nube para tu aplicación de back4app se ejecuta dentro del parse server que es gestionado por back4app, por lo que no tienes que preocuparte por el mantenimiento del servidor, la escalabilidad o la provisión cada vez que actualizas y despliegas tu main js archivo, el servidor parse en ejecución se actualiza con tu último código // main js // import an npm module (e g , axios) const axios = require('axios'); 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; }); puedes llamar a estas funciones de cloud code desde elm haciendo una solicitud rest a https //parseapi back4app com/functions/fetchexternaldata casos de uso típicos lógica de negocios agregando datos, procesando pagos, etc validaciones de datos asegurando que ciertos campos cumplan con los criterios antes de guardar disparadores ejecutando código antes o después de acciones de guardar/actualizar/eliminar integraciones conectando con apis o servicios externos aplicación de seguridad verificando roles o permisos de usuario antes de realizar operaciones críticas despliega tu función desplegando a través del back4app cli instala el cli (ejemplo de linux/macos) curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash configura tu clave de cuenta b4a configure accountkey despliega tu código en la nube b4a deploy desplegando a través del panel de control en el panel de control de tu aplicación, ve a cloud code > functions copia/pega la función en el main js editor haz clic en deploy llamando a tu función desde elm, puedes llamar a una función en la nube haciendo una solicitud post import config exposing (applicationid, restapikey, serverurl) import http import json decode as decode import json encode as encode cloudfunction string > encode value > http request decode value cloudfunction functionname body = http request { method = "post" , headers = \[ http header "x parse application id" applicationid , http header "x parse rest api key" restapikey , http header "content type" "application/json" ] , url = serverurl ++ "/functions/" ++ functionname , body = http jsonbody body , expect = http expectjson decode value , timeout = nothing , tracker = nothing } calculatetextlength string > http request decode value calculatetextlength text = let requestbody = encode object \[ ( "text", encode string text ) ] in cloudfunction "calculatetextlength" requestbody también puedes llamar a cloud functions a través de graphql mutation { calculatetextlength(input { text "hello graphql" }) { result } } paso 5 – configuración de la autenticación de usuarios autenticación de usuarios en back4app back4app aprovecha la clase parse user como base para la autenticación por defecto, parse maneja el hash de contraseñas, tokens de sesión y almacenamiento seguro puedes crear e iniciar sesión usuarios a través de rest o graphql desde tu aplicación elm configurando la autenticación de usuarios registrando un nuevo usuario (rest) signupuser string > string > string > http request decode value signupuser username password email = http request { method = "post" , headers = \[ http header "x parse application id" applicationid , http header "x parse rest api key" restapikey , http header "content type" "application/json" ] , url = serverurl ++ "/users" , body = http jsonbody (encode object \[ ( "username", encode string username ) , ( "password", encode string password ) , ( "email", encode string email ) ] ) , expect = http expectjson decode value , timeout = nothing , tracker = nothing } iniciando sesión (rest) loginuser string > string > http request decode value loginuser username password = http request { method = "get" , headers = \[ http header "x parse application id" applicationid , http header "x parse rest api key" restapikey ] , url = serverurl ++ "/login?username=" ++ username ++ "\&password=" ++ password , body = http emptybody , expect = http expectjson decode value , timeout = nothing , tracker = nothing } integración de inicio de sesión social back4app y parse pueden integrarse con proveedores de oauth populares como google , facebook , o apple normalmente, configurarás estos proveedores en el panel de control de back4app y luego harás las solicitudes necesarias desde elm consulta la documentación de inicio de sesión social https //www back4app com/docs/platform/sign in with apple para pasos de configuración detallados verificación de correo electrónico y restablecimiento de contraseña navega a la configuración de correo electrónico en tu panel de control de back4app habilita la verificación de correo electrónico para asegurar que los nuevos usuarios verifiquen la propiedad de sus direcciones de correo electrónico configura la dirección del remitente , las plantillas de correo electrónico y tu dominio personalizado si lo deseas paso 6 – manejo del almacenamiento de archivos subida y recuperación de archivos parse incluye la parse file clase para manejar las subidas de archivos, que back4app almacena de forma segura dado que estamos utilizando rest desde elm, podemos hacer una subida de archivos multipart o adjuntar un archivo codificado en base64 subida de archivos a través de rest uploadfile string > string > http request decode value uploadfile filename base64content = http request { method = "post" , headers = \[ http header "x parse application id" applicationid , http header "x parse rest api key" restapikey , http header "content type" "text/plain" ] , url = serverurl ++ "/files/" ++ filename , body = http stringbody "text/plain" base64content , expect = http expectjson decode value , timeout = nothing , tracker = nothing } una vez cargado, recibirás una url de archivo en la respuesta puedes almacenar esa url en un campo de clase de parse o mostrarla en tu aplicación elm según sea necesario seguridad de archivos parse server proporciona configuraciones para gestionar la seguridad de la carga de archivos por ejemplo { "fileupload" { "enableforpublic" true, "enableforanonymoususer" true, "enableforauthenticateduser" true } } paso 7 – programación de tareas con cloud jobs cloud jobs cloud jobs en back4app te permiten programar y ejecutar tareas rutinarias en tu backend, como limpiar datos antiguos o enviar correos electrónicos periódicos por ejemplo, un trabajo para eliminar tareas pendientes más antiguas de 30 días podría verse así // 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); } }); despliega tu cloud code con el nuevo trabajo (a través de cli o dashboard) ve al dashboard de back4app > configuraciones de la aplicación > configuraciones del servidor > tareas en segundo plano programa el trabajo para que se ejecute diariamente o según lo desees paso 8 – integrando webhooks webhooks permiten que tu aplicación back4app envíe solicitudes http a un servicio externo cada vez que ocurren ciertos eventos esto es poderoso para integrarse con sistemas de terceros como pasarelas de pago (por ejemplo, stripe), herramientas de marketing por correo electrónico o plataformas de análisis navega a la configuración de webhooks en tu panel de back4app > más > webhooks y luego haz clic en agregar webhook configura un endpoint (por ejemplo, https //your external service com/webhook endpoint https //your external service com/webhook endpoint ) configura los disparadores para especificar qué eventos en tus clases de back4app o funciones de cloud code activarán el webhook por ejemplo, si deseas notificar a un canal de slack cada vez que se crea un nuevo todo crea una aplicación de slack que acepte webhooks entrantes copia la url del webhook de slack en tu panel de back4app, establece el endpoint a esa url de slack para el evento “nuevo registro en la clase todo ” agrega encabezados http o cargas útiles personalizadas si es necesario paso 9 – explorando el panel de administración de back4app el back4app admin app es una interfaz de gestión basada en la web diseñada para usuarios no técnicos para realizar operaciones crud y manejar tareas de datos rutinarias sin escribir ningún código proporciona una centrada en el modelo , amigable para el usuario interfaz que simplifica la administración de bases de datos, la gestión de datos personalizados y las operaciones a nivel empresarial habilitando la aplicación admin habilitar yendo a app dashboard > más > admin app y haciendo clic en el botón “habilitar aplicación admin” crear un primer usuario admin (nombre de usuario/contraseña), que genera automáticamente un nuevo rol (b4aadminuser) y clases (b4asetting, b4amenuitem y b4acustomfield) en el esquema de tu aplicación elegir un subdominio para acceder a la interfaz de administración y completar la configuración iniciar sesión utilizando las credenciales de administrador que creaste para acceder a tu nuevo panel de control de la aplicación admin una vez habilitada, la aplicación de administración de back4app facilita la visualización, edición o eliminación de registros de su base de datos, sin requerir el uso directo del panel de control de parse o código de backend con controles de acceso configurables, puede compartir de manera segura esta interfaz con miembros del equipo o clientes que necesiten una forma clara y fácil de gestionar datos conclusión al seguir este tutorial completo, usted ha creado un backend seguro para una aplicación elm en back4app configurado una base de datos con esquemas de clase, tipos de datos y relaciones integrado consultas en tiempo real (consultas en vivo) para actualizaciones inmediatas de datos aplicado medidas de seguridad utilizando acls y clps para proteger y gestionar el acceso a los datos implementado funciones de cloud code para ejecutar lógica de negocio personalizada en el lado del servidor configurado la autenticación de usuarios con soporte para verificación de correo electrónico y restablecimiento de contraseñas gestionado cargas de archivos y recuperación, con controles de seguridad de archivos opcionales programado trabajos en la nube para tareas automatizadas en segundo plano usado webhooks para integrarse con servicios externos explorado el panel de administración de back4app para la gestión de datos con un sólido frontend de elm y un robusto backend de back4app, ahora estás bien equipado para desarrollar aplicaciones ricas en funciones, escalables y seguras continúa explorando funcionalidades más avanzadas, integra tu lógica de negocio y aprovecha el poder de back4app para ahorrarte innumerables horas en la administración de servidores y bases de datos ¡feliz codificación! próximos pasos construir una aplicación elm lista para producción extendiendo este backend para manejar modelos de datos más complejos, estrategias de caché y optimizaciones de rendimiento integrar características avanzadas como flujos de autenticación especializados, control de acceso basado en roles o apis externas (como pasarelas de pago) consulta la documentación oficial de back4app para profundizar en seguridad avanzada, ajuste de rendimiento y análisis de registros explora otros tutoriales sobre aplicaciones de chat en tiempo real, paneles de iot o servicios basados en ubicación puedes combinar las técnicas aprendidas aquí con apis de terceros para crear aplicaciones complejas del mundo real