现在要开始做一个新的业务模块了,系统思考下 新的业务模式应该是采用 JSON-RPC 2.0 还是 老套路 REST API 的接口协议 ,系统的学习下
{
"jsonrpc": "2.0",
"method": "subtract",
"params": [42, 23],
"id": 1
}
GET /api/v1/users/123
POST /api/v1/users
PUT /api/v1/users/123
DELETE /api/v1/users/123
{
"jsonrpc": "2.0",
"method": "createUser",
"params": {
"name": "张三",
"age": 25,
"email": "[email protected]"
},
"id": 1
}
[
{"jsonrpc": "2.0", "method": "getUser", "params": [1], "id": "1"},
{"jsonrpc": "2.0", "method": "getUser", "params": [2], "id": "2"}
]
POST /api/users
Content-Type: application/json
{
"name": "张三",
"age": 25,
"email": "[email protected]"
}
POST /api/users/batch
Content-Type: application/json
{
"users": [
{"name": "张三", "age": 25},
{"name": "李四", "age": 30}
]
}
特性 | JSON-RPC 2.0 | REST |
---|---|---|
优点 | • 协议简单,易实现 • 支持批量请求 • 明确的错误处理 • 支持通知机制 • 适合复杂业务逻辑 |
• 简单直观 • 优秀的缓存机制 • 良好的可扩展性 • 丰富的工具支持 • 符合 HTTP 语义 |
缺点 | • 不如 REST 直观 • 缓存机制较弱 • 工具支持较少 • 不符合 HTTP 语义 |
• 复杂业务支持不友好 • URL 设计可能复杂 • 某些操作难以表示 • 可能需要多个请求 |
安全特性 | JSON-RPC 2.0 | REST |
---|---|---|
认证机制 | 需要自行实现认证 | 标准 HTTP 认证 |
加密支持 | 可使用 HTTPS 加密 | HTTPS 加密 |
权限控制 | 需要方法级权限控制 | OAuth/JWT 支持 |
错误处理 | 统一的错误处理 | HTTP 状态码错误处理 |
性能特性 | JSON-RPC 2.0 | REST |
---|---|---|
请求优化 | 批量请求优化 | HTTP 缓存机制 |
开销控制 | 通知机制减少开销 | 条件请求 |
数据处理 | 自定义压缩机制 | 资源压缩 |
连接管理 | 连接复用 | 连接池化 |
工具特性 | JSON-RPC 2.0 | REST |
---|---|---|
工具生态 | 工具相对较少 | 丰富的工具生态 |
文档支持 | 需要自定义文档 | Swagger/OpenAPI 支持 |
测试工具 | 基础测试工具 | Postman 等测试工具 |
代码生成 | 客户端生成简单 | 完善的代码生成工具 |
选择 JSON-RPC 2.0 的情况:
选择 REST 的情况:
混合使用的情况:
MCP(Model Context Protocol)是大模型与工具交互的协议。它选择 JSON-RPC 2.0 而不是 RESTful API 有其深层的技术考虑:
// MCP 典型的函数调用请求
{
"jsonrpc": "2.0",
"method": "mcp_sequential_thinking_sequentialthinking",
"params": {
"thought": "分析当前问题...",
"nextThoughtNeeded": true,
"thoughtNumber": 1,
"totalThoughts": 5
},
"id": 1
}
主要原因:
// 函数调用链示例
{
"jsonrpc": "2.0",
"method": "mcp_webresearch_search_google",
"params": {
"query": "最新 AI 发展",
"explanation": "搜索最新 AI 发展动态"
},
"id": "search_1"
}
// 后续的函数调用
{
"jsonrpc": "2.0",
"method": "mcp_webresearch_visit_page",
"params": {
"url": "https://example.com/ai-news",
"takeScreenshot": true
},
"id": "visit_1"
}
优势:
// 连续思考过程
{
"jsonrpc": "2.0",
"method": "mcp_sequential_thinking_sequentialthinking",
"params": {
"thought": "第一步:理解问题本质",
"thoughtNumber": 1,
"totalThoughts": 3,
"nextThoughtNeeded": true
},
"id": "thought_1"
}
// 下一个思考步骤
{
"jsonrpc": "2.0",
"method": "mcp_sequential_thinking_sequentialthinking",
"params": {
"thought": "第二步:分析可能的解决方案",
"thoughtNumber": 2,
"totalThoughts": 3,
"nextThoughtNeeded": true
},
"id": "thought_2"
}
// 文件系统操作
{
"jsonrpc": "2.0",
"method": "mcp_filesystem_read_file",
"params": {
"path": "docs/example.md"
},
"id": "read_1"
}
// 命令行操作
{
"jsonrpc": "2.0",
"method": "mcp_desktop_commander_execute_command",
"params": {
"command": "ls -l",
"timeout_ms": 5000
},
"id": "cmd_1"
}
// 统一的错误响应格式
{
"jsonrpc": "2.0",
"error": {
"code": -32000,
"message": "工具调用失败",
"data": {
"tool": "mcp_filesystem_read_file",
"reason": "文件不存在"
}
},
"id": "read_1"
}
// 维护对话上下文
{
"jsonrpc": "2.0",
"method": "mcp_context_manager",
"params": {
"conversation_id": "conv_123",
"user_query": "分析问题",
"system_context": {
"tools_available": ["tool1", "tool2"],
"user_info": {"os": "darwin", "shell": "/bin/zsh"}
}
},
"id": "ctx_1"
}
结构化通信:
工具调用链:
异步操作支持:
性能考虑:
// 工具调用示例
{
"jsonrpc": "2.0",
"method": "codebase_search",
"params": {
"query": "查找相关代码",
"explanation": "搜索代码库中的相关实现"
},
"id": "search_1"
}
// 文件编辑示例
{
"jsonrpc": "2.0",
"method": "edit_file",
"params": {
"target_file": "src/main.py",
"instructions": "添加新功能",
"code_edit": "// ... existing code ..."
},
"id": "edit_1"
}
协议特性匹配:
实现简单:
性能优势:
功能完备:
特别适合 AI 工具调用:
这些特性使得 JSON-RPC 2.0 成为大模型 MCP 协议的理想选择,能够很好地支持 AI 模型与各种工具之间的交互通信需求。