MCPcopy Create free account
hub / github.com/astercloud/aster / HandleBatchJSONRPC

Method HandleBatchJSONRPC

pkg/a2a/handler.go:137–210  ·  view source on GitHub ↗

HandleBatchJSONRPC 处理批量 JSON-RPC 2.0 请求 POST /a2a/{agentId}/batch

(c *gin.Context)

Source from the content-addressed store, hash-verified

135// HandleBatchJSONRPC 处理批量 JSON-RPC 2.0 请求
136// POST /a2a/{agentId}/batch
137func (h *Handler) HandleBatchJSONRPC(c *gin.Context) {
138 ctx := c.Request.Context()
139 agentID := c.Param("agentId")
140
141 if agentID == "" {
142 c.JSON(http.StatusBadRequest, gin.H{
143 "success": false,
144 "error": gin.H{
145 "code": "bad_request",
146 "message": "Missing agentId parameter",
147 },
148 })
149 return
150 }
151
152 // 解析批量请求
153 var requests []JSONRPCRequest
154 if err := c.ShouldBindJSON(&requests); err != nil {
155 c.JSON(http.StatusBadRequest, &JSONRPCResponse{
156 JSONRPC: "2.0",
157 ID: nil,
158 Error: &RPCError{
159 Code: -32700, // Parse error
160 Message: "Invalid JSON was received",
161 Data: err.Error(),
162 },
163 })
164 return
165 }
166
167 if len(requests) == 0 {
168 c.JSON(http.StatusBadRequest, &JSONRPCResponse{
169 JSONRPC: "2.0",
170 ID: nil,
171 Error: &RPCError{
172 Code: -32600, // Invalid Request
173 Message: "Empty batch request",
174 },
175 })
176 return
177 }
178
179 logging.Info(ctx, "a2a.batch_jsonrpc_request", map[string]any{
180 "agent_id": agentID,
181 "count": len(requests),
182 })
183
184 // 处理每个请求
185 responses := make([]*JSONRPCResponse, 0, len(requests))
186 for _, req := range requests {
187 if req.JSONRPC != "2.0" {
188 responses = append(responses, &JSONRPCResponse{
189 JSONRPC: "2.0",
190 ID: req.ID,
191 Error: &RPCError{
192 Code: -32600,
193 Message: "Invalid JSON-RPC version, must be '2.0'",
194 },

Callers

nothing calls this directly

Calls 5

InfoFunction · 0.92
JSONMethod · 0.80
HandleRequestMethod · 0.80
ContextMethod · 0.65
ErrorMethod · 0.65

Tested by

no test coverage detected