Quickstarters
Feature Overview
¿Cómo construir un backend para SwiftUI?
42 min
introducción en este tutorial, aprenderás cómo construir un backend completo para una swiftui aplicación ios utilizando back4app te mostraremos cómo integrar el sdk de parse swift en tu proyecto de swiftui y aprovechar las características clave 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, para crear un backend seguro y escalable este enfoque te ayuda a almacenar datos de forma segura, realizar operaciones del lado del servidor sin configurar tu propia infraestructura y escalar fácilmente tu aplicación ios o aplicación web según sea necesario 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 tu propio servidor y base de datos al final, entenderás cómo construir un backend para swiftui que puede ser ampliado a un entorno de producción o integrado con lógica y apis personalizadas ¡comencemos a crear un robusto, backend escalable con un mínimo de sobrecarga! requisitos previos 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 swiftui necesitarás xcode instalado en tu máquina y un proyecto básico de swiftui o ios configurado swift package manager o cocoapods para agregar el sdk de parse swift documentación del sdk de parse swift https //github com/netreconlab/parse swift familiaridad con swift y swiftui si eres nuevo en swiftui, revisa documentación de swiftui de apple https //developer apple com/documentation/swiftui antes de comenzar asegúrate de que todo esto esté en su lugar antes de comenzar tener tu proyecto de back4app configurado y tu entorno local de swiftui 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 swiftui 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, “swiftui 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 swiftui 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 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 clave de cliente (o clave de javascript) también encontrarás la url del servidor de parse (a menudo en el formato https //parseapi back4app com ) instala el sdk de parse swift si usas swift package manager , abre tu proyecto en xcode y luego archivo → agregar paquetes → ingresa la url https //github com/netreconlab/parse swift git elige “hasta la siguiente versión importante” de las reglas de versión y confirma si usas cocoapods pod 'parseswiftog' inicializa parse en tu aplicación por ejemplo, en tu app struct @main struct myapp app { init() { do { try await parseswift initialize( applicationid "your app 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 swiftui y el backend de back4app todas las solicitudes y transacciones de datos son manejadas por el sdk de parse swift, reduciendo la complejidad de las llamadas manuales rest o graphql (aunque aún puedes usarlas cuando sea 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, ahora puedes comenzar a guardar y recuperar datos a continuación se muestra un simple parseobject ejemplo supongamos que tenemos una todo estructura import parseswift struct todo parseobject { // parseobject conformance var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // custom properties var title string? var iscompleted bool? } guardando un nuevo todo func createtodoitem(title string, iscompleted bool) async { var todo = todo() todo title = title todo iscompleted = iscompleted do { let savedtodo = try await todo save() print("todo saved successfully \\(savedtodo)") } catch { print("error saving todo \\(error)") } } consultando todos los todos func fetchtodos() async { do { let todos = try await todo query() find() print("fetched todos \\(todos)") } catch { print("error fetching todos \\(error)") } } alternativamente, puedes usar back4app’s rest api endpoints, o graphql 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 graphql mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } tener múltiples opciones (parse swift sdk, rest, graphql) te permite elegir el enfoque que mejor funcione para tu flujo de trabajo 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 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 title (string) y iscompleted (boolean) back4app 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 back4app también proporciona un ai agent que puede ayudarte a diseñar tu modelo de datos abre el ai agent desde el panel de control de tu aplicación describe tu modelo de datos en un lenguaje simple (por ejemplo, “por favor, crea un nuevo esquema de clase todo ”) deja que el ai agent genere el esquema por ti 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 por ejemplo struct category parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? 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 createtodowithcategory(categoryid string, title string) async { var todo = todo() todo title = title // construct pointer let categorypointer = pointer\<category>(objectid categoryid) todo category = categorypointer do { try await todo save() } catch { print("error creating todo with category relationship \\(error)") } } al consultar, también puedes incluir datos de puntero let query = todo query() include("category") do { let todoswithcategory = try await query find() print("todos with category \\(todoswithcategory)") } catch { print("error fetching todos \\(error)") } consultas en vivo para actualizaciones en tiempo real, back4app proporciona consultas en vivo en tu aplicación swiftui, puedes suscribirte a cambios en una clase específica habilitar consultas en vivo en tu panel de back4app bajo configuraciones del servidor suscribirse en código // example snippet using the parse swift subscription system task { let subscription = try todo query() subscribecallback() // react to events for await event in subscription { switch event { case entered(let todo) print("new todo entered \\(todo)") case updated(let todo) print("todo updated \\(todo)") case left(let todo) print("todo deleted or left subscription \\(todo)") default break } } } cada vez que un todo es creado, actualizado o eliminado en el servidor, tu aplicación recibe una notificación en tiempo real esta función es muy útil para aplicaciones colaborativas o dinámicas que requieren sincronización de datos inmediata paso 3 – aplicando seguridad con acls y clps mecanismo de seguridad de back4app back4app proporciona listas de control de acceso (acls) y permisos a nivel de clase (clps) para una robusta seguridad de datos estos 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 por ejemplo, para asegurar que solo un usuario particular pueda leer/escribir un todo func createprivatetodo(title string, user user) async { var todo = todo() todo title = title var acl = parseacl() // grant read/write to the owner only acl setreadaccess(true, for user) acl setwriteaccess(true, for user) todo acl = acl do { let saved = try await todo save() print("private todo saved \\(saved)") } catch { print("error saving private todo \\(error)") } } permisos a nivel de clase (clps) los clps rigen los valores predeterminados de toda una clase, como si la clase es públicamente legible o escribible, o si solo ciertos roles pueden acceder a ella ve al panel de control de back4app y selecciona tu aplicación abre la base de datos sección, selecciona una clase (por ejemplo, todo ) abre la pestaña de permisos a nivel de clase configura valores predeterminados como “requiere autenticación” o “sin acceso ” estos permisos establecen una base amplia, mientras que las acl te permiten ajustar la seguridad a nivel de objeto combinar ambos asegura un modelo de seguridad sólido para más detalles, consulta 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 te permite ejecutar código personalizado del lado del servidor en swift (o javascript) sin gestionar servidores es ideal para agregar lógica de negocio, validaciones de datos, disparadores o integraciones de backend que no deberían ejecutarse desde el cliente cómo funciona escribe tu código en la nube en un archivo como main js (javascript) o aprovecha el entorno de código en la nube basado en swift despliega en tu proyecto de back4app el código se ejecuta en el entorno de parse server, por lo que no necesitas mantener tu propio servidor llama a tu código en la nube desde el cliente a través del sdk de swift, rest o graphql casos de uso típicos lógica de negocio validaciones de datos complejas, cálculos de campos o integraciones externas disparadores de datos ejecutar lógica cuando un objeto es guardado, actualizado o eliminado seguridad proteger operaciones sensibles del cliente ejecutándolas en el lado del servidor función de ejemplo a continuación se muestra un ejemplo de javascript cloud code (ya que cloud code utiliza principalmente js en back4app) que calcula la longitud del texto main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); despliegue a través de la cli instalar el back4app cli https //www back4app com/docs/local development/parse cli configurar tu clave de cuenta b4a configure accountkey desplegar cloud code b4a deploy llamando a tu función desde swift struct cloudfunction { static func calculatetextlength(text string) async throws > int { do { if let result = try await parsecloud callfunction("calculatetextlength", with \["text" text]) as? \[string any], let length = result\["length"] as? int { return length } } catch { throw error } return 0 } } task { do { let len = try await cloudfunction calculatetextlength(text "hello back4app") print("text length \\(len)") } catch { print("error calling cloud function \\(error)") } } a través de rest curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"text" "hello back4app"}' \\ https //parseapi back4app com/functions/calculatetextlength paso 5 – configuración de la autenticación de usuario autenticación de usuario en back4app back4app utiliza la parseuser clase para manejar la autenticación segura el hash de contraseñas, los tokens de sesión y los datos se manejan automáticamente, permitiéndote enfocarte en la lógica de la aplicación configurando la autenticación de usuario registrar un nuevo usuario struct user parseuser { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? // required fields 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 { try await newuser signup() print("user signed up successfully!") } catch { print("error signing up user \\(error)") } } iniciar sesión como usuario existente 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)") } } tokens de sesión se manejan automáticamente por parse puedes cerrar sesión func logout() async { do { try await user logout() print("user logged out ") } catch { print("error logging out \\(error)") } } integración de inicio de sesión social las integraciones con google , apple , facebook , etc , son posibles con configuración adicional consulta la documentación de inicio de sesión social https //www back4app com/docs/platform/sign in with apple para más detalles verificación de correo electrónico y restablecimiento de contraseña habilita la verificación de correo electrónico en tu panel de back4app y configura los correos electrónicos de restablecimiento de contraseña para que los usuarios puedan recuperar sus cuentas de forma segura para restablecimientos de contraseña try await user passwordreset(email "user\@example com") paso 6 – manejo del almacenamiento de archivos subiendo y recuperando archivos parse incluye parsefile para manejar las subidas de archivos func uploadimage(filedata data) async { let parsefile = parsefile(name "photo jpg", data filedata) do { let savedfile = try await parsefile save() print("file saved at \\(savedfile url ?? "no url")") } catch { print("error uploading file \\(error)") } } adjúntalo a un parseobject struct photo parseobject { var objectid string? var createdat date? var updatedat date? var acl parseacl? var originaldata data? var imagefile parsefile? } func createphotoobject(filedata data) async { var photo = photo() photo imagefile = parsefile(name "image jpg", data filedata) do { = try await photo save() } catch { print("error saving photo object \\(error)") } } seguridad de archivos por defecto, los archivos son accesibles a través de una url pública puedes configurar la seguridad de los archivos usando configuraciones del servidor parse https //www back4app com/docs/platform/file storage para controles de archivo más estrictos, asegúrate de que solo los usuarios autenticados o roles especificados puedan subir o recuperar archivos paso 7 – programación de tareas con cloud jobs cloud jobs te permiten programar y ejecutar tareas recurrentes como limpiar datos o enviar correos electrónicos // main js (javascript cloud code) 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); } }); después del despliegue, programa lo a través del panel de control de back4app en configuración del servidor > tareas en segundo plano paso 8 – integración de webhooks webhooks permiten que tu aplicación de back4app envíe solicitudes http a servicios externos (como stripe) cada vez que ocurren ciertos eventos esto es útil para conectarse a herramientas de terceros u otras integraciones del lado del servidor ve a webhooks en tu panel de back4app > más > webhooks agrega un endpoint (por ejemplo, https //your service com/webhook ) configura qué eventos (por ejemplo, nuevo registro en la clase todo) activarán el webhook por ejemplo, podrías enviar un mensaje de slack cada vez que un usuario crea un nuevo todo esto te ayuda a mantener los servicios externos sincronizados con tus datos de back4app paso 9 – explorando el panel de administración de back4app la aplicación de administración de back4app es una interfaz de gestión basada en la web para usuarios no técnicos para realizar operaciones crud en tus datos proporciona una interfaz de usuario amigable que es independiente del panel de control de parse, lo que facilita la gestión de datos en producción habilitando la aplicación de administración ve a tu panel de la aplicación > más > aplicación de administración y haz clic en “habilitar aplicación de administración ” crea un usuario administrador , que genera automáticamente un rol de administrador y clases asociadas elige un subdominio para la interfaz de administración, luego inicia sesión para gestionar tus datos a través de una interfaz de usuario simple de apuntar y hacer clic conclusión siguiendo esta guía completa, has aprendido cómo construir un backend para swiftui utilizando back4app y el sdk de parse swift cómo almacenar datos de forma segura con esquemas de clase personalizados y relaciones cómo integrar consultas en tiempo real (consultas en vivo) para actualizaciones inmediatas de datos cómo aplicar medidas de seguridad utilizando acls y clps para proteger y gestionar el acceso a los datos cómo ejecutar lógica de negocio a través de cloud code cómo manejar el almacenamiento de archivos , autenticación y programación de tareas en segundo plano con cloud jobs cómo integrar tu aplicación con servicios externos utilizando webhooks con estas habilidades, puedes construir una aplicación ios o aplicación web que sea fácil de gestionar, segura y lista para escalar explora características más avanzadas, como permisos basados en roles, notificaciones push o almacenamiento en caché avanzado también puedes integrar otras apis o adaptar tu cloud code para satisfacer casos de uso especializados feliz codificación , y disfruta construyendo aplicaciones increíbles en back4app! próximos pasos aplicación swiftui lista para producción extiende este backend para manejar modelos de datos más complejos, almacenamiento en caché y mejoras de rendimiento características avanzadas profundiza en autenticación especializada, acceso basado en roles o integraciones de api de terceros (como stripe) explora la documentación oficial de back4app para profundizar en seguridad del lado del servidor , análisis de registros y ajuste avanzado de bases de datos revisa tutoriales adicionales chat en tiempo real, servicios basados en ubicación o aplicaciones multi tenant combina los métodos aprendidos aquí con apis externas para crear soluciones sofisticadas del mundo real