प्रोटोकॉल बफर के साथ LLMApi: gRPC मोक API समर्थन (हिन्दी (Hindi))

प्रोटोकॉल बफर के साथ LLMApi: gRPC मोक API समर्थन

Thursday, 06 November 2025

//

18 minute read

परिचय

यह LLMApi. में gRPC मोक API समर्थन के लिए दस्तावेज़ है

नोट: यह जीटहुब से प्रत्यक्ष है

न्यूगेटGenericName न्यूगेटGenericName

आप मिल सकते हैं GitHub यहाँ परियोजना के लिए, सभी सार्वजनिक डोमेन आदि

प्रोटोकॉल बफर के साथ जीआरपीसी मोक API समर्थन

अब LLMock API comprehensive gRPC समर्थन प्रदान करता है, आपको बिना किसी सेवा कार्यान्वयन लिखने के जीआरपीसी सेवाओं को गतिशील रूप से नकल करने की अनुमति देता है .proto फ़ाइलें, और मॉक सर्वर बाकी को संभालता है - आपके प्रोटोबॉफ संदेश परिभाषाओं पर आधारित वास्तविक प्रतिक्रियाएं उत्पन्न करता है

ऑवरव्यू

जीआरपीसी सुविधा दो अनुपूरक दृष्टिकोणों को समर्थित करती है

  1. एचटीटीपी पर JSON ब्राउज़र के लिए उपयुक्त
  2. द्विआधारी प्रोटोकॉल बफर वास्तविक जीआरपीसी क्लाइंटों के साथ समान परीक्षण

दोनों दृष्टिकोण एक ही अपलोड का उपयोग करते हैं .proto परिभाषाओं और LLM

graph TD
    A[Upload .proto File] --> B[Proto Parser]
    B --> C[Service Definitions Stored]
    C --> D{Client Request Type?}
    D -->|JSON| E[JSON Endpoint]
    D -->|Binary Protobuf| F[Binary Endpoint]
    E --> G[LLM Generates Response]
    F --> G
    G --> H{Output Format?}
    H -->|JSON| I[Return JSON]
    H -->|Binary| J[Serialize to Protobuf]
    J --> K[Return Binary Response]

त्वरित प्रारंभ

1. प्रोटो फ़ाइल अपलोड करें

पहला, एक में अपने gRPC सेवा परिभाषित करें .proto फ़ाइल:

syntax = "proto3";

package userservice;

service UserService {
  rpc GetUser (GetUserRequest) returns (User);
  rpc ListUsers (ListUsersRequest) returns (UserList);
  rpc CreateUser (CreateUserRequest) returns (User);
}

message GetUserRequest {
  int32 user_id = 1;
}

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

message CreateUserRequest {
  string name = 1;
  string email = 2;
  optional string phone = 3;
}

message User {
  int32 id = 1;
  string name = 2;
  string email = 3;
  optional string phone = 4;
  string created_at = 5;
  bool is_active = 6;
}

message UserList {
  repeated User users = 1;
  int32 total_count = 2;
  int32 page = 3;
}

इस प्रोटो फ़ाइल को मॉक सर्वर में अपलोड करें

# Upload via plain text body
curl -X POST http://localhost:5116/api/grpc-protos \
  -H "Content-Type: text/plain" \
  --data-binary "@user_service.proto"

# Or upload as multipart form
curl -X POST http://localhost:5116/api/grpc-protos \
  -F "file=@user_service.proto"

प्रतिक्रिया आपकी सेवा संरचना दिखाता है:

{
  "message": "Proto definition uploaded successfully",
  "name": "user_service.proto",
  "package": "userservice",
  "services": [
    {
      "name": "UserService",
      "methods": [
        {
          "name": "GetUser",
          "type": "Unary",
          "input": "GetUserRequest",
          "output": "User"
        },
        {
          "name": "ListUsers",
          "type": "Unary",
          "input": "ListUsersRequest",
          "output": "UserList"
        },
        {
          "name": "CreateUser",
          "type": "Unary",
          "input": "CreateUserRequest",
          "output": "User"
        }
      ]
    }
  ]
}

कॉल विधि HTTP पर JSON

त्वरित परीक्षण और ब्राउज़र के लिए

# Get a user (JSON request/response)
curl -X POST http://localhost:5116/api/grpc/UserService/GetUser \
  -H "Content-Type: application/json" \
  -d '{"user_id": 12345}'

LLM आपके प्रोटो परिभाषा के अनुरूप एक वास्तविक प्रतिक्रिया उत्पन्न करता है

{
  "id": 12345,
  "name": "Sarah Chen",
  "email": "[email protected]",
  "phone": "+1-555-0142",
  "created_at": "2024-03-15T10:30:00Z",
  "is_active": true
}

कॉल विधि 3. द्विआधारी प्रोटोकॉल बफर

सच्ची जीआरपीसी तार प्रोटोकॉल के साथ उत्पादन के लिए

# Create a binary Protobuf request (example using protoc)
echo '{"user_id": 12345}' | \
  protoc --encode=userservice.GetUserRequest user_service.proto > request.bin

# Send binary request, get binary response
curl -X POST http://localhost:5116/api/grpc/proto/UserService/GetUser \
  -H "Content-Type: application/grpc+proto" \
  --data-binary "@request.bin" \
  --output response.bin

# Decode binary response
protoc --decode=userservice.User user_service.proto < response.bin

आउटपुट

id: 12345
name: "Sarah Chen"
email: "[email protected]"
phone: "+1-555-0142"
created_at: "2024-03-15T10:30:00Z"
is_active: true

यह कैसे काम करता है

प्रोटो फ़ाइल पार्सिंग

जब आप एक अपलोड करते हैं .proto फ़ाइल, मॉक सर्वर इसे निकालने के लिए विश्लेषण करता है

  • सेवा परिभाषाएँ
  • आरपीसी विधि हस्ताक्षर
  • संदेश प्रकार परिभाषाएँ
  • क्षेत्र प्रकार और संख्याएँ
sequenceDiagram
    participant Client
    participant ProtoManager
    participant ProtoParser
    participant Storage

    Client->>ProtoManager: Upload user_service.proto
    ProtoManager->>ProtoParser: Parse(content)
    ProtoParser->>ProtoParser: Extract syntax/package
    ProtoParser->>ProtoParser: Parse services
    ProtoParser->>ProtoParser: Parse messages
    ProtoParser->>ProtoManager: Return ProtoDefinition
    ProtoManager->>Storage: Store in ConcurrentDictionary
    ProtoManager->>Client: Return success + metadata

पदवर्णक प्रोटो तत्वों को पहचानने के लिए regex-आधारित निष्कर्ष का उपयोग करता है

// Service extraction
var serviceRegex = new Regex(
    @"service\s+([a-zA-Z0-9_]+)\s*\{([^}]+)\}",
    RegexOptions.Singleline);

// Method extraction
var methodRegex = new Regex(
    @"rpc\s+([a-zA-Z0-9_]+)\s*\(\s*(stream\s+)?([a-zA-Z0-9_.]+)\s*\)" +
    @"\s*returns\s*\(\s*(stream\s+)?([a-zA-Z0-9_.]+)\s*\)");

// Message extraction
var messageRegex = new Regex(
    @"message\s+([a-zA-Z0-9_]+)\s*\{([^}]+)\}",
    RegexOptions.Singleline);

अनुरोध प्रबंधन प्रवाह

JSON अंतबिंदुएँ

sequenceDiagram
    participant Client
    participant Endpoint
    participant GrpcHandler
    participant ProtoManager
    participant LLM

    Client->>Endpoint: POST /api/grpc/UserService/GetUser<br/>(JSON body)
    Endpoint->>ProtoManager: FindMethod(UserService, GetUser)
    ProtoManager->>Endpoint: Return method definition
    Endpoint->>GrpcHandler: HandleUnaryCall(service, method, json)
    GrpcHandler->>ProtoManager: GetMessage(User)
    ProtoManager->>GrpcHandler: Return message schema
    GrpcHandler->>GrpcHandler: Build LLM prompt with schema
    GrpcHandler->>LLM: Generate response for User message
    LLM->>GrpcHandler: Return JSON response
    GrpcHandler->>Endpoint: Extract and return JSON
    Endpoint->>Client: JSON response

ह्यान्डलर LLM: के लिए एक विस्तृत प्रवर्धन बनाता है

var prompt = $@"You are a gRPC service mock. Generate realistic data for this response.

Service: {serviceName}
Method: {methodName}
Request: {requestJson}

Generate a response matching this structure:
{jsonShape}

Return ONLY valid JSON matching the structure above. Be creative with realistic values.";

द्विआधारी प्रोटोबॉफ़ अंतबिन्दु

sequenceDiagram
    participant Client
    participant Endpoint
    participant GrpcHandler
    participant ProtobufHandler
    participant LLM

    Client->>Endpoint: POST /api/grpc/proto/UserService/GetUser<br/>(Binary Protobuf)
    Endpoint->>GrpcHandler: HandleUnaryCallBinary(service, method, bytes)
    GrpcHandler->>ProtobufHandler: CreateJsonTemplate(inputMessage)
    ProtobufHandler->>GrpcHandler: Return JSON template
    GrpcHandler->>LLM: Generate response (same as JSON flow)
    LLM->>GrpcHandler: Return JSON response
    GrpcHandler->>ProtobufHandler: SerializeFromJson(json, outputMessage)
    ProtobufHandler->>ProtobufHandler: Write Protobuf binary format
    ProtobufHandler->>GrpcHandler: Return binary bytes
    GrpcHandler->>Endpoint: Return binary Protobuf
    Endpoint->>Client: Binary response (application/grpc+proto)

प्रोटोकॉल बफर सिरियलाइजेशन

DynamicProtobufHandler क्षेत्र परिभाषाओं के प्रयोग से JSON को द्विआधारी प्रोटोबॉफ प्रारूप में बदलता है:

public byte[] SerializeFromJson(
    string json,
    ProtoMessage messageDefinition,
    List<ProtoMessage> allMessages)
{
    var jsonDoc = JsonDocument.Parse(json);
    using var stream = new MemoryStream();
    using var writer = new CodedOutputStream(stream);

    // Write each field according to proto definition
    foreach (var field in messageDefinition.Fields.OrderBy(f => f.Number))
    {
        if (!jsonDoc.RootElement.TryGetProperty(field.Name, out var fieldValue))
            continue; // Skip missing fields

        WriteField(writer, field, fieldValue, allMessages);
    }

    writer.Flush();
    return stream.ToArray();
}

तार प्रकार क्षेत्र प्रकार से निर्धारित किए जाते हैं

private WireFormat.WireType GetWireType(string fieldType)
{
    return fieldType switch
    {
        "string" or "bytes" => WireFormat.WireType.LengthDelimited,
        "int32" or "int64" or "uint32" or "uint64" or
        "sint32" or "sint64" or "bool" => WireFormat.WireType.Varint,
        "fixed32" or "sfixed32" or "float" => WireFormat.WireType.Fixed32,
        "fixed64" or "sfixed64" or "double" => WireFormat.WireType.Fixed64,
        _ => WireFormat.WireType.LengthDelimited // Complex/nested types
    };
}

प्रबंधन API

जीआरपीसी विशेषता में प्रोटो परिभाषाओं के साथ काम करने के लिए एक पूर्ण प्रबंधन API शामिल है

सभी प्रोटोज़ सूचीबद्ध करें

curl http://localhost:5116/api/grpc-protos

प्रतिक्रिया

{
  "definitions": [
    {
      "name": "user_service.proto",
      "package": "userservice",
      "syntax": "proto3",
      "uploadedAt": "2025-01-05T20:30:00Z",
      "serviceCount": 1,
      "messageCount": 5,
      "services": ["UserService"]
    }
  ],
  "count": 1
}

प्रोटो विवरण प्राप्त करें

curl http://localhost:5116/api/grpc-protos/user_service.proto

सभी सेवाओं सहित पूर्ण विवरण लौटाता है

प्रोटो मिटाएँ

curl -X DELETE http://localhost:5116/api/grpc-protos/user_service.proto

सभी प्रोटोस साफ करें

curl -X DELETE http://localhost:5116/api/grpc-protos

API अंतबिंदु संदर्भ

प्रोटो प्रबंधन अंतबिन्दु

विधि |--------|----------|-------------| | POST | /api/grpc-protos एक प्रोटो फ़ाइल अपलोड करें | GET | /api/grpc-protos सभी अपलोड किए गए प्रोटो परिभाषाओं को सूचीबद्ध करें | GET | /api/grpc-protos/{name} एक विशिष्ट प्रोटो के विवरण प्राप्त करें | DELETE | /api/grpc-protos/{name} एक विशिष्ट प्रोटो परिभाषा मिटाएँ | DELETE | /api/grpc-protos सभी प्रोटो परिभाषाओं को साफ करें

जीआरपीसी सेवा कॉल अंतबिन्दु

विधि |--------|----------|-------------| | POST | /api/grpc/{service}/{method} JSON अनुरोध के साथ विधि आह्वान करें | POST | /api/grpc/proto/{service}/{method} | द्विआधारी प्रोटोबॉफ अनुरोध के साथ विधि आह्वान करें

उन्नत उदाहरण

जटिल Nested संदेशComment

syntax = "proto3";

package orderservice;

service OrderService {
  rpc CreateOrder (OrderRequest) returns (Order);
}

message OrderRequest {
  string customer_id = 1;
  repeated OrderItem items = 2;
  Address shipping_address = 3;
  PaymentInfo payment = 4;
}

message OrderItem {
  string product_id = 1;
  int32 quantity = 2;
  double unit_price = 3;
}

message Address {
  string street = 1;
  string city = 2;
  string state = 3;
  string postal_code = 4;
  string country = 5;
}

message PaymentInfo {
  string method = 1;
  string last_four_digits = 2;
}

message Order {
  string order_id = 1;
  string customer_id = 2;
  repeated OrderItem items = 3;
  Address shipping_address = 4;
  string status = 5;
  double total_amount = 6;
  string created_at = 7;
}

नेस्टेड JSON के साथ कॉल करें

curl -X POST http://localhost:5116/api/grpc/OrderService/CreateOrder \
  -H "Content-Type: application/json" \
  -d '{
    "customer_id": "CUST-12345",
    "items": [
      {
        "product_id": "PROD-001",
        "quantity": 2,
        "unit_price": 29.99
      },
      {
        "product_id": "PROD-042",
        "quantity": 1,
        "unit_price": 149.99
      }
    ],
    "shipping_address": {
      "street": "123 Main Street",
      "city": "San Francisco",
      "state": "CA",
      "postal_code": "94102",
      "country": "USA"
    },
    "payment": {
      "method": "credit_card",
      "last_four_digits": "4242"
    }
  }'

एलएलएम सभी nested क्षेत्रों को populated के साथ एक वास्तविक क्रम प्रतिक्रिया उत्पन्न करता है

दोहराई गई फील्ड्स और एरे

प्रोटो पार्सर स्वतः दोहराए गए क्षेत्रों को नियंत्रित करता है

message ProductList {
  repeated Product products = 1;
  int32 total_count = 2;
}

message Product {
  string id = 1;
  string name = 2;
  double price = 3;
  repeated string tags = 4;
}

बहुल नीस्टेड एरे के साथ प्रतिक्रिया

{
  "products": [
    {
      "id": "PROD-001",
      "name": "Wireless Mouse",
      "price": 29.99,
      "tags": ["electronics", "peripherals", "wireless"]
    },
    {
      "id": "PROD-002",
      "name": "Mechanical Keyboard",
      "price": 149.99,
      "tags": ["electronics", "peripherals", "gaming"]
    }
  ],
  "total_count": 47
}

कॉन्फ़िगरेशन

अपने ASP को gRPC समर्थन जोड़ें

using mostlylucid.mockllmapi;

var builder = WebApplication.CreateBuilder(args);

// Add LLMock API services (includes gRPC)
builder.Services.AddLLMockApi(builder.Configuration);

var app = builder.Build();

// Map proto management endpoints
app.MapLLMockGrpcManagement("/api/grpc-protos");

// Map gRPC service call endpoints (both JSON and binary)
app.MapLLMockGrpc("/api/grpc");

app.Run();

AddLLMockApi() विधि स्वचालित पंजीकरण करता है

  • ProtoDefinitionManager - अपलोड किए गए प्रोटो परिभाषाओं का प्रबंधन करता है
  • ProtoParser पार्सेज़ फ़ाइलें
  • DynamicProtobufHandler - द्विआधारी प्रोटोबॉफ श्रृंखलाकरण यंत्र करता है
  • GrpcRequestHandler - प्रक्रिया जीआरपीसी विधि कॉल करता है

मौजूदा सीमाएं

सिर्फ यूनारी कॉल्स

वर्तमान कार्यान्वयन समर्थन करता है केवल एकल आरपीसी कॉल्स (simple request-response). Streaming methods are parsed but not yet implemented

service DataService {
  // Supported
  rpc GetData (Request) returns (Response);

  // Not yet supported
  rpc StreamData (Request) returns (stream Response);
  rpc UploadData (stream Request) returns (Response);
  rpc BidirectionalStream (stream Request) returns (stream Response);
}

स्ट्रीमिंग विधि को कॉल करने का प्रयास एक त्रुटि बताता है:

{
  "error": "Method StreamData is not a unary call. Type: ServerStreaming"
}

सरल प्रोटोबॉफ़ विश्लेषण

द्विआधारी प्रोटोबॉफ कार्यान्वयन सरल किया गया है

  • पद वर्णन की मांगवर्तमान में वास्तविक द्विआधारी प्रोटोबॉफ निवेदन को विश्लेषण करने के बजाय JSON टेम्प्लेट का उपयोग करता है

  • प्रतिक्रिया क्रमीकरणतार प्रकारों और क्षेत्र संख्याओं के अनुसार द्विआधारी प्रोटोबॉफ प्रारूप में JSON को उचित रूप से क्रमबद्ध करता है

पूर्ण अनुरोध पद वर्णन में चर को संभालने के लिए अतिरिक्त जटिलता की आवश्यकता होगी

प्रोटो फ़ाइल प्रारूप समर्थन

पदवर्णक सामान्य प्रोटो युक्तियों को समर्थन करता है लेकिन इसकी सीमाएं हैं

समर्थित

  • बुनियादी क्षेत्र प्रकार (stringM SK1 int32,int 64, uintMSC4 uinteMska5 boolMsko6 floatMsco7 doubleMsho8 bytesMko9
  • दोहराए गए क्षेत्र
  • वैकल्पिक क्षेत्र
  • Nested संदेश @info: whatsthis
  • यूनारी विधियों के साथ सेवाएं

समर्थित नहीं

  • इनम (पर्सेड लेकिन वैध नहीं है
  • नक्शे (अभी लागू नहीं है
  • में से एक (not parsed)
  • एक्सटेंशन
  • विकल्प और एनोटेशन (ignored
  • आयात कथन (संशोधित नहीं है

जीआरपीसी सर्वर प्रतिबिम्बन (अगामी है

मानक जीआरपीसी क्लाइंट सर्भरों से आशा करते हैं कि वे जीआरपीसी सर्वर परावर्तन प्रोटोकॉल.

मौजूदा स्थिति

  • परावर्तन अवसंरचना का प्रयोग करते हुए लागू किया गया protobuf-net.Reflection (v
  • प्रोटो फ़ाइलें इस पर कम्पाइल की जाती हैं FileDescriptorSet जब अपलोड किया गया
  • GrpcReflectionService संकलित वर्णनकर्ताओं को भंडारित और प्रबंधित करता है
  • के साथ एकीकरण ProtoDefinitionManager पूर्ण

क्या काम करता है

  • गतिशील प्रोटो संकलन .proto फ़ाइलें रनटाइम पर विश्लेषण और संकलित की जाती हैं
  • डिस्क्रिप्टर भंडारण: FileDescriptorSet ऑब्जेक्टों को उत्पन्न और कैश किया जाता है
  • प्रबंधन API GET /api/grpc-protos सभी अपलोड प्रोटो फ़ाइलों को पूर्ण विवरण सहित सूचीबद्ध करता है
  • एचटीटीपी के माध्यम से पूर्ण सेवा खोज और परीक्षण
  • डेमो पृष्ठ: इंटरैक्टिव यूआई सभी उपलब्ध सेवाओं और विधियों को दिखाता है

क्या प्रगति में है

  • मानक जीआरपीसी परावर्तन अंतबिंदु मानचित्रण (grpc.reflection.v1alpha.ServerReflection सेवा
  • आवश्यकता के बिना पूरा grpcurl एकीकरण -proto झंडा

तकनीकी कार्यान्वयन

जब आप एक अपलोड करते हैं .proto फ़ाइल, सिस्टम

  1. प्रोटो को विश्लेषण करता है regex-के आधार पर ProtoParser के लिए JSON/HTTP अंतबिंदु
  2. परावर्तन के लिए कम्पाइलें प्रोटोबॉफ़ का उपयोग करते हुए FileDescriptorSet:
    var fileSet = new FileDescriptorSet { ImportPath = { "." } };
    fileSet.Add(protoName, true, new StringReader(protoContent));
    fileSet.Process(); // Compiles the .proto file
    
  3. वर्णनकर्ताओं को बदलता है के बीच protobuf-net और Google.Protobuf प्रारूपों की संगतता
  4. दोनों प्रतिनिधित्वों को भंडारित करता है dual-प्रोकोल समर्थन के लिए

मौजूदा वर्कराउंड

# Provide proto file manually to grpcurl (always works)
grpcurl -proto yourfile.proto localhost:5116 list

# Use the JSON endpoint for testing (no grpcurl needed)
curl http://localhost:5116/api/grpc/UserService/GetUser \
  -H "Content-Type: application/json" \
  -d '{"user_id": 123}'

# Check available services via management API
curl http://localhost:5116/api/grpc-protos

# Use the interactive demo page at http://localhost:5116/Grpc

क्यों पूर्ण नहीं है

जीआरपीसी परावर्तन प्रोटोकॉल की आवश्यकता है:

  • मानचित्रण ServerReflection परावर्तन प्रश्नों को संभालने के लिए आरपीसी सेवा
  • सभी प्रतिबिंब विधियों का उचित कार्यान्वयन (ListServices, FileByFilenameM SK2 आदि
  • ASP.NET कोर जीआरपीसी सर्वर अवसंरचना के साथ एकीकरण

आधार जगह पर है - प्रोटो फ़ाइलों को कम्पाइल किया गया और वर्णनकर्ता उपलब्ध हैं

परीक्षण रणनीति

जेसन के साथ ब्राउज़र परीक्षण

विकास के दौरान त्वरित पुनरावृत्ति हेतु

// Fetch API in browser
async function getUser(userId) {
  const response = await fetch(`http://localhost:5116/api/grpc/UserService/GetUser`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ user_id: userId })
  });

  return await response.json();
}

const user = await getUser(12345);
console.log(user);

द्विआधारी के साथ एकीकृत परीक्षण

अधिक वास्तविक परीक्षण के लिए जो उत्पादन से मिलते हैं

#!/bin/bash

# Generate binary request
echo '{"user_id": 12345}' | \
  protoc --encode=userservice.GetUserRequest user_service.proto > request.bin

# Call binary endpoint
curl -X POST http://localhost:5116/api/grpc/proto/UserService/GetUser \
  -H "Content-Type: application/grpc+proto" \
  --data-binary "@request.bin" \
  --output response.bin

# Decode and verify
protoc --decode=userservice.User user_service.proto < response.bin

# Clean up
rm request.bin response.bin

स्वचालित परीक्षण

उदाहरण xUnit परीक्षण:

[Fact]
public async Task GrpcService_GetUser_ReturnsValidUser()
{
    // Arrange
    var protoContent = File.ReadAllText("user_service.proto");
    await _client.PostAsync("/api/grpc-protos",
        new StringContent(protoContent, Encoding.UTF8, "text/plain"));

    var request = new { user_id = 12345 };

    // Act
    var response = await _client.PostAsJsonAsync(
        "/api/grpc/UserService/GetUser", request);

    // Assert
    Assert.Equal(HttpStatusCode.OK, response.StatusCode);

    var user = await response.Content.ReadFromJsonAsync<JsonElement>();
    Assert.True(user.TryGetProperty("id", out _));
    Assert.True(user.TryGetProperty("name", out _));
    Assert.True(user.TryGetProperty("email", out _));
}

त्रुटिमोचन

प्रोटो अपलोड असफल

लक्षण: प्रोटो फ़ाइल अपलोड करने में त्रुटि

{
  "error": "No proto content provided"
}

समाधानसुनिश्चित करें कि आप प्रोटो फ़ाइल सामग्री सही रूप से भेज रहे हैं

  • सादा पाठ के रूप में Content-Type: text/plain
  • बहुभाग के रूप में Content-Type: multipart/form-data

विधि नहीं मिला

लक्षण:

{
  "error": "Method UserService/GetUser not found. Upload proto file first."
}

समाधान:

  1. सत्यापित प्रोटो अपलोड किया गया था GET /api/grpc-protos
  2. सेवा और विधि नाम ठीक से मिलते हैं जाँचें
  3. सुनिश्चित करें कि विधि प्रकार अनरी है (not streaming

प्रतिक्रिया में अवैध JSON

लक्षण: LLM त्रुटिपूर्ण JSON को लौटाता है

यह कभी-कभी जटिल nested संरचनाओं के साथ हो सकता है. नमूना सर्वर LLM प्रतिक्रिया से JSON को निकालने की कोशिश करता है

समाधान:

  • अनुरोध पुनः प्रयास करें (LLM प्रतिक्रियाएं भिन्न हैं
  • संदेश संरचना सरल करें
  • अनुप्रयोग सेटिंग में LLM सही रूप से कॉन्फ़िगर किया गया है जाँचें

द्विआधारी प्रोटोबॉफ़ त्रुटि

लक्षण: द्विआधारी अंतबिंदु त्रुटियों या विरूपित डेटा को लौटाता है

समाधान:

  • आप को सत्यापित करें'से अनुरोध सही एनकोड कर रहे हैं protoc
  • @info: whatsthis application/grpc+proto
  • सुनिश्चित करें कि प्रोटो फ़ाइल संदेश संरचना से मेल खाता है

निष्पादन विचार

प्रोटो पार्सिंग

प्रोटो फ़ाइलों को एक बार अपलोड करने पर पद वर्णन किया जाता है और स्मृति में भंडारित होता है

// Singleton storage
private readonly ConcurrentDictionary<string, ProtoDefinition> _definitions = new();

एलएलएम कॉल ओवरहेड

प्रत्येक जीआरपीसी विधि कॉल LLM अनुरोध ट्रिगर करता है

  • एक ही अनुरोध के लिए कैशिंग प्रतिक्रियाओं पर विचार करें
  • सामंजस्य बनाए रखने के लिए संदर्भ विशेषता का उपयोग करें
  • LLM समय समाप्ति सेटिंग समायोजन करें यदि आवश्यक हो

द्विआधारी क्रमिकीकरण

द्विआधारी प्रोटोबॉफ श्रृंखलाकरण JSON के मुकाबले न्यूनतम ओवरहेड जोड़ता है

  • JSON: तेज सीरियलाइजेशन
  • द्विआधारी: अधिक वास्तविकता से युक्त

भावी संवर्धन

योजनाबद्ध विशेषताएँ

  1. सर्वर स्ट्रीमिंग - के लिए समर्थन returns (stream Response) तरीकों
  2. क्लाइंट स्ट्रीमिंग - के लिए समर्थन (stream Request) returns तरीकों
  3. द्विआयामी प्रवाह - पूर्ण डुपलेक्स प्रवाह
  4. जीआरपीसी परावर्तन - उपकरण संगतता के लिए मानक प्रतिबिंब प्रोटोकॉल
  5. वैधता की मांग करें - इनकमिंग बाइनरी प्रोटोबॉफ अनुरोधों का विश्लेषण और सत्यापन करें
  6. संवर्धित प्रोटो समर्थन - EnumsM SK1 maps , oneofs, imports
  7. प्रतिक्रिया कैशिंग - निर्धारात्मक प्रतिक्रियाओं के लिए वैकल्पिक कैचिंग

योगदान कर रहा है

एक बग मिला या योगदान करना चाहते हैं? योगदान दिशानिर्देशों के लिए GitHub रिपोजिटरी जाँचें

सारांश

जीआरपीसी नमूना API सुविधा उन्हें लागू किए बिना जीआर पी सी सेवाओं को परीक्षण करने के लिए एक शक्तिशाली तरीका प्रदान करता है

  • .प्रो फ़ाइलों को अपलोड करें और तुरंत कार्यशील नमूना सेवाएं प्राप्त करें
  • या द्विआधारी प्रोटोबॉफ के बीच चुनें
  • LLM-generated responses match your message schemas
  • प्रोटो परिभाषाओं के लिए पूर्ण प्रबंधन API
  • मौजूदा LLMock API विशेषताओं के साथ सीधा एकीकृत करता है

चाहे आप द्रुत ब्राउज़र कर रहे हों या - के आधार पर परीक्षण कर रहे हैं या व्यापक एकीकृत परीक्षण सूटों का निर्माण कर रहे है।

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.