Use Cases

Claude Code के साथ gRPC Practical Guide

Claude Code का उपयोग करके grpc practical guide सीखें। Practical tips और code examples शामिल हैं।

gRPCdevelopmentको Claude Code से Efficient बनाएं

gRPCはGoogleがdevelopmentした高効率なRPCframeworkで、Protocol Buffersによる型safeな通信が特徴 है।Claude Code का उपयोग करके、Proto定義 सेserver/clientimplementation तक効率よく進められ है।

Protocol Buffers定義

service定義のcreate

> usermanagementserviceのProto定義をबनाओ。
> CRUD操作とpageネーションsupportのlistfetchを含めて。
// 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);
  // serverストリーミング:大量userのエクスポート
  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;
}

serverimplementation(Go)

> उपरोक्तProto定義のgRPCserverをGoでimplement करो。
> error handlingとinterceptorも含めて。
// 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, "datafetchに失敗しました")
    }

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

clientimplementation(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);

// 型safeな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);
}

interceptor(middleware)

authentication、logging、メトリクス収集 आदिの横断的関心事はinterceptorでimplement करते हैं。Claude Codeに「authenticationinterceptorをadd करो」と依頼すれば、JWTtoken検証のinterceptor generateしてくれ है।

REST APIとの比較

項目gRPCREST
プロトコルHTTP/2HTTP/1.1 or HTTP/2
data形式Protocol BuffersJSON
型safe性強いツール依存
ストリーミングネイティブsupportWebSocket等がज़रूरी
ブラウザsupportgRPC-Webज़रूरीネイティブ

Summary

Claude Code का उपयोग करके、gRPCのProto定義 सेserver/clientimplementation तक効率よく進められ है।マイクロservice設計APIdevelopmentガイドも合わせてreference के लिए देखें。

gRPCके details के लिएgRPCofficial documentationをदेखें。

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