Use Cases

gRPC 实战指南:Claude Code 实战指南

了解grpc practical guide:Claude Code 实战. 包含实用技巧和代码示例。

gRPC开发を通过 Claude Code 提高效率

gRPCはGoogleが开发した高効率なRPC框架で、Protocol Buffers通过类型安全な通信が特徴です。借助 Claude Code,Proto定義から服务器/客户端实现まで効率よく進められます。

Protocol Buffers定義

サービス定義の创建

> 用户管理サービスのProto定義创建。
> CRUD操作と分页支持の列表获取を含めて。
// proto/user/v1/user.proto
syntax = "proto3";

package user.v1;

option go_package = "gen/user/v1;userv1";

service UserService {
  rpc GetUser(GetUserRequest) returns (GetUserResponse);
  rpc ListUsers(ListUsersRequest) returns (ListUsersResponse);
  rpc CreateUser(CreateUserRequest) returns (CreateUserResponse);
  rpc UpdateUser(UpdateUserRequest) returns (UpdateUserResponse);
  rpc DeleteUser(DeleteUserRequest) returns (DeleteUserResponse);
  // 服务器ストリーミング:大量用户の导出
  rpc ExportUsers(ExportUsersRequest) returns (stream User);
}

message User {
  string id = 1;
  string name = 2;
  string email = 3;
  UserRole role = 4;
  google.protobuf.Timestamp created_at = 5;
  google.protobuf.Timestamp updated_at = 6;
}

enum UserRole {
  USER_ROLE_UNSPECIFIED = 0;
  USER_ROLE_ADMIN = 1;
  USER_ROLE_MEMBER = 2;
  USER_ROLE_VIEWER = 3;
}

message GetUserRequest {
  string id = 1;
}

message GetUserResponse {
  User user = 1;
}

message ListUsersRequest {
  int32 page_size = 1;
  string page_token = 2;
  string filter = 3;
}

message ListUsersResponse {
  repeated User users = 1;
  string next_page_token = 2;
  int32 total_count = 3;
}

message CreateUserRequest {
  string name = 1;
  string email = 2;
  UserRole role = 3;
}

message CreateUserResponse {
  User user = 1;
}

服务器实现(Go)

> 上記Proto定義のgRPC服务器をGoで实现して。
> 错误处理とインターセプターも含めて。
// internal/server/user.go
package server

import (
    "context"
    pb "myapp/gen/user/v1"
    "google.golang.org/grpc/codes"
    "google.golang.org/grpc/status"
)

type UserServer struct {
    pb.UnimplementedUserServiceServer
    repo UserRepository
}

func (s *UserServer) GetUser(
    ctx context.Context,
    req *pb.GetUserRequest,
) (*pb.GetUserResponse, error) {
    if req.Id == "" {
        return nil, status.Error(codes.InvalidArgument, "IDは必須です")
    }

    user, err := s.repo.FindByID(ctx, req.Id)
    if err != nil {
        return nil, status.Error(codes.NotFound, "User not found")
    }

    return &pb.GetUserResponse{User: toProtoUser(user)}, nil
}

func (s *UserServer) ExportUsers(
    req *pb.ExportUsersRequest,
    stream pb.UserService_ExportUsersServer,
) error {
    users, err := s.repo.FindAll(stream.Context())
    if err != nil {
        return status.Error(codes.Internal, "データ取得に失敗しました")
    }

    for _, user := range users {
        if err := stream.Send(toProtoUser(user)); err != nil {
            return err
        }
    }
    return nil
}

客户端实现(TypeScript)

// src/client/userClient.ts
import { createClient } from '@connectrpc/connect';
import { createGrpcTransport } from '@connectrpc/connect-node';
import { UserService } from '../gen/user/v1/user_connect';

const transport = createGrpcTransport({
  baseUrl: 'https://api.example.com',
  httpVersion: '2',
});

const client = createClient(UserService, transport);

// 类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类类型安全なAPI呼び出し
const response = await client.getUser({ id: 'user-123' });
console.log(response.user?.name);

// ストリーミング
for await (const user of client.exportUsers({})) {
  console.log(user.name);
}

インターセプター(中间件)

认证、日志记录、メトリクス収集などの横断的関心事はインターセプターで实现します。让 Claude Code「认证インターセプター添加」と依頼すれば、JWTToken验证のインターセプターを生成してくれます。

REST APIとの比較

項目gRPCREST
プロトコルHTTP/2HTTP/1.1 or HTTP/2
数据形式Protocol BuffersJSON
类型安全性強いツール依存
ストリーミングネイティブ支持WebSocket等が必要
浏览器支持gRPC-Web必要ネイティブ

总结

借助 Claude Code,gRPCのProto定義から服务器/客户端实现まで効率よく進められます。微服务设计API开发指南也建议一并参考。

gRPC的详细信息请参阅gRPC官方文档

#Claude Code #gRPC #Protocol Buffers #microservices #backend