Skip to content

aleroxac/goexpert-grpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

goexpert-grpc

Conceitos

gRPC

  • É um protocolo de remote procedure call de alta performance e open source desenvolvido pelo Google.

Protocol Buffers

  • Formato de dados usado para serializar estrutura de dados; os dados trafegados via gRPC são nesse formato

HTTP/2

  • Versão mais recente do protocolo HTTP, que usa multiplexação(as requisições e respostas são paralelas e assíncronas), server push(estáticos, por exemplo), headers comprimidos e formatados em HPACK

Tipos de chamadas

- API unary:                    client -> request(1) -> data  <- response(1) <- server
- API server streaming:         client -> request(1) -> data  <- response(N) <- server
- API client streaming:         client -> request(N) -> data  <- response(1) <- server
- API bi directional streaming: client -> request(N) -> data  <- response(N) <- server

REST vs gRPC

Característica REST gRPC
Formato Texto / JSON Protocol Buffers
Relacionamento Uniderecional Bi-direcional e Assíncrono
Latência Alta latência Baixa latência
Contrato Sem contrato Tem contrato
Streaming Sem suporte Tem suporte
Design Pré-definido Livre
Bibliotecas Terceiros Nativa

Setup

wget -O /tmp/protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v26.1/protoc-26.1-linux-x86_64.zip
unzip /tmp/protoc.zip -d ~/.local/
sudo ln -s ~/.local/bin/protoc /usr/local/bin/protoc

go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

wget -O /tmp/evans.tar.gz https://github.com/ktr0731/evans/releases/download/v0.10.11/evans_linux_amd64.tar.gz
tar -xzvf /tmp/evans.tar.gz
sudo mv evans /usr/local/bin

Como trabalhar com gRPC no go

### 1. Crie uma [pasta com os arquivos proto para cada uma de suas entidades](proto/course_category.proto)

### 2. Gere os binários via protoc
protoc --go_out=. --go-grpc_out=. proto/course_category.proto

### 3. Implemente os [services](internal/service/category.go) com base nas [interfaces auto-geradas pelo protoc](internal/pb/course_category_grpc.pb.go) 'not implemented'

### 5. Suba o server
go run cmd/grpcServer/main.go

### 6. Use evans para chamar os services do app
evans --proto proto/course_category.proto --host localhost --port 50051
=> call CreateCategory
=> name1
=> desc1

Como rodar o projeto

### 1. Crie a tabela
sqlite3 db.sqlite 'create table categories (id string, name string, description string);'

### 5. Suba o server
go run cmd/grpcServer/main.go

### 6. Use evans para chamar os services do app
evans --proto proto/course_category.proto --host localhost --port 50051
=> call CreateCategory
=> name1
=> desc1