Quickstarters
Feature Overview
¿Cómo construir un backend para Blazor?
39 min
introducción en este tutorial, aprenderás a construir un backend completo para una aplicación blazor 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 que se comunique sin problemas con tu frontend de blazor aprovechar los robustos servicios de backend de back4app con blazor, un marco de trabajo asp net core para construir interfaces web interactivas utilizando c#, permite a los desarrolladores acelerar el desarrollo del backend ya sea que estés construyendo una aplicación blazor server o una aplicación blazor webassembly, la integración sin problemas con back4app puede reducir drásticamente el tiempo de desarrollo mientras asegura una lógica de negocio de alta calidad en el lado del servidor al final de este tutorial, habrás construido una estructura de backend segura adaptada para una aplicación web de pila completa utilizando blazor obtendrás información sobre cómo manejar operaciones de datos, aplicar controles de seguridad e implementar funciones en la nube, haciendo que tu aplicación web blazor sea robusta y escalable 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 blazor puedes configurarlo instalando el sdk de net más reciente desde microsoft https //dotnet microsoft com/download y creando un nuevo proyecto de blazor utilizando plantillas como dotnet new blazorserver o dotnet new blazorwasm net sdk (versión 6 o superior) instalado asegúrate de tener el sdk de net para construir y ejecutar aplicaciones blazor familiaridad con c# y conceptos de blazor documentación oficial de blazor https //docs microsoft com/en us/aspnet/core/blazor/?view=aspnetcore 6 0 si eres nuevo en blazor, revisa la documentación oficial o un tutorial para principiantes antes de comenzar asegúrate de tener estos requisitos previos antes de comenzar para garantizar una experiencia de tutorial fluida paso 1 – configuración del proyecto back4app crear un nuevo proyecto el primer paso para construir tu backend de blazor 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, “blazor 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 conectar el sdk de parse 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 conectar tu aplicación blazor a back4app implica instalar el sdk de parse para net e inicializarlo con las credenciales de tu panel de control de back4app recupera tus claves de parse en tu panel de control de back4app, navega a la sección “configuración de la aplicación” o “seguridad y claves” de tu aplicación para encontrar tu id de aplicación y net key también encontrarás la url del servidor de parse (a menudo en el formato https //parseapi back4app com ) instala el sdk de parse en tu proyecto blazor dotnet add package parse inicializa parse en tu aplicación blazor típicamente, configurarías la inicialización en el program cs o en una clase de servicio dedicada program cs using parse; var builder = webapplication createbuilder(args); // inicializa parse parseclient initialize(new parseclient configuration { applicationid = "your application id", windowskey = "your dotnet key", server = "https //parseapi back4app com" }); var app = builder build(); // resto de tu configuración esta configuración asegura que cada vez que uses parse en tu aplicación blazor, esté preconfigurada para conectarse a tu instancia específica de back4app al completar este paso, has establecido una conexión segura entre tu frontend de blazor y el backend de back4app, allanando el camino para realizar operaciones de base de datos, gestión de usuarios y más paso 2 – configuración de la base de datos guardar y consultar datos con tu proyecto de back4app configurado y el sdk de parse integrado en tu aplicación blazor, ahora puedes comenzar a guardar y recuperar datos la forma más sencilla de crear un registro es usar el parseobject clase somedataservice cs using parse; using system threading tasks; public class somedataservice { public async task\<parseobject> createtodoitemasync(string title, bool iscompleted) { var todo = new parseobject("todo"); todo\["title"] = title; todo\["iscompleted"] = iscompleted; try { await todo saveasync(); console writeline("todo saved successfully " + todo objectid); return todo; } catch (exception ex) { console writeline("error saving todo " + ex message); return null; } } public async task\<ilist\<parseobject>> fetchtodosasync() { var query = new parsequery\<parseobject>("todo"); try { var results = await query findasync(); console writeline("fetched todo items " + results count); return results; } catch (exception ex) { console writeline("error fetching todos " + ex message); return null; } } } alternativamente, puedes usar los endpoints de la api rest de back4app para operaciones diseño de esquema y tipos de datos por defecto, parse permite la 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 agrega columnas relevantes, como título (string) y estácompletado (boolean) back4app también admite varios tipos de datos string , number , boolean , object , date , file , pointer, array, relation , geopoint , y polygon puedes elegir el tipo apropiado para cada campo si lo prefieres, también puedes dejar que parse cree automáticamente estas columnas cuando guardes un objeto desde tu aplicación blazor back4app ofrece un agente de ia que puede ayudarte a diseñar tu modelo de datos abre el agente de ia desde el panel de control de tu aplicación 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 la consistencia en tu aplicación datos relacionales si tienes datos relacionales por ejemplo, un category objeto que apunta a múltiples todo elementos puedes usar pointers o relations en parse el proceso es similar a reactjs pero usando objetos net somedataservice cs (continuación) public async task\<parseobject> createtaskforcategoryasync(string categoryobjectid, string title) { var todo = new parseobject("todo"); // crear un puntero a la categoría var categorypointer = parseobject createwithoutdata("category", categoryobjectid); todo\["title"] = title; todo\["category"] = categorypointer; try { await todo saveasync(); return todo; } catch (exception ex) { console writeline("error al crear la tarea con relación a la categoría " + ex message); return null; } } al consultar, incluye datos de puntero somedataservice cs (continuation) public async task\<ilist\<parseobject>> fetchtodoswithcategoryasync() { var query = new parsequery\<parseobject>("todo") include("category"); try { var todoswithcategory = await query findasync(); return todoswithcategory; } catch (exception ex) { console writeline("error fetching todos with category " + ex message); return null; } } consultas en vivo para actualizaciones en tiempo real en una aplicación blazor server, considera usar conexión signalr para consultas en vivo aunque el sdk de parse net soporta consultas en vivo, integrarlas directamente dentro de una aplicación blazor puede requerir una configuración adicional con signalr para la comunicación en tiempo real habilitar consultas en vivo en tu panel de back4app bajo la configuración del servidor asegúrate de que “consultas en vivo” esté activado configurar cliente de consulta en vivo en net si es necesario sin embargo, para aplicaciones blazor, aprovechar signalr podría ser más idiomático para conexiones del lado del servidor debido a la complejidad de configurar consultas en vivo dentro de blazor y las posibles limitaciones del sdk de parse net en blazor webassembly, es posible que necesites implementar un servicio del lado del servidor que conecte las consultas en vivo de parse con los clientes de signalr 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 por ejemplo somedataservice cs (acl example) public async task\<parseobject> createprivatetodoasync(string title, parseuser owneruser) { var todo = new parseobject("todo"); todo\["title"] = title; // create an acl granting read/write access only to the owner var acl = new parseacl(owneruser); acl publicreadaccess = false; acl publicwriteaccess = false; todo acl = acl; try { await todo saveasync(); return todo; } catch (exception ex) { console writeline("error saving private todo " + ex message); return null; } } cuando guardas el objeto, tiene un acl que impide que cualquier persona excepto el usuario especificado lo lea o lo modifique permisos a nivel de clase (clps) los clps rigen 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 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 https //www back4app com/docs/security/parse security 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 tus 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 dado que estas funciones y disparadores se ejecutan en el servidor, puedes confiar en que manejarán lógica confidencial, procesarán datos sensibles o realizarán llamadas a la api solo del backend, procesos que quizás no quieras exponer directamente al cliente 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 archivo main js, el servidor parse en ejecución se actualiza con tu último código estructura del archivo main js un típico main js podría contener declaraciones de require para cualquier módulo necesario (paquetes npm, módulos integrados de node, u otros archivos de código en la nube) definiciones de funciones en la nube usando parse cloud define() triggers como parse cloud beforesave() , parse cloud aftersave() , etc módulos npm que instalaste (si es necesario) main js // main js // 1 import necessary modules and other cloud code files const axios = require('axios'); const report = require(' /reports'); // 2 define a custom cloud function 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; }); // 3 example of a beforesave trigger parse cloud beforesave('todo', (request) => { const todo = request object; if (!todo get('title')) { throw new error('todo must have a title'); } }); con la capacidad de instalar y usar módulos npm, el código en la nube se vuelve increíblemente flexible, permitiéndote integrar con apis externas, realizar transformaciones de datos o ejecutar lógica compleja del lado del servidor casos de uso típicos lógica de negocios por ejemplo, agregar datos para análisis o realizar cálculos antes de guardar en la base de datos validaciones de datos asegurarse de que ciertos campos estén presentes o que un usuario tenga los permisos correctos antes de guardar o eliminar un registro disparadores realizar acciones cuando los datos cambian (por ejemplo, enviar una notificación cuando un usuario actualiza su perfil) integraciones conectar con apis o servicios de terceros aplicación de seguridad validar y sanitizar entradas para hacer cumplir la seguridad antes de realizar operaciones sensibles despliega tu función a continuación se muestra una función simple de cloud code que calcula la longitud de una cadena de texto enviada desde el cliente main js // main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); desplegando a través de la back4app cli https //www back4app com/docs/local development/parse cli 1 instalar el cli para linux/macos curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash para windows descarga el b4a exe https //github com/back4app/parse cli/releases/download/release 3 3 1/b4a exe archivo de la página de lanzamientos 2 configura tu clave de cuenta https //www back4app com/docs/local development/parse cli#f cxi b4a configure accountkey 3 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 blazor usando el sdk de parse net somedataservice cs (calling function) public async task\<int?> gettextlengthasync(string text) { try { var result = await parsecloud callfunctionasync\<dictionary\<string, object>>("calculatetextlength", new dictionary\<string, object> { { "text", text } }); if(result != null && result containskey("length")) return convert toint32(result\["length"]); return null; } catch(exception ex) { console writeline("error calling cloud function " + ex message); return null; } } también puedes llamarlo a través de rest o graphql como se muestra en el tutorial de reactjs paso 5 – configurando la autenticación de usuarios autenticación de usuario en back4app back4app aprovecha la clase parse user como base para la autenticación por defecto, parse maneja el hash de contraseñas, los tokens de sesión y el almacenamiento seguro esto significa que no tienes que configurar flujos de seguridad complejos manualmente configurando la autenticación de usuario en una aplicación blazor, puedes crear un nuevo usuario con authservice cs using parse; using system threading tasks; public class authservice { public async task signupuserasync(string username, string password, string email) { var user = new parseuser() { username = username, password = password, email = email }; try { await user signupasync(); console writeline("user signed up successfully!"); } catch (exception ex) { console writeline("error signing up user " + ex message); } } public async task loginuserasync(string username, string password) { try { var user = await parseuser loginasync(username, password); console writeline("user logged in " + user username); } catch (exception ex) { console writeline("error logging in user " + ex message); } } } gestión de sesiones después de un inicio de sesión exitoso, parse crea un token de sesión que se almacena en el objeto de usuario en tu aplicación blazor, puedes acceder al usuario que ha iniciado sesión actualmente somecomponent razor cs var currentuser = parseuser currentuser; if (currentuser != null) { console writeline("currently logged in user " + currentuser username); } else { console writeline("no user is logged in"); } parse maneja automáticamente las sesiones basadas en tokens en segundo plano, pero también puedes gestionarlas o revocarlas manualmente para cerrar sesión authservice cs (logout) public async task logoutasync() { await parseuser logoutasync(); console writeline("user logged out"); } integración de inicio de sesión social back4app y parse pueden integrarse con proveedores de oauth populares, como google o facebook la configuración puede variar y a menudo implica la configuración del lado del servidor o paquetes adicionales consulta la documentación de inicio de sesión social https //www back4app com/docs/platform/sign in with apple para instrucciones detalladas dado que las aplicaciones de blazor server se ejecutan en asp net core, puedes integrar el inicio de sesión social utilizando proveedores de identidad de asp net core junto con parse para una autenticación sin problemas verificación de correo electrónico y restablecimiento de contraseña para habilitar la verificación de correo electrónico y el 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 estas características mejoran la seguridad de la cuenta y la experiencia del usuario al validar la propiedad del correo electrónico y proporcionar un método seguro de recuperación de contraseña paso 6 – manejo del almacenamiento de archivos subiendo y recuperando archivos parse incluye la parsefile clase para manejar las subidas de archivos, que back4app almacena de forma segura fileservice cs using parse; using system; using system threading tasks; public class fileservice { public async task\<string> uploadimageasync(byte\[] filedata, string filename) { var parsefile = new parsefile(filename, filedata); try { await parsefile saveasync(); console writeline("file saved " + parsefile url); return parsefile url; } catch (exception ex) { console writeline("error uploading file " + ex message); return null; } } } para adjuntar el archivo a un objeto fileservice cs (continued) public async task\<parseobject> createphotoobjectasync(byte\[] filedata, string filename) { var photo = new parseobject("photo"); var parsefile = new parsefile(filename, filedata); photo\["imagefile"] = parsefile; try { await photo saveasync(); return photo; } catch (exception ex) { console writeline("error creating photo object " + ex message); return null; } } recuperando la url del archivo somecomponent razor cs var imagefile = photo get\<parsefile>("imagefile"); var imageurl = imagefile url; puedes mostrar esta imageurl en tus componentes de blazor configurándola como la fuente de un \<img> etiqueta seguridad de archivos parse server proporciona configuraciones flexibles para gestionar la seguridad de la carga de archivos usa acls en parsefiles o establece configuraciones a nivel de servidor según sea necesario 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 un correo electrónico diario con un resumen un cloud job típico 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 el panel de control) ve al panel de control de back4app > configuraciones de la app > configuraciones del servidor > tareas en segundo plano programa el trabajo para que se ejecute diariamente o en el intervalo que mejor se adapte a tus necesidades los trabajos en la nube te permiten automatizar el mantenimiento en segundo plano u otros procesos periódicos sin requerir intervención manual paso 8 – integrando webhooks los 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, 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 ” también puedes agregar encabezados http personalizados o cargas útiles si es necesario también puedes definir webhooks en cloud code haciendo solicitudes http personalizadas en disparadores como beforesave, aftersave 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 rutinarias de datos 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 de administración habilítala yendo a app dashboard > más > admin app y haciendo clic en el botón “habilitar aplicación de administración ” crea un primer usuario administrador (nombre de usuario/contraseña), lo que genera automáticamente un nuevo rol (b4aadminuser) y clases (b4asetting, b4amenuitem y b4acustomfield) en el esquema de tu aplicación elige un subdominio para acceder a la interfaz de administración y completa la configuración inicia sesión utilizando las credenciales de administrador que creaste para acceder a tu nuevo panel de administración una vez habilitada, la aplicación de administración de back4app facilita la visualización, edición o eliminación de registros de tu base de datos sin requerir el uso directo del panel de control de parse o código de backend conclusión al seguir este tutorial completo, has creado un backend seguro para una aplicación blazor en back4app configurado una base de datos con esquemas de clase, tipos de datos y relaciones integrado consultas en tiempo real donde sea aplicable para actualizaciones de datos inmediatas 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 blazor y un robusto backend de back4app, ahora estás bien equipado para desarrollar aplicaciones web ricas en características, 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 construye una aplicación blazor lista para producción extendiendo este backend para manejar modelos de datos más complejos, estrategias de caché y optimizaciones de rendimiento integra características avanzadas como flujos de autenticación especializados, control de acceso basado en roles o apis externas 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 combina las técnicas aprendidas aquí con apis de terceros para crear aplicaciones complejas del mundo real