Contenido del curso
gRPC
- 6

gRPC: qué lo hace más rápido que REST
08:35 min - 7

JSON vs Protobuf: cuándo usar cada uno
08:56 min - 8

Definir un StudentService con proto buffers en Go
Viendo ahora - 9

Implementación de Repositorios y gRPC en Go con PostgreSQL
11:59 min - 10

Criando o primeiro servidor gRPC em Go
12:50 min - 11

Prueba tu servidor gRPC con Postman
04:08 min - 12

Definiendo el servicio de test en gRPC
03:38 min - 13

Implementando servidor gRPC con PostgreSQL en Go
17:45 min - 14

Client streaming en gRPC con Go
16:53 min - 15

Implementación de Streaming del Servidor con gRPC y Protobufs
16:25 min - 16

Streaming del servidor con gRPC en Go
16:23 min - 17

Streaming bidireccional en gRPC con Go
16:04 min - 18

Prueba de streaming bidireccional con gRPC
04:55 min - 19

Implementando un cliente gRPC en Go
13:10 min - 20

Streaming bidireccional en gRPC con Go
12:16 min
Conclusión
Definir un StudentService con proto buffers en Go
Resumen
Definir un servicio gRPC en Go empieza por modificar el archivo .proto y dejar que Protocol Buffers genere el código por ti. Aquí aprendes a crear el StudentService con dos métodos unarios listos para implementar, ideal si estás construyendo APIs eficientes con Go y gRPC.
Qué dependencia necesitas para trabajar con Protocol Buffers en Go
Antes de tocar el archivo .proto, instala el paquete oficial que permite a Go manejar los proto buffers en tiempo de ejecución.
En la terminal corres este comando [0:25]:
bash go get google.golang.org/protobuf
Con esa dependencia tu proyecto ya entiende cómo serializar y deserializar los mensajes que vas a definir. Es el cimiento sobre el que se apoya todo lo demás.
¿Qué es un proto buffer? Es el formato binario que usa gRPC para enviar datos entre cliente y servidor. Lo defines una vez en un archivo
.protoy se traduce a código en el lenguaje que necesites.
Cómo se definen los mensajes GetStudentRequest y SetStudentResponse
Los mensajes son las estructuras que viajan entre cliente y servidor. Para el servicio student necesitas dos nuevos dentro de tu student.proto [0:42].
El primero es GetStudentRequest, que lleva un único campo de tipo string llamado id en la posición 1. Esa posición no es un valor, es la etiqueta que usa el proto buffer para identificar el campo en el binario.
El segundo es SetStudentResponse, que también incluye un id como respuesta tras crear o registrar un estudiante.
proto message GetStudentRequest { string id = 1; }
message SetStudentResponse { string id = 1; }
Fíjate en el detalle: el número junto al campo no es el valor que vas a enviar, es la posición dentro del mensaje. Esa convención permite que proto buffers sea retrocompatible cuando agregas nuevos campos.
Cómo creas el StudentService con métodos RPC unarios
Hasta este punto solo tenías mensajes flotando, pero no un servicio que los conecte. El servicio se declara con la palabra clave service y agrupa los métodos disponibles [1:25].
Qué métodos vive dentro de StudentService
Dentro de StudentService defines dos llamadas unarias, es decir, una petición y una respuesta sin streaming.
- GetStudent: recibe un
GetStudentRequesty devuelve unStudent. - SetStudent: recibe un
Studenty devuelve unSetStudentResponse.
proto service StudentService { rpc GetStudent(GetStudentRequest) returns (Student); rpc SetStudent(Student) returns (SetStudentResponse); }
Los dos son RPC unarios porque mandan un solo mensaje y reciben uno solo de vuelta. Más adelante vas a sumar streaming de cliente, de servidor y bidireccional, pero la base unaria es la que conviene dominar primero.
¿Qué es un RPC unario? Es una llamada remota donde el cliente envía un mensaje y el servidor responde con otro mensaje. Sin flujos, sin secuencias: una pregunta, una respuesta.
Qué archivos genera el compilador de Protocol Buffers
Una vez modificado el .proto, vuelves a correr el comando de compilación que ya tenías a mano. Te conviene guardarlo cerca porque lo vas a usar muchas veces durante el proyecto [2:15].
Al ejecutarlo notas algo nuevo: ahora se generan dos archivos en lugar de uno.
- El archivo original donde viven todos los mensajes que definiste.
- Un archivo adicional específico de gRPC, con los clientes y servidores listos para usar.
Ese segundo archivo aparece justo porque acabas de declarar un servicio con métodos. Antes no existía porque solo tenías mensajes sueltos. Toda la plomería del cliente y del servidor se escribe sola a partir de tu definición.
¿Por qué se generan dos archivos al compilar el proto? Porque uno contiene los mensajes serializables y el otro contiene el código gRPC del cliente y servidor. gRPC solo aparece cuando defines un
serviceen el.proto.
Esa es la ventaja real de Protocol Buffers: defines el contrato una vez y obtienes código consistente, tipado y mantenible sin escribirlo a mano. Con el contrato listo, lo siguiente es darle vida a GetStudent y SetStudent en el servidor.
¿Cómo crees que vas a estructurar la implementación de estos métodos? Cuéntame en los comentarios qué patrón sueles usar cuando arrancas un servicio gRPC desde cero.