GoLang

Desarrollo de un almacén de perfiles de usuario con Golang y una base de datos NoSQL

¿Recuerdas la serie de tutoriales que escribí sobre creación de un almacén de perfiles de usuario con Node.js y NoSQL? Ese tutorial abarcaba mucho terreno, desde la creación de una API RESTful con Node.js, la gestión de sesiones de usuario, el modelado de datos y, por supuesto, el almacenamiento de datos asociados a los usuarios.

¿Y si quisiéramos tomar los mismos conceptos y aplicarlos con Golang en lugar de JavaScript con Node.js?

Vamos a ver cómo desarrollar un almacén de perfiles de usuario con Golang y Servidor Couchbase que actúa como sustituto modular de la alternativa Node.js.

En adelante, vamos a asumir que tienes Go instalado y configurado, así como Couchbase Server. No es importante si has visto el Versión Node.js de este tutorial porque vamos a revisarlo todo.

En caso de que no esté familiarizado con lo que es un almacén de perfiles de usuario o lo que hace, es simplemente una solución para almacenar información sobre los usuarios y la información asociada a los usuarios. Tomemos por ejemplo un blog. Un blog puede tener numerosos autores, que técnicamente son usuarios. Cada autor escribirá contenido y ese contenido estará asociado al usuario particular que lo escribió. Además, cada autor tendrá su propio método para iniciar sesión en el blog.

Dado que los modelos de datos de los usuarios pueden cambiar con tanta frecuencia, el uso de una base de datos NoSQL con un modelo de almacenamiento flexible suele ser más eficaz que una alternativa RDBMS. Puedes encontrar más información sobre el aspecto del modelado de datos en este artículo, Almacén de perfiles de usuario: Modelado avanzado de datosescrito por Kirk Kirkconnell.

Gestión de usuarios Golang para crear un nuevo proyecto

Vamos a pasar todo nuestro tiempo en un único archivo Go. En algún lugar de tu $GOPATHcree un archivo llamado main.go.

También vamos a necesitar algunas dependencias, tanto para Couchbase como para otros paquetes. Desde la línea de comandos, ejecute lo siguiente:

Las dependencias anteriores nos permitirán comunicarnos con Couchbase Server, generar valores UUID y crear una API RESTful con gestión de recursos compartidos de origen cruzado (CORS).

El siguiente paso es lanzar un poco de código boilerplate para nuestro proyecto. Abra el archivo main.go e incluya lo siguiente:

En lo anterior, notarás que hemos creado algunas estructuras de datos para representar nuestros datos. Vamos con la idea de una plataforma de blogs.

La aplicación tendrá cinco puntos finales de API RESTful, un método validador para nuestras sesiones de usuario, y una variable global de Couchbase que nos permitirá acceder a nuestra instancia abierta en cualquier parte de la aplicación.

Obsérvese que los tres extremos anteriores tienen el Validar adjunta a ellos. Esto significa que el usuario debe haberse autentificado y estar proporcionando una sesión válida para progresar. En este sentido, la Validar actúa como intermediario.

Como planeamos consultar datos, más específicamente, artículos de blog a un usuario en particular, necesitamos tener un índice creado. Usando el dashboard web, Couchbase CLI, o la aplicación Go, ejecuta lo siguiente:

El índice anterior nos permitirá consultar por un tipo así como una propiedad pid propiedad.

Ahora podemos empezar a rellenar los huecos para cada uno de nuestros puntos finales de API.

Permitir a los usuarios registrar nueva información en el almacén de perfiles

Dado que ahora mismo no tenemos usuarios en el almacén de perfiles, tendría sentido crear un endpoint que soporte la creación de nuevos usuarios.

Es una buena práctica no almacenar nunca información de credenciales del tipo nombre de usuario y contraseña con la información real del usuario. Por esta razón, crear un nuevo usuario significa crear un perfil así como un cuenta documento. En cuenta hará referencia al documento perfil documento. Ambos serán modelados después de nuestras estructuras de datos Go que vimos en el código boilerplate.

En el main.go añada lo siguiente:

Hay algunas cosas importantes que suceden en el código del punto final anterior.

En primer lugar estamos aceptando datos JSON que fueron enviados con el cuerpo POST de la solicitud del cliente. Estamos generando un id único para el perfil y guardando la contraseña con BCrypt.

