Este é um projeto de exemplo de uma API gRPC para gerenciamento de usuários, implementado em TypeScript. O projeto foi aprimorado para incluir um banco de dados real com Prisma, uma CLI para o cliente e ferramentas de qualidade de código como ESLint e Prettier.
-
Clone o repositório:
git clone https://github.com/seu-usuario/seu-repositorio.git
-
Crie um arquivo
.enva partir do exemplo:cp .env.example .env
-
Instale as dependências:
yarn install
Para compilar os arquivos .proto do Protocol Buffers, execute o seguinte comando:
yarn buildEste comando irá gerar os arquivos users_pb.js, users_pb.d.ts, users_grpc_pb.js, e users_grpc_pb.d.ts no diretório proto.
Para executar as migrações do banco de dados com o Prisma, execute o seguinte comando:
npx prisma migrate devPara iniciar o servidor gRPC, execute o seguinte comando:
yarn serverO servidor estará rodando na porta 3000.
O cliente é uma CLI que pode ser usada para interagir com o servidor. Para ver a lista de comandos, execute:
yarn client --helpComandos disponíveis:
get <id>: Busca um usuário por ID.list: Lista todos os usuários.create <name> <age> <status>: Cria um novo usuário. O status pode serOFFLINE,BUSYouAVAILABLE.update <id> <name> <age> <status>: Atualiza um usuário existente.delete <id>: Deleta um usuário por ID.
Exemplos:
# Criar um usuário
yarn client create "John Doe" 30 AVAILABLE
# Listar todos os usuários
yarn client list
# Buscar o usuário com ID 1
yarn client get 1
# Atualizar o usuário com ID 1
yarn client update 1 "John Doe Jr." 31 BUSY
# Deletar o usuário com ID 1
yarn client delete 1Para verificar o código com o ESLint, execute:
yarn lintPara formatar o código com o Prettier, execute:
yarn formatA API gRPC expõe os seguintes serviços:
Busca um usuário por ID.
- Requisição:
UserRequest - Resposta:
User
Retorna um stream de todos os usuários.
- Requisição:
google.protobuf.Empty - Resposta:
stream User
Cria um novo usuário.
- Requisição:
User - Resposta:
User
Atualiza um usuário existente.
- Requisição:
User - Resposta:
User
Deleta um usuário por ID.
- Requisição:
UserRequest - Resposta:
google.protobuf.Empty