Quickstarters
Feature Overview
How to Build a Backend for MacOS?
46 min
introducción en este tutorial, aprenderás cómo construir un backend para macos utilizando back4app y el sdk de parse swift 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 aplicación de macos 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, obtendrá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 de macos lista para producción, o incorporar fácilmente lógica personalizada y apis de terceros según sea necesario dominar este enfoque te empoderará para optimizar tus flujos de trabajo y aprender cómo construir un backend para macos de manera rápida y eficiente 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 un entorno de desarrollo de macos (xcode) puedes instalar xcode desde el mac app store https //apps apple com/us/app/xcode/id497799835 swift package manager o cocoapods para instalar el sdk de parse swift documentación de parse swift https //github com/netreconlab/parse swift conocimientos básicos de swift y desarrollo de aplicaciones macos documentación oficial de apple https //developer apple com/documentation/swift la familiaridad con swiftui o appkit es útil asegúrate de tener todos estos requisitos previos en su lugar antes de comenzar tener tu proyecto de back4app configurado y tu entorno de desarrollo local de macos listo te ayudará a seguir más fácilmente paso 1 – configuración del proyecto back4app crear un nuevo proyecto el primer paso para construir tu backend de macos 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, “macos 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 swift 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 de macos a back4app implica instalar el sdk de parse swift 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 app” o “seguridad y claves” de tu app para encontrar tu id de aplicación y clave de cliente (o clientkey ) también encontrarás la url del servidor parse (a menudo en el formato https //parseapi back4app com ) instala el sdk de parse swift en tu proyecto de macos si usas swift package manager dependencies \[ package(url "https //github com/netreconlab/parse swift git", from "5 0 0") ] si usas cocoapods , añade esto a tu podfile pod 'parseswiftog' inicializa parse en tu aplicación de macos (por ejemplo, en appdelegate swift si usas appkit, o en una @main struct de swiftui si construyes una aplicación de swiftui) import parseswift import swiftui @main struct mymacosapp app { init() { task { do { try await parseswift initialize( applicationid "your application id", clientkey "your client key", serverurl url(string "https //parseapi back4app com")! ) } catch { print("error initializing parse \\(error)") } } } var body some scene { windowgroup { contentview() } } } al completar este paso, has establecido una conexión segura entre tu front end de macos (ui) y el backend de back4app todas las solicitudes y transacciones de datos se enrutan de manera segura a través de este sdk, reduciendo la complejidad de las llamadas manuales rest o graphql (aunque aún puedes usarlas si es necesario) paso 2 – configuración de la base de datos guardando y consultando datos con tu proyecto de back4app configurado y el sdk de parse swift integrado en tu aplicación macos, ahora puedes comenzar a guardar y recuperar datos la forma más sencilla de crear un objeto es definir una estructura que conforme a parseobject y luego llamar a save() struct todo parseobject { // parseobject required properties var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom properties var title string? var iscompleted bool? } func createtodoitem(title string, iscompleted bool) async { var todo = todo() todo title = title todo iscompleted = iscompleted do { try await todo save() print("todo saved successfully ") } catch { print("error saving todo \\(error)") } } func fetchtodos() async > \[todo] { let query = todo query() do { return try await query find() } catch { print("error fetching todos \\(error)") return \[] } } alternativamente, puedes usar la api rest o graphql 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 back4app también proporciona una interfaz graphql mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } estas diversas opciones te permiten integrar operaciones de datos de la manera que mejor se adapte a tu proceso de desarrollo, ya sea a través del sdk de parse swift, rest o graphql 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 añade columnas relevantes, como título (string) y estácompleto (boolean) back4app soporta varios tipos de datos string , número , booleano , objeto , fecha , archivo , puntero , array , relación , geopoint , y polígono 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 de macos por primera vez 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 control de la app 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 datos relacionales si tienes datos relacionales—digamos, un category objeto que apunta a múltiples todo elementos—puedes usar pointers o relations en parse swift struct category parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom fields var name string? } struct todo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var title string? var category pointer\<category>? } func createtaskforcategory(categoryobjectid string, title string) async { let pointer = pointer\<category>(objectid categoryobjectid) var todo = todo() todo title = title todo category = pointer do { try await todo save() print("todo linked to category") } catch { print("error creating task with category relationship \\(error)") } } func fetchtodoswithcategory() async { let query = todo query() include("category") do { let todos = try await query find() print("fetched todo items with category \\(todos)") } catch { print("error fetching todos \\(error)") } } consultas en vivo para actualizaciones en tiempo real, back4app proporciona live queries al habilitar live queries en tu panel de back4app, puedes suscribirte a cambios en una clase específica desde tu aplicación macos habilitar live queries en tu panel de back4app bajo la configuración del servidor inicializar live queries en el código (el cliente de live query de swift aún está en desarrollo, pero puedes usar enfoques impulsados por la comunidad o estar atento a las actualizaciones oficiales de parse swift) src/parseconfig swift // example (subject to support in parse swift) // live query’s subdomain // parseswift configuration livequeryserverurl = url(string "wss\ //your subdomain here b4a io")! una vez suscrito, recibirás notificaciones cada vez que se cree, actualice o elimine un nuevo todo esto es especialmente valioso para aplicaciones de escritorio colaborativas o altamente interactivas donde múltiples usuarios o procesos necesitan ver los últimos datos al instante 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, si tu aplicación de macos tiene un concepto de “tareas privadas” para el usuario actualmente conectado import parseswift func createprivatetodo(title string) async { guard let currentuser = user current else { return } var todo = todo() todo title = title // create an acl granting read/write access only to the owner var acl = parseacl() acl setreadaccess(currentuser, value true) acl setwriteaccess(currentuser, value true) todo acl = acl do { try await todo save() print("private todo saved") } catch { print("error saving private todo \\(error)") } } 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 la clase, como si la clase es públicamente legible o escribible, o si solo ciertos roles pueden acceder a ella ve a tu panel de back4app , selecciona tu aplicación y abre la base de datos sección selecciona una clase (por ejemplo, “todo”) abre los permisos a nivel de clase configura tus valores predeterminados, como “requiere autenticación” para leer o escribir, o “sin acceso” para el público 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 propios servidores o infraestructura al escribir código en la nube, puedes extender tu backend de back4app con lógica empresarial adicional, validaciones, disparadores e integraciones que se ejecutan de manera segura y eficiente en el servidor parse 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 archivo luego despliegas este archivo en tu proyecto de back4app, y se ejecuta en el entorno de parse server esto te permite mantener la lógica sensible en el lado del servidor casos de uso típicos lógica empresarial cálculos o transformaciones antes de guardar datos validaciones de datos asegurar que ciertos campos cumplan con los criterios disparadores realizar acciones cuando los datos cambian integraciones conectar con apis externas (por ejemplo, pagos, notificaciones) ejemplo de función // 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 cli de back4app instalar la cli curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash configura tu clave de cuenta b4a configure accountkey desplegar tu código en la nube b4a deploy llamando a tu función desde macos usando swift import parseswift func gettextlength(text string) async { do { let result = try await parsecloud callfunction("calculatetextlength", with \["text" text]) if let resultdict = result as? \[string any], let length = resultdict\["length"] as? int { print("text length \\(length)") } } catch { print("error calling cloud function \\(error)") } } también puedes llamarlo a través de rest o graphql, de la misma manera que en otros frameworks paso 5 – configuración de la autenticación de usuario autenticación de usuario en back4app back4app aprovecha la parseuser clase como base para la autenticación por defecto, parse maneja el hash de contraseñas, los tokens de sesión y el almacenamiento seguro, por lo que no tienes que configurar flujos de seguridad complejos manualmente configurando la autenticación de usuario en una aplicación de macos, puedes crear un nuevo usuario con struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // default properties var username string? var email string? var emailverified bool? var password string? var authdata \[string \[string string]?]? } func signupuser(username string, password string, email string) async { var newuser = user() newuser username = username newuser password = password newuser email = email do { newuser = try await newuser signup() print("user signed up successfully!") } catch { print("error signing up user \\(error)") } } func loginuser(username string, password string) async { do { let user = try await user login(username username, password password) print("user logged in \\(user)") } catch { print("error logging in user \\(error)") } } a través de rest, un inicio de sesión podría verse así curl x get \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ g \\ \ data urlencode 'username=alice' \\ \ data urlencode 'password=secret123' \\ https //parseapi back4app com/login gestión de sesiones después de un inicio de sesión exitoso, parse crea un token de sesión puedes acceder al usuario que ha iniciado sesión actualmente if let currentuser = user current { print("currently logged in user \\(currentuser username ?? "no username")") } else { print("no user is logged in") } cerrar sesión do { try await user logout() } catch { print("error logging out \\(error)") } integración de inicio de sesión social puedes integrar proveedores populares como google, apple o facebook configurando authdata las instrucciones detalladas varían, así que consulta documentación de inicio de sesión social https //www back4app com/docs/platform/sign in with apple 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 back4app habilita la verificación de correo electrónico configura la dirección del remitente , las plantillas de correo electrónico y tu dominio personalizado si lo deseas esto mejora la seguridad de la cuenta al validar los correos electrónicos de los usuarios y proporcionar un método 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 func uploadfile(data data) async > parsefile? { let file = parsefile(name "doc txt", data data) do { let savedfile = try await file save() print("file saved ", savedfile url ?? "no url") return savedfile } catch { print("error uploading file ", error) return nil } } adjúntalo a un objeto struct photo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var imagefile parsefile? } func createphotoobject(file parsefile) async { var photo = photo() photo imagefile = file do { try await photo save() print("photo object saved!") } catch { print("error saving photo ", error) } } seguridad de archivos puedes configurar la seguridad de carga de archivos en la configuración de tu servidor parse por ejemplo, controlando qué usuarios pueden subir o eliminar archivos ten en cuenta que si compartes la url del archivo, cualquier persona con esa url puede acceder a él a menos que hayas establecido reglas más estrictas del lado del servidor paso 7 – verificación de correo electrónico y restablecimiento de contraseña descripción general la verificación de correo electrónico y los restablecimientos de contraseña son críticos para la gestión segura de usuarios ya hemos tocado este tema en paso 5 , pero como recordatorio habilita estas funciones en el panel de control de back4app (configuración de correo electrónico) configura las plantillas de correo electrónico “habilitar verificación de correo electrónico” y “restablecimiento de contraseña” prueba el flujo desde tu aplicación de macos paso 8 – programación de tareas con cloud jobs cloud jobs cloud jobs te permite programar y ejecutar tareas rutinarias en tu backend, como enviar correos electrónicos periódicos o limpiar datos por 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); const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; }); despliega tu cloud code con el nuevo trabajo ve al dashboard de back4app > configuración de la app > configuración del servidor > trabajos en segundo plano programa el trabajo (por ejemplo, diario) paso 9 – integrando webhooks webhooks permiten que tu app de 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 dashboard de back4app > más > webhooks configura un endpoint (por ejemplo, https //your external service com/webhook endpoint ) configura 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 slack cada vez que se crea un nuevo todo crea una app de slack que acepte webhooks entrantes copia la url del webhook de slack en tu dashboard de back4app, establece el endpoint a esa url de slack para el evento “nuevo registro en la clase todo ” paso 10 – 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 de administración habilitar yendo a app dashboard > más > admin app y haciendo clic en “habilitar aplicación de administración ” crear un primer usuario administrador , que genera automáticamente un nuevo rol ( b4aadminuser ) y clases relevantes en el esquema de tu aplicación elige un subdominio para acceder a la interfaz de administración y completa 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 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 su 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, usted ha creado un backend seguro para una aplicación de macos 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 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 front end de macos y un robusto backend de back4app, ahora estás bien equipado para desarrollar aplicaciones de escritorio 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 próximos pasos construir una aplicación de macos lista para producción ampliando 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 comunicación 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