A la hora de guardar los datos, el perfil de usuario recibirá un identificador único, mientras que la cuenta recibirá una dirección de correo electrónico como identificador y una referencia al identificador del perfil dentro del documento.

Siguiendo este planteamiento, la cuenta podría ampliarse fácilmente a otras formas de credenciales. Por ejemplo, el documento de cuenta podría rebautizarse como basicauthy podríamos tener Facebook, Twitter, etc., que hacen referencia a la información del perfil.

Implementación de un identificador de sesión para usuarios

Iniciar sesión en la aplicación a través de nuestros dos documentos es un poco diferente. Nunca es buena idea pasar el nombre de usuario y la contraseña más de lo absolutamente necesario.

Por esta razón, es una buena idea utilizar un testigo de sesión que represente al usuario. Este token puede caducar y no contiene información sensible.

Tome el siguiente código de acceso para el main.go file:

Cuando el correo electrónico y la contraseña se pasan a este endpoint, el cuenta basado en el correo electrónico proporcionado. A continuación, se compara la contraseña cifrada de este documento con la contraseña sin cifrar.

Si las credenciales son válidas, se emitirá un sesión se crea un documento de sesión. Este documento de sesión tiene una clave única, pero hace referencia a la clave del archivo perfil documento. También se añade un tiempo de expiración al documento. Cuando pase el tiempo de expiración, el documento será automáticamente eliminado de Couchbase sin ninguna intervención de la aplicación o del usuario. Esto ayuda a asegurar la cuenta.

Con las cuentas en funcionamiento, tenemos que preocuparnos de asociar la información a los usuarios.

Gestión de la información del usuario en el almacén de perfiles mediante un identificador de sesión

Cuando un usuario intenta hacer algo específico para sí mismo, tenemos que validar que es quien debe ser y que la información que está cambiando se aplica a la persona correcta.

Aquí es donde entra en juego el middleware de validación de testigos de sesión.

Cada solicitud a uno de nuestros tres puntos finales especiales requerirá una cabecera de autorización que contenga un token de portador con el identificador de sesión. Sin token de portador significa que la solicitud fallará. Un token de portador incorrecto o caducado significa que la solicitud fallará.

La validación intercambiará el identificador de sesión por un identificador de perfil que se utilizará en el siguiente paso de la solicitud.

Empezando por lo sencillo, digamos que queremos devolver la información del perfil de un usuario en particular. Nuestro endpoint podría tener el siguiente aspecto:

En pid se pasa desde el middleware de validación y se realiza una búsqueda con el id del perfil.

No es tan difícil hasta ahora, ¿verdad?

Vayamos un poco más allá e introduzcamos algunas consultas N1QL en nuestro proyecto. Digamos que queremos obtener todas las entradas del blog de un usuario en particular. Esto hará uso de nuestro índice, así como las consultas SQL-como.

En el código del punto final anterior, tomamos la variable pid del middleware de validación y añadirlo como parámetro para nuestra consulta parametrizada.

Vamos a iterar a través de la Resultados de la consulta devueltos por la consulta y añadirlos a un []Blog variable. Si no se encuentra ningún resultado, se devuelve una porción vacía.

Hacer búsquedas directas basadas en la clave siempre será más rápido que las consultas N1QL, pero las consultas N1QL son muy útiles cuando necesitas consultar por información de propiedades.

El punto final no es diferente de lo que ya hemos visto:

En el código anterior, aceptamos un cuerpo POST del cliente, así como el archivo pid del middleware de validación. A continuación, esa información se guarda en Couchbase.

Conclusión

Acabas de ver cómo crear una tienda básica de perfiles de usuario, o en este caso, una plataforma de blogs, utilizando el lenguaje de programación Go y Servidor Couchbase. Se trata de un tutorial alternativo a un tutorial anterior que había escrito sobre el mismo tema, pero con Node.js.

¿Quieres llevar este tutorial al siguiente nivel? Echa un vistazo a cómo crear un cliente web front-end con Angular o un front-end de cliente móvil con NativeScript.

Para obtener más información sobre el uso de Couchbase con Golang, consulte el documento Portal para desarrolladores de Couchbase.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Nic Raboy, Defensor del Desarrollador, Couchbase

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y móvil más fácil de entender.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.