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との比較
| 項目 | gRPC | REST |
|---|---|---|
| プロトコル | HTTP/2 | HTTP/1.1 or HTTP/2 |
| 数据形式 | Protocol Buffers | JSON |
| 类型安全性 | 強い | ツール依存 |
| ストリーミング | ネイティブ支持 | WebSocket等が必要 |
| 浏览器支持 | gRPC-Web必要 | ネイティブ |
总结
借助 Claude Code,gRPCのProto定義から服务器/客户端实现まで効率よく進められます。微服务设计やAPI开发指南也建议一并参考。
gRPC的详细信息请参阅gRPC官方文档。
免费 PDF:5 分钟看懂 Claude Code 速查表
只需留下邮箱,我们就会立即把这份 A4 一页速查表 PDF 发送给你。
我们会严格保护你的个人信息,绝不发送垃圾邮件。
把 Claude Code 变成真正能带来结果的工作流
先领取中文说明的免费 PDF,再进入英文商品页选择合适的教材。如果你需要团队落地、流程设计或内容变现支持,也可以直接咨询。
本文作者
Masa
深度使用 Claude Code 的工程师。运营 claudecode-lab.com——一个涵盖 10 种语言、超过 2,000 页内容的科技媒体。
相关文章
每天发布多语言 Claude Code 文章前,要先检查的 7 件事
一份实用清单,帮助你每天发布多语言 Claude Code 文章时避免漏语言、CTA 错位和线上内容未更新。
Codex Automations 是什么?让 AI 在你睡觉时完成内容运营
用 Codex Automations 自动查看流量、选择主题、写文章、改善转化路径并部署网站的实用指南。
Claude Code × GCP Cloud Functions 完全指南 | 极速开发无服务器函数
用 Claude Code 高效开发 GCP Cloud Functions。从 HTTP/Pub/Sub/Firestore 触发器实现到本地测试、部署自动化,基于 Masa 的实战经验,附完整可运行代码示例。