Quickstarters
Feature Overview
How to Build a Backend for Flutter?
41 min
introducción en este tutorial, aprenderás cómo construir un backend para flutter utilizando back4app, un backend como servicio (baas) de código abierto y confiable recorreremos la integración de características esenciales de back4app—como la gestión de bases de datos, funciones en la nube, apis restful, apis graphql y autenticación de usuarios—en tu proyecto de flutter también descubrirás cómo manejar actualizaciones en tiempo real utilizando consultas en vivo al usar los potentes servidores backend de back4app, puedes omitir gran parte de la configuración manual y concentrarte en crear una aplicación dinámica de flutter esta guía mostrará a los desarrolladores de flutter cómo configurar una estructura de backend segura, escalable y robusta que se comunique sin esfuerzo con tu lado del cliente también destacaremos las ventajas de dejar que back4app maneje el trabajo pesado—como el alojamiento, la autenticación de usuarios y la lógica del servidor—para que puedas beneficiarte de características como escalado automático, seguridad avanzada y mantenimiento simplificado si tienes un proyecto de flutter y quieres ahorrar incontables horas en la configuración del backend, este es el lugar adecuado para comenzar al final de este tutorial, entenderás el tipo de backend que puedes crear con back4app y estarás listo para extender tus servicios de backend para una aplicación lista para producción o integrar funcionalidades más complejas, como apis externas y autenticación de usuarios avanzada ¡comencemos! 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 básico de desarrollo de flutter asegúrate de tener el sdk de flutter https //docs flutter dev/get started/install instalado y configurado además, confirma que tienes un ide (como android studio o vs code) configurado para flutter entorno de dart (lenguaje de programación) generalmente esto se instala junto con flutter asegúrate de poder importar dart paquetes sin errores familiaridad con los fundamentos de flutter documentación oficial de flutter https //docs flutter dev si eres nuevo en flutter, revisa la documentación oficial o un tutorial para principiantes antes de comenzar asegúrate de tener todos estos requisitos previos en su lugar tener tu proyecto de back4app configurado y tu entorno local de flutter configurado te ayudará a seguir más fácilmente paso 1 – crear un nuevo proyecto en back4app y conectar crear un nuevo proyecto el primer paso para construir tu backend de flutter 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, “flutter 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 que discutiremos instala e inicializa el sdk de parse en tu aplicación flutter back4app se basa en la plataforma parse para gestionar tus datos, actualizaciones en tiempo real, autenticación de usuarios y más para conectar tu proyecto flutter a back4app, sigue estos pasos agrega el sdk de parse flutter a tu aplicación dependencies parse server sdk flutter ^4 0 0 importa el paquete parse en tu main dart (o donde inicialices tu aplicación) import 'package\ parse server sdk flutter/parse server sdk flutter dart'; import 'package\ flutter/material dart'; void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your application id'; const keyparseserverurl = 'https //parseapi back4app com'; const keyclientkey = 'your client key'; // initialize parse with debug set to true await parse() initialize( keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true, debug true, ); runapp(const myapp()); } class myapp extends statelesswidget { const myapp({key? key}) super(key key); @override widget build(buildcontext context) { return materialapp( title 'flutter + back4app example', theme themedata(primaryswatch colors blue), home const scaffold( body center( child text('hello from flutter + back4app!'), ), ), ); } } en tu panel de back4app, ve a la sección de seguridad y claves para encontrar tu id de aplicación , clave de cliente , y url del servidor parse reemplaza los marcadores de posición anteriores con tus propias credenciales con esta inicialización, cada solicitud de tu aplicación flutter se enruta de forma segura a tu instancia de back4app recuerda que la clave maestra nunca debe ser utilizada en el lado del cliente de tu aplicación flutter si necesitas la clave maestra, mantenla en el servidor o en un entorno seguro paso 2 – configuración de la base de datos creando un modelo de datos una vez que tu aplicación flutter esté conectada a back4app, puedes comenzar a diseñar el esquema de tu base de datos puedes hacer esto manualmente desde el panel de back4app navega a la sección “base de datos” en tu panel crea una nueva clase (por ejemplo, “todo”), y añade columnas relevantes (por ejemplo, título, estácompletado) back4app también proporciona un agente de ia para ayudar con la creación automática de esquemas abre el agente de ia desde tu panel de control de la app o el menú describe tu modelo de datos en un lenguaje simple (por ejemplo, “crea una nueva app de todo con un esquema de clase completo ”) deja que el agente de ia cree el esquema por ti esto simplifica la configuración de la arquitectura de datos si deseas que los campos se creen automáticamente, simplemente puedes comenzar a guardar objetos desde tu app—parse admite la creación de esquemas sobre la marcha creando un modelo de datos usando el agente de ia si eliges usar el agente de ia de back4app, solo proporciona una breve descripción, y él construirá o sugerirá un esquema para ti esta es una excelente manera de acelerar la fase inicial de modelado de datos de tu proyecto de flutter leer y escribir datos usando flutter parse sdk a continuación se muestra un ejemplo simple que demuestra cómo crear y recuperar objetos usando el parse flutter sdk import 'package\ parse server sdk flutter/parse server sdk flutter dart'; future\<void> createtodoitem(string title, bool iscompleted) async { final todo = parseobject('todo') set('title', title) set('iscompleted', iscompleted); final response = await todo save(); if (response success && response result != null) { print('todo saved successfully ${response result}'); } else { print('error saving todo ${response error? message}'); } } future\<list\<parseobject>?> fetchtodos() async { final querybuilder\<parseobject> querytodo = querybuilder\<parseobject>(parseobject('todo')); final response = await querytodo query(); if (response success && response results != null) { print('fetched todo items ${response results}'); return response results as list\<parseobject>; } else { print('error fetching todos ${response error? message}'); return null; } } con esto, puedes interactuar directamente con tu base de datos de back4app desde tu aplicación flutter simplemente llama a createtodoitem('feed the cat', false) o fetchtodos() para escribir y leer datos lectura y escritura de datos usando la api rest si necesitas integrarte con otros servicios o prefieres un enfoque más tradicional, aún puedes usar la api rest de back4app 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 lectura y escritura de datos usando la api graphql back4app también ofrece un endpoint graphql mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } esto te da flexibilidad para construir el enfoque que mejor funcione para tu aplicación flutter trabajando con consultas en vivo back4app proporciona consultas en vivo para que puedas recibir actualizaciones en tiempo real de tus datos habilita las consultas en vivo en el panel de control de back4app (configuración del servidor) y luego utiliza el cliente parse livequery para flutter import 'package\ parse server sdk flutter/parse server sdk flutter dart'; import 'package\ parse server sdk flutter/live query dart'; future\<void> subscribetotodos() async { final livequery = livequery(); final query = querybuilder\<parseobject>(parseobject('todo')); subscription subscription = await livequery client subscribe(query); subscription on(livequeryevent create, (value) { print('new todo created $value'); }); subscription on(livequeryevent update, (value) { print('todo updated $value'); }); subscription on(livequeryevent delete, (value) { print('todo deleted $value'); }); } con esta suscripción, puedes escuchar los cambios de datos a medida que ocurren esto es fantástico para construir aplicaciones colaborativas donde múltiples usuarios ven actualizaciones de datos en vivo una vez que se activa la recarga en caliente, tu suscripción permanecerá a menos que la aplicación se reinicie paso 3 – aplicando seguridad con acls y clps ¿qué son acls y clps? back4app utiliza acls (listas de control de acceso) y clps (permisos a nivel de clase) para restringir quién puede leer o escribir datos tanto a nivel de objeto como de clase esta capa asegura que tus datos estén protegidos contra accesos no autorizados configurando permisos a nivel de clase en tu panel de back4app, ve a database y selecciona una clase (por ejemplo, “todo”) navega a class level permissions establece valores predeterminados (por ejemplo, solo los usuarios autenticados pueden crear nuevos objetos) configurando acls en código también puedes aplicar acls a nivel de objeto desde el código de flutter import 'package\ parse server sdk flutter/parse server sdk flutter dart'; future\<void> createprivatetodo(parseuser owneruser, string title) async { final todo = parseobject('todo') set('title', title); final acl = parseacl(owner owneruser); acl setpublicreadaccess(allowed false); acl setpublicwriteaccess(allowed false); todo setacl(acl); final response = await todo save(); if (response success) { print('private todo saved '); } else { print('error ${response error? message}'); } } al combinar clps y acls, puedes asegurarte de que solo las personas o roles adecuados puedan acceder o modificar datos específicos paso 4 – escribiendo funciones de cloud code ¿por qué cloud code? cloud code te permite ejecutar lógica del lado del servidor sin configurar manualmente ningún servidor backend esto es perfecto para validar datos, integrarse con servicios externos o hacer cumplir ciertas reglas en tu backend como servicio (baas) ejemplo de función aquí hay un ejemplo de función en la nube que calcula la longitud de un texto // main js in your cloud code parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); puedes desplegar este código a través de la cli de back4app o en el panel de tu aplicación bajo cloud code despliegue usando la cli de back4app b4a configure accountkey b4a deploy usando el panel en el panel de tu aplicación, ve a cloud code > functions pega el código javascript haz clic en desplegar llamando a cloud code desde flutter import 'package\ parse server sdk flutter/parse server sdk flutter dart'; future\<void> gettextlength(string text) async { final function = parsecloudfunction('calculatetextlength'); final params = \<string, dynamic>{'text' text}; final parseresponse result = await function execute(parameters params); if (result success && result result != null) { print('text length ${result result\['length']}'); } else { print('error calling cloud code ${result error? message}'); } } este enfoque seguro asegura que la lógica sensible permanezca en el servidor, mientras que tu aplicación flutter simplemente realiza solicitudes paso 5 – configurando la autenticación habilitar la autenticación de usuarios back4app utiliza la parse user clase para manejar el registro e inicio de sesión de usuarios por defecto, parse se encarga del hash de contraseñas, tokens de sesión y almacenamiento seguro import 'package\ parse server sdk flutter/parse server sdk flutter dart'; future\<void> signupuser(string username, string password, string email) async { final user = parseuser(username, password, email); final response = await user signup(); if (response success) { print('user signed up successfully!'); } else { print('sign up error ${response error? message}'); } } future\<void> loginuser(string username, string password) async { final user = parseuser(username, password, null); final response = await user login(); if (response success) { print('user logged in ${response result}'); } else { print('login error ${response error? message}'); } } inicio de sesión social back4app soporta integraciones con google, apple, facebook y más cada proveedor tiene un enfoque específico y puede requerir bibliotecas adicionales (por ejemplo, para el inicio de sesión de facebook o google) luego puedes llamar a await parseuser loginwith('facebook', \<string, dynamic>{ 'id' 'user facebook id', 'access token' 'facebook access token', 'expiration date' 'date' }); ajusta los parámetros de acuerdo con la documentación del proveedor paso 6 – manejo del almacenamiento de archivos configurando el almacenamiento de archivos puedes almacenar imágenes, documentos u otros archivos multimedia usando parsefile back4app asegura estos archivos y proporciona una url para su recuperación import 'dart\ io'; import 'package\ parse server sdk flutter/parse server sdk flutter dart'; import 'package\ image picker/image picker dart'; future\<void> uploadimage() async { final picker = imagepicker(); final xfile? pickedfile = await picker pickimage(source imagesource gallery); if (pickedfile == null) { print('no file selected '); return; } final parsefile = parsefile(file(pickedfile path)); final response = await parsefile save(); if (response success) { print('file saved ${parsefile url}'); } else { print('error uploading file ${response error? message}'); } } consideraciones de seguridad puedes definir quién tiene acceso a los archivos (público, usuarios autenticados o restringido) combinando la seguridad a nivel de archivo con acls esto asegura que los datos de tu archivo permanezcan seguros paso 7 – verificación de correo electrónico y restablecimiento de contraseña por qué son importantes la verificación de correo electrónico confirma que un usuario posee la dirección de correo electrónico proporcionada, mientras que los flujos de restablecimiento de contraseña mejoran la experiencia del usuario y la seguridad configuración del panel de control ve a la configuración de correo electrónico de tu aplicación en el panel de control de back4app habilita verificación de correo electrónico y restablecimiento de contraseña configura las plantillas de correo electrónico o tu dominio personalizado si es necesario estas configuraciones permiten que tu aplicación flutter maneje automáticamente las verificaciones de propiedad del usuario y la recuperación de contraseñas implementación en flutter final user = parseuser('testuser', 'password123', 'test\@example com'); final signupresponse = await user signup(); if (signupresponse success) { // the user will receive a verification email } // for password reset final resetresponse = await parseuser requestpasswordreset('test\@example com'); if (resetresponse success) { print('reset email sent successfully!'); } paso 8 – programación de tareas con cloud jobs cloud jobs es posible que desees programar tareas recurrentes (como limpiar datos antiguos o enviar correos electrónicos periódicos) cloud jobs te permiten hacer precisamente eso // 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); const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; }); despliega este código, luego ve a configuración de la app > configuración del servidor > trabajos en segundo plano en tu panel de back4app para programarlo paso 9 – integrando webhooks ¿qué son los webhooks? los webhooks permiten que tu aplicación de back4app envíe solicitudes http a un servicio externo cuando ocurren ciertos eventos (como guardar un nuevo objeto) esto es ideal para integrarse con herramientas de terceros ve a más > webhooks en tu panel de back4app y agregar webhook configura tu endpoint y desencadenadores (por ejemplo, “nuevo registro en todo”) también puedes configurar manualmente los webhooks en cloud code haciendo solicitudes http en los desencadenadores beforesave o 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 que permite a los miembros del equipo no técnicos gestionar datos (operaciones crud, tareas de datos, etc ) sin necesidad de abrir el panel de control de parse ve a panel de la aplicación > más > aplicación de administración haz clic en habilitar aplicación de administración crearás un usuario administrador, elegirás un subdominio y iniciarás sesión con las credenciales recién creadas la aplicación de administración ayuda con revisiones y modificaciones rápidas de datos conclusión en este tutorial, aprendiste cómo construir un backend para flutter utilizando back4app y el sdk de parse para flutter creaste clases, almacenaste datos, configuraste consultas en tiempo real, aplicaste seguridad con acls y clps, escribiste funciones en la nube, programaste tareas, integraste webhooks y exploraste el panel de administración de back4app este enfoque acelera el desarrollo al permitirte concentrarte en el lado del cliente de flutter en lugar de en la compleja configuración del servidor la cadena final que tienes ahora es un backend funcional y seguro que aprovecha apis restful, autenticación de usuarios y fácil manipulación de datos puedes integrar características más avanzadas en cualquier momento, como funciones en la nube adicionales, llamadas a apis externas o roles personalizados próximos pasos prepárate para producción implementa almacenamiento en caché avanzado, análisis o controles de acceso basados en roles extiende tu aplicación integra servicios de terceros o construye más funciones en la nube para lógica de negocio especializada consulta la documentación de back4app explora seguridad avanzada, ajuste de rendimiento, análisis de registros y más aprende más consulta tutoriales para aplicaciones de chat en vivo, servicios basados en ubicación o estructuras de datos más complejas combínalos con tu proyecto de flutter para casos de uso del mundo real al continuar refinando esta configuración, transformarás tu aplicación flutter en una solución poderosa y escalable construida sobre un robusto servicio de backend ¡feliz codificación!