Quickstarters
Feature Overview
¿Cómo construir un backend para Kotlin?
39 min
introducción en este tutorial, aprenderás a construir un backend completo para una aplicación de android (escrita en kotlin) utilizando back4app recorreremos la integración de características esenciales de back4app, incluyendo 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 aplicación de android también verás cómo la configuración rápida y el entorno intuitivo de back4app 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 básico de desarrollo de android/kotlin asegúrate de tener android studio instalado en tu máquina puedes seguir la documentación oficial de configuración de android studio https //developer android com/studio si aún no lo has configurado un mínimo de android 4 0 o superior en la configuración gradle de tu aplicación típicamente, establecerás esto en tu minsdkversion en el build gradle de tu módulo familiaridad con kotlin y conceptos básicos de android documentación para desarrolladores de android https //developer android com/docs si eres nuevo en android o kotlin, revisa la documentación oficial o un tutorial para principiantes antes de comenzar 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 android 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 android 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, “android kotlin 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 integrar tu aplicación de android con back4app implica agregar las dependencias del sdk de parse para android a tus archivos gradle e inicializarlas 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 clave de cliente también encontrarás la url del servidor parse (a menudo en el formato https //parseapi back4app com ) agrega el sdk de parse a tus build gradle archivos en tu build gradle raíz (nivel de proyecto) allprojects { repositories { maven { url "https //jitpack io" } } } en tu build gradle a nivel de módulo (usualmente app/build gradle ) dependencies { implementation "com github parse community parse sdk android\ parse\ latest version here" } inicializa parse en tu aplicación de android crea una application personalizada (por ejemplo, app kt ) si aún no tienes una package com example app import android app application import com parse parse import com parse parseinstallation class app application() { override fun oncreate() { super oncreate() // initialize parse parse initialize( parse configuration builder(this) applicationid("your app id") // from back4app dashboard clientkey("your client key") // from back4app dashboard server("https //parseapi back4app com/") build() ) // (optional) track statistics around app opens parseinstallation getcurrentinstallation() saveinbackground() } } a continuación, abre tu androidmanifest xml y registra la application personalizada \<?xml version="1 0" encoding="utf 8"?> \<manifest xmlns\ android="http //schemas android com/apk/res/android" package="com example app"> \<application android\ name=" app" android\ icon="@mipmap/ic launcher" android\ label="@string/app name" android\ usescleartexttraffic="true" > \</application> \</manifest> al completar este paso, has establecido una conexión segura entre tu front end de android (kotlin) 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 cuando sea necesario) 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 de android, ahora puedes comenzar a guardar y recuperar datos a continuación se muestra un ejemplo utilizando kotlin para crear y obtener datos import com parse parseobject import com parse parsequery import com parse savecallback import com parse parseexception // example create a todo item fun createtodoitem(title string, iscompleted boolean) { val todo = parseobject("todo") todo put("title", title) todo put("iscompleted", iscompleted) todo saveinbackground { e parseexception? > if (e == null) { println("todo saved successfully") } else { println("error saving todo ${e localizedmessage}") } } } // example query all todo items fun fetchtodos() { val query = parsequery\<parseobject>("todo") query findinbackground { results, e > if (e == null) { println("fetched todo items ${results size}") } else { println("error fetching todos ${e localizedmessage}") } } } alternativamente, puedes usar los puntos finales de 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 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, 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 iscompleted (boolean) 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 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 toda tu aplicación datos relacionales si tienes datos relacionales—digamos, un category objeto que apunta a múltiples todo elementos—puedes usar pointers o relations en parse por ejemplo, agregar un puntero a un category // linking a todo to a category with a pointer fun createtaskforcategory(categoryobjectid string, title string) { val todo = parseobject("todo") val categorypointer = parseobject("category") categorypointer objectid = categoryobjectid todo put("title", title) todo put("category", categorypointer) todo saveinbackground { e > if (e == null) { println("created task with category relationship") } else { println("error creating task ${e localizedmessage}") } } } cuando consultas, también puedes incluir datos de punteros val query = parsequery getquery\<parseobject>("todo") query include("category") query findinbackground { todos, e > if (e == null) { println("fetched ${todos size} todos with category data") } } esta include("category") llamada obtiene los detalles de la categoría junto a cada todo, haciendo que tus datos relacionales sean accesibles sin problemas consultas en vivo para actualizaciones en tiempo real, back4app proporciona live queries puedes suscribirte a cambios en una clase específica desde tu aplicación de android habilita live queries en tu panel de back4app bajo la configuración del servidor de tu aplicación inicializa una suscripción de consulta en vivo en tu código import com parse parselivequeryclient import com parse parsequery import com parse subscriptionhandling val parselivequeryclient = parselivequeryclient factory getclient() val parsequery = parsequery\<parseobject>("todo") val subscriptionhandling subscriptionhandling\<parseobject> = parselivequeryclient subscribe(parsequery) subscriptionhandling handleevent(subscriptionhandling event create) { querytodo, todo > println("new todo created ${todo getstring("title")}") } subscriptionhandling handleevent(subscriptionhandling event update) { querytodo, todo > println("todo updated ${todo getstring("title")}") } subscriptionhandling handleevent(subscriptionhandling event delete) { querytodo, todo > println("todo deleted ${todo getstring("title")}") } cada vez que se crea, actualiza o elimina un nuevo todo, el cliente recibe una notificación en tiempo real, lo que es perfecto para aplicaciones colaborativas o dinámicas 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 fun createprivatetodo(title string, owneruser parseobject) { val todo = parseobject("todo") todo put("title", title) // create an acl granting read/write access only to the owner val acl = com parse parseacl(owneruser) acl publicreadaccess = false acl publicwriteaccess = false todo acl = acl todo saveinbackground { e > if (e == null) { println("saved private todo") } else { println("error ${e localizedmessage}") } } } permisos a nivel de clase (clps) los clps rigen los permisos predeterminados de toda la clase, como si la clase es legible o escribible públicamente 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 paso 4 – escribiendo funciones de código en la nube el código en la nube te permite ejecutar código personalizado similar a kotlin en el servidor parse (subido como js archivos), sin necesidad de gestionar la infraestructura del servidor esto es ideal para lógica de negocio, validaciones, disparadores y llamadas a apis externas cómo funciona normalmente colocas funciones de javascript, disparadores y cualquier módulo npm requerido en un main js archivo este archivo se despliega en tu proyecto de back4app y se ejecuta en el entorno de parse server casos de uso típicos lógica de negocios validaciones de datos disparadores (como beforesave , aftersave ) aplicación de seguridad integraciones con apis de terceros despliega tu función a continuación se muestra una función simple de cloud code 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 del https //www back4app com/docs/local development/parse cli \# for linux/mac curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash \# for windows, download the exe from the releases page luego configura y despliega b4a configure accountkey b4a deploy llamando a tu función desde tu código de android (kotlin) a través del sdk de parse import com parse parsecloud import com parse functioncallback import com parse parseexception fun calltextlengthfunction(sometext string) { val params = hashmapof("text" to sometext) parsecloud callfunctioninbackground\<map\<string, any>>("calculatetextlength", params) { result, e > if (e == null) { val length = result\["length"] as int println("text length $length") } else { println("error calling cloud code ${e localizedmessage}") } } } también puedes llamarlo a través de rest o graphql de manera similar paso 5 – configurando la autenticación autenticación de usuario en back4app back4app aprovecha la clase parse user para la autenticación parse maneja el hashing seguro de contraseñas, tokens de sesión y más de forma predeterminada configurando la autenticación de usuario en kotlin, puedes crear un nuevo usuario import com parse parseuser fun signupuser(username string, password string, email string) { val user = parseuser() user username = username user setpassword(password) user email = email user signupinbackground { e > if (e == null) { println("user signed up successfully!") } else { println("error signing up user ${e localizedmessage}") } } } iniciar sesión con un usuario existente fun loginuser(username string, password string) { parseuser logininbackground(username, password) { user, e > if (user != null && e == null) { println("user logged in ${user username}") } else { println("error logging in ${e? localizedmessage}") } } } los inicios de sesión sociales como google, facebook y apple también se pueden integrar consulta documentación de inicio de sesión social https //www back4app com/docs/platform/sign in with apple para más detalles gestión de sesiones parse gestiona automáticamente los tokens de sesión puedes acceder al usuario actual val currentuser = parseuser getcurrentuser() if (currentuser != null) { println("currently logged in user ${currentuser username}") } else { println("no user is logged in") } y cerrar sesión parseuser logout() paso 6 – manejo del almacenamiento de archivos subiendo y recuperando archivos parse incluye la parsefile clase para manejar las subidas de archivos import com parse parsefile import com parse parseexception fun uploadimage(file java io file) { val bytes = file readbytes() val parsefile = parsefile(file name, bytes) parsefile saveinbackground { e parseexception? > if (e == null) { println("file saved ${parsefile url}") } else { println("error uploading file ${e localizedmessage}") } } } parse incluye la parsefile clase para manejar las subidas de archivos seguridad de archivos puedes controlar quién puede subir o descargar archivos ajustando acls y clps o utilizando configuraciones específicas de archivos en la configuración del servidor parse paso 7 – verificación de correo electrónico y restablecimiento de contraseña habilitar la verificación de correo electrónico en la configuración de tu panel de back4app configura tu dirección de envío, plantillas de correo electrónico o dominio personalizado si lo deseas usa parseuser requestpasswordresetinbackground(email, callback) para activar un flujo de restablecimiento de contraseña en tu aplicación paso 8 – programación de tareas con cloud jobs cloud jobs te permite automatizar tareas rutinarias como limpiar datos o enviar notificaciones periódicas parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo') const query = new parse query(todo) // e g , remove todos older than 30 days const cutoff = new date(date now() 30 24 60 60 1000) query lessthan('createdat', cutoff) const oldtodos = await query find({ usemasterkey true }) await parse object destroyall(oldtodos, { usemasterkey true }) return `deleted ${oldtodos length} old todos ` }) programa la tarea en tu panel de back4app bajo configuración del servidor > tareas en segundo plano paso 9 – integrando webhooks webhooks permiten que tu aplicación back4app envíe solicitudes http a un servicio externo cada vez que ocurren ciertos eventos agrega un webhook en tu panel de control de back4app bajo más > webhooks configura los disparadores (por ejemplo, después de guardar un nuevo objeto) agrega un endpoint de url (como un webhook de slack o stripe) paso 10 – explorando el panel de administración de back4app la aplicación de administración de back4app es una interfaz web amigable para usuarios no técnicos para gestionar datos habilítalo bajo panel de control de la aplicación > más > aplicación de administración crea tu primer usuario administrador elige un subdominio para acceder al panel de administración inicia sesión para ver, editar o eliminar registros de tu base de datos fácilmente conclusión al seguir este tutorial completo, has creado un backend seguro para una aplicación android 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 cloud code funciones 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 cloud jobs 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 android (kotlin) 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 de android 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 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