Quickstarters
Feature Overview
¿Cómo construir un backend para Golang?
35 min
introducción en este tutorial, aprenderás cómo construir y probar un backend completo para golang utilizando back4app te guiaremos a través de la integración de características esenciales de back4app, como la gestión de bases de datos, configuraciones de seguridad, autenticación de usuarios, almacenamiento de archivos y cloud code, para crear un backend seguro, flexible y escalable que funcione bien con tu servidor http de go nuestro enfoque estará en utilizar las apis restful de back4app para conectarnos a la base de datos desde nuestro cliente http de golang, en lugar de un sdk de parse dedicado, para que podamos ilustrar cómo construir funciones de manejador fáciles de mantener para tu nuevo backend verás cómo este enfoque reduce la complejidad del desarrollo en comparación con configurar tus propios servidores desde cero al confiar en las consultas en tiempo real de back4app, el almacenamiento de archivos y los sistemas de autenticación de usuarios, acelerarás tu proceso de creación de backend al final, sabrás cómo construir un backend seguro en golang, programar tareas automatizadas e integrar webhooks externos estarás bien preparado para mejorar esta base en una aplicación lista para producción o agregar lógica personalizada según sea necesario requisitos previos una cuenta de back4app regístrate gratis aquí https //www back4app com/ un nuevo proyecto de back4app comenzando con back4app https //www back4app com/docs/get started/new parse app entorno de desarrollo go (golang) asegúrate de tener go instalado en tu máquina puedes encontrar instrucciones en la documentación oficial de go https //go dev/ conocimientos básicos del paquete http de go y apis restful la familiaridad con cómo escribir un manejador de funciones, analizar mensajes de error, manejar solicitudes de método post y configurar un servidor http localhost será útil asegúrate de tener estos requisitos previos en su lugar antes de continuar esta configuración agilizará tu experiencia mientras descubres cómo construir un backend para golang usando back4app paso 1 – crear un nuevo proyecto en back4app y conectarse ¿por qué un nuevo proyecto? crear un nuevo proyecto en back4app es tu primer paso es donde almacenarás datos, configurarás el almacenamiento de archivos, programarás funciones en la nube y agregarás tareas en segundo plano este proyecto backend anclará todos los pasos subsiguientes inicie sesión en su cuenta de back4app haga clic en “nueva aplicación” en su panel de back4app nombre de su aplicación (por ejemplo, “golang backend tutorial”) una vez creada, aparecerá en su panel esta aplicación ahora es su backend basado en back4app conectando a través de rest apis back4app proporciona apis restful para crear, actualizar y eliminar datos en golang, utilizaremos el cliente http de la biblioteca estándar de go para comunicarnos con estos puntos finales localice su id de aplicación y clave api rest yendo a la sección de configuración o seguridad y claves de su aplicación back4app necesitarás estas credenciales en cada encabezado de solicitud ilustraremos esto en los siguientes pasos cuando nos conectemos a la base de datos utilizando el método post, get y otras solicitudes http paso 2 – configuración de la base de datos creando un modelo de datos para almacenar datos en back4app, defines clases (tablas) y columnas (campos) por ejemplo, digamos que queremos una todo clase puedes crearla manualmente en el panel de control de back4app ve a la base de datos sección en el panel de control de tu aplicación crea una nueva clase llamada “todo ” agrega columnas como título (string) y estácompleto (boolean) también puedes permitir que el sistema cree columnas automáticamente enviando objetos con nuevos campos desde tu aplicación golang creando un modelo de datos utilizando el agente de ia abre el agente de ia en tu panel de control de la aplicación describe tu modelo de datos deseado (por ejemplo, “por favor, crea una nueva clase de todo con un campo de título y un campo de iscompleted ”) acepta el esquema sugerido esta útil función ahorra tiempo en el diseño de tu esquema de base de datos lectura y escritura de datos utilizando rest api (ejemplo en golang) a continuación se muestra un ejemplo básico de cómo crear (método post) y obtener (método get) datos utilizando el paquete http de go suponga que tiene su application id y rest api key como variables de entorno package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" "log" "net/http" ) type todo struct { objectid string `json "objectid,omitempty"` title string `json "title,omitempty"` iscompleted bool `json "iscompleted,omitempty"` } func main() { // example create todo newtodo = todo{ title "buy groceries", iscompleted false, } created, err = createtodo(newtodo) if err != nil { log println("error creating todo ", err) } else { log println("created todo with id ", created objectid) } // example fetch todos todos, err = fetchalltodos() if err != nil { log println("error fetching todos ", err) } else { for , t = range todos { log println("fetched todo ", t title, t iscompleted) } } } // createtodo sends a post request to save a new record in the "todo" class func createtodo(todo todo) (todo, error) { // convert struct to json body, = json marshal(todo) // create http request req, err = http newrequest("post", "https //parseapi back4app com/classes/todo", bytes newbuffer(body)) if err != nil { return todo{}, err } // set necessary headers req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") req header set("content type", "application/json") // execute the request client = \&http client{} resp, err = client do(req) if err != nil { return todo{}, err } defer resp body close() if resp statuscode != http statuscreated && resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return todo{}, fmt errorf("api error %s", string(bodybytes)) } // parse response var createdtodo todo if err = json newdecoder(resp body) decode(\&createdtodo); err != nil { return todo{}, err } return createdtodo, nil } // fetchalltodos retrieves all todo objects from back4app using get func fetchalltodos() (\[]todo, error) { req, err = http newrequest("get", "https //parseapi back4app com/classes/todo", nil) if err != nil { return nil, err } req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") client = \&http client{} resp, err = client do(req) if err != nil { return nil, err } defer resp body close() if resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return nil, fmt errorf("api error %s", string(bodybytes)) } // parse response for "results" key var result struct { results \[]todo `json "results"` } if err = json newdecoder(resp body) decode(\&result); err != nil { return nil, err } return result results, nil } en estos ejemplos, creamos un cliente http, añadimos los encabezados necesarios y manejamos los códigos de respuesta junto con los mensajes de error recuerda reemplazar your application id y your rest api key con las claves reales de tu proyecto de back4app lectura y escritura de datos usando la api de graphql back4app también proporciona un endpoint de graphql en https //parseapi back4app com/graphql puedes usar una popular biblioteca cliente de graphql en go (como machine box graphql https //github com/machinebox/graphql ) para realizar consultas o mutaciones este puede ser un enfoque más estructurado que las llamadas rest en bruto trabajando con consultas en vivo (opcional) si deseas ver actualizaciones en tiempo real en tu aplicación, puedes habilitar consultas en vivo en el panel de control de back4app golang no tiene una biblioteca oficial de consultas en vivo de parse sin embargo, puedes implementar tu propia conexión websocket para escuchar actualizaciones de consultas en vivo desde wss\ //your subdomain b4a io esta función es útil para aplicaciones colaborativas que requieren sincronización de datos inmediata paso 3 – aplicando seguridad con acls y clps descripción general back4app proporciona listas de control de acceso (acl) y permisos a nivel de clase (clp) para proteger tus datos las acl se definen en cada objeto, mientras que los clp definen reglas generales para toda una clase permisos a nivel de clase ve a la base de datos de tu aplicación en back4app selecciona una clase (por ejemplo, todo ) haz clic en permisos a nivel de clase y establece el acceso de lectura/escritura para diferentes roles de usuario o acceso público acls puedes pasar una acl al crear o actualizar un objeto a través de llamadas rest esto asegura que solo ciertos usuarios o roles puedan leer/escribir los datos para más detalles, visita directrices de seguridad de la aplicación https //www back4app com/docs/security/parse security paso 4 – escribiendo funciones de código en la nube por qué código en la nube el código en la nube te permite ejecutar funciones del lado del servidor, disparadores o validaciones—sin gestionar tus propios servidores puedes agregar lógica empresarial avanzada o integrar apis externas desde el lado del servidor ejemplo de función en la nube un ejemplo simple es una función que calcula la longitud del texto en tu main js archivo en el panel de control de back4app parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); despliegue despliega cloud code de las siguientes maneras back4app cli back4app dashboard bajo cloud code > functions pega tu código en el main js editor y haz clic en desplegar llamando a funciones en la nube desde golang puedes llamar a una función en la nube a través de rest desde tu cliente http func callcalculatetextlength(txt string) (int, error) { body, = json marshal(map\[string]string{"text" txt}) req, err = http newrequest("post", "https //parseapi back4app com/functions/calculatetextlength", bytes newbuffer(body)) if err != nil { return 0, err } // headers req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") req header set("content type", "application/json") client = \&http client{} resp, err = client do(req) if err != nil { return 0, err } defer resp body close() if resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return 0, fmt errorf("api error %s", string(bodybytes)) } var result struct { result map\[string]int `json "result"` } if err = json newdecoder(resp body) decode(\&result); err != nil { return 0, err } return result result\["length"], nil } paso 5 – configuración de la autenticación habilitar la autenticación de usuario back4app utiliza una user clase para la autenticación cuando creas un nuevo usuario a través de rest, el backend almacenará las credenciales de forma segura y generará un token de sesión 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 '{"username" "alice", "password" "secret123", "email" "alice\@example com"}' \\ https //parseapi back4app com/users utiliza el token de sesión devuelto para solicitudes posteriores que requieran privilegios de usuario en go, enviarías el mismo tipo de solicitud http desde un cliente http como se demostró anteriormente inicio de sesión social para inicios de sesión sociales como google o facebook, necesitarás configurar los ajustes de oauth en back4app estos flujos a menudo implican el intercambio de tokens consulta la documentación de inicio de sesión con apple / inicio de sesión social https //www back4app com/docs/platform/sign in with apple para más detalles paso 6 – manejo del almacenamiento de archivos configuración y carga puedes almacenar archivos en back4app enviándolos como datos codificados en base64 o multipart/form data 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 '{ "file" { "name" "myimage png", " type" "file", "base64" "ivborw0kggoaaaansuheugaa " } }' \\ https //parseapi back4app com/files/myimage png después de cargar, puedes adjuntar el archivo a un objeto almacenando la url del archivo devuelta o el puntero del archivo en go, crea una solicitud http de la misma manera; solo asegúrate de codificar el contenido del archivo correctamente paso 7 – verificación de correo electrónico y restablecimiento de contraseña importancia la verificación de correo electrónico asegura que los usuarios controlen el correo proporcionado, mientras que el restablecimiento de contraseña les ayuda a recuperar cuentas ambas funciones aumentan la seguridad y la confianza habilitando la verificación de correo electrónico ve a tu back4app dashboard bajo configuraciones de correo electrónico , habilita los correos electrónicos de verificación personaliza tus plantillas de correo electrónico si es necesario cuando un usuario se registra, se envía automáticamente un correo electrónico de verificación restablecimiento de contraseña usa el endpoint rest requestpasswordreset https //docs parseplatform org/rest/guide/#r passwordreset para iniciar un restablecimiento de contraseña 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 '{"email" "alice\@example com"}' \\ https //parseapi back4app com/requestpasswordreset paso 8 – programación de tareas con cloud jobs qué hacen los cloud jobs los cloud jobs se ejecutan según un horario para automatizar tareas como limpiar datos obsoletos o enviar boletines semanales parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); // remove records older than 30 days // }); despliega este trabajo y prográmalo en tu back4app dashboard > configuración de la aplicación > configuración del servidor > tareas en segundo plano paso 9 – integración de webhooks por qué webhooks los webhooks te permiten notificar a servicios externos cuando ocurren ciertos eventos por ejemplo, podrías enviar alertas de slack cuando se crean nuevos elementos de todo ve a la sección de webhooks en tu back4app dashboard configura tu endpoint (como https //your external service com/webhook ) asigna disparadores (por ejemplo, aftersave en todo ) también puedes activar apis externas desde cloud code escribiendo una solicitud de cliente http si prefieres un control directo de los eventos paso 10 – explorando el panel de administración de back4app descripción general la aplicación de administración de back4app es una interfaz de apuntar y hacer clic que puedes compartir con miembros del equipo no técnicos para gestionar datos habilitar la aplicación de administración ve a más > aplicación de administración en tu panel de control de back4app habilítalo y crea un usuario administrador usa tu subdominio elegido para iniciar sesión en una interfaz sencilla para la manipulación de datos esto te libera de escribir consultas directas o código personalizado para realizar operaciones básicas conclusión en esta guía, descubriste cómo construir un backend para golang utilizando back4app exploraste cómo conectarte a la base de datos a través de apis restful, aplicar medidas de seguridad con acls y clps, ejecutar tareas programadas con cloud jobs, integrarte con servicios externos utilizando webhooks, y configurar la autenticación de usuarios y el almacenamiento de archivos con el paquete http de go y las robustas características de back4app, puedes crear un backend poderoso que ahorra tiempo y escala sin esfuerzo ahora que has dominado lo básico, puedes extender la lógica de tu función manejadora de golang, conectarte a nuevos puntos finales de api y construir una aplicación rica que satisfaga tus necesidades próximos pasos refina tu aplicación de golang agrega características avanzadas como acceso basado en roles, o optimiza tu servidor http para producción aprende más sobre consultas en tiempo real integra consultas en vivo para aplicaciones colaborativas explora la documentación avanzada de back4app ajusta tus acls, registros y análisis incorpora apis de terceros usa cloud code o webhooks directos para expandir la funcionalidad de tu backend