Definiendo el servicio de test en gRPC

Resumen

Crear un servicio de test con gRPC en Go empieza por definir un archivo .proto claro, compilarlo para generar el código y luego conectarlo con la base de datos. Aquí aprenderás a estructurar ese flujo paso a paso siguiendo la misma metodología usada para el servicio de estudiantes, ideal si ya estás construyendo microservicios con Protocol Buffers.

¿Cómo se estructura un archivo proto para un servicio de test?

La metodología arranca creando una carpeta llamada test.pb y, dentro de ella, el archivo test.proto. Este archivo es el contrato que describe qué datos viajan y qué métodos expone el servicio.

Lo primero que defines es la sintaxis con proto3 y el nombre del paquete a nivel de proto, en este caso test. Ese nombre vive solo dentro del mundo de Protocol Buffers, no en Go.

¿Qué diferencia hay entre el package de proto y el go_package?

El package test es la referencia interna del archivo proto. Pero Go necesita su propia ruta de importación, y para eso usas la opción go_package, que en esta clase apunta a platzi.com/go/grpc con el alias testpb.

¿Qué es el go_package en un archivo proto? Es la opción que indica a qué ruta de Go pertenecerá el código generado. Sin esta línea, Go no sabría dónde ubicar los paquetes compilados.

¿Qué mensajes y servicios se definen en el proto de test?

El archivo declara un mensaje base llamado Test con dos campos: un id y un name. Esa es toda la estructura que se necesita para representar un examen dentro del sistema.

Luego se agregan los mensajes auxiliares que viajan en las llamadas RPC:

  • GetTestRequest, que recibe un string con el id del test a consultar.
  • SetTestResponse, que devuelve el id y el name después de crear o actualizar un test.
  • Test, el mensaje principal usado tanto como entrada como salida según el método.

Después viene la parte clave: el bloque service TestService, donde se exponen los métodos RPC del servicio.

¿Qué métodos RPC expone el TestService?

El servicio define dos operaciones que cubren la lectura y la escritura básica:

  • GetTest, que recibe un GetTestRequest y retorna un Test.
  • SetTest, que recibe un Test como parámetro y retorna un SetTestResponse.

Esta simetría con el servicio de estudiantes te ayuda a mantener consistencia entre microservicios. Cada método tiene una entrada y una salida bien tipadas, lo que reduce errores en tiempo de compilación.

¿Para qué sirve el bloque service en un archivo proto? Es donde declaras los métodos RPC que tu servidor gRPC va a exponer. Cada método define qué mensaje recibe y qué mensaje devuelve.

¿Cómo compilar el proto y generar los paquetes de Go?

Una vez guardado el archivo, ejecutas el comando de compilación que ya usaste antes con el servicio de estudiantes. La diferencia es el directorio de ejecución: ahora corres el comando dentro de test.pb en lugar de student.pb.

Al darle enter, se generan dos archivos nuevos de Go dentro de la carpeta. Esos archivos contienen las estructuras, las interfaces del servidor y los clientes listos para usar en tu aplicación.

¿Qué genera el compilador de protoc para gRPC en Go? Genera los tipos de los mensajes y las interfaces del cliente y servidor. Con esos archivos puedes implementar la lógica de negocio sin escribir el boilerplate de comunicación.

¿Qué sigue después de definir el servicio de test?

Con el proto compilado, el siguiente paso es implementar la lógica en tres capas: el servidor que responde a las llamadas, la base de datos que persiste los exámenes, y la interacción gRPC que conecta cliente y servidor.

Este servicio será la base para que los estudiantes tomen distintos exámenes dentro de la plataforma, así que la implementación posterior se enfocará en escribir y leer registros de tests usando los métodos GetTest y SetTest que acabas de declarar.

¿Tu archivo test.proto compiló sin errores a la primera? Cuéntame en los comentarios qué cambios harías a la estructura del mensaje Test para tu propio caso de uso.