一个使用仓颉编程语言实现的完整、类型安全的JSON-RPC 2.0协议库,支持请求、响应、通知和批处理操作。
这是一个JSON-RPC 2.0库实现,使用仓颉编程语言编写。它提供了完整的、类型安全的JSON-RPC协议实现,支持请求、响应、通知和批处理操作。
- ✅ 完整的JSON-RPC 2.0协议支持 - 严格遵循JSON-RPC 2.0规范
- ✅ 类型安全 - 使用仓颉的类型系统确保运行时安全
- ✅ 模块化架构 - 清晰分离的核心组件和接口
- ✅ 批处理支持 - 完整的批量请求和响应处理
- ✅ 扩展性 - 基于接口的设计允许自定义处理器实现
- ✅ 完整测试覆盖 - 59个单元测试 + 23个性能基准测试
- ✅ 高性能 - 优化的序列化和解析性能
# 构建项目
cjpm build
# 运行测试
cjpm test
# 运行性能基准测试
cjpm bench
# 清理构建文件
cjpm cleanimport jsonrpc.server.*
import jsonrpc.core.*
import stdx.encoding.json.*
// 创建处理器
let handler = SimpleJsonRpcHandler()
// 注册方法处理器
let echoHandler: RequestHandler = { params =>
match (params) {
case Some(value) => JsonRpcResult.Success(value)
case None => JsonRpcResult.Success(JsonString("empty"))
}
}
handler.registerMethod("echo", echoHandler)
// 创建服务器
let server = JsonRpcServer(handler)
// 启动服务器
match (server.start()) {
case JsonRpcResult.Success(_) => println("服务器已启动")
case JsonRpcResult.Error(err) => println("启动失败: ${err}")
}// 处理JSON-RPC请求
let requestJson = '{"jsonrpc":"2.0","method":"echo","params":"hello","id":"1"}'
match (server.processMessage(requestJson)) {
case JsonRpcResult.Success(Some(response)) => println("响应: ${response}")
case JsonRpcResult.Success(None) => println("处理通知消息")
case JsonRpcResult.Error(err) => println("处理错误: ${err}")
}// 处理批量请求
let batchJson = '[
{"jsonrpc":"2.0","method":"echo","params":"hello","id":"1"},
{"jsonrpc":"2.0","method":"echo","params":"world","id":"2"}
]'
match (server.processBatchMessage(batchJson)) {
case JsonRpcResult.Success(responses) => println("批量响应: ${responses}")
case JsonRpcResult.Error(err) => println("批处理错误: ${err}")
}项目采用模块化架构,具有完整的测试覆盖:
实现: src/core/message.cj
包含JSON-RPC 2.0的基础消息结构:
RequestId枚举 - 处理字符串、数字或null类型的IDJsonRpcRequest结构 - 带有方法、参数和ID的请求消息JsonRpcResponse结构 - 带有结果或错误的响应消息JsonRpcNotification结构 - 通知消息(无ID)JsonRpcError结构 - 标准化错误对象
测试: src/core/message_test.cj (18个测试用例)
全面的单元测试,覆盖所有核心消息功能。
实现: src/codec/parser.cj
中心解析逻辑:
JsonRpcParser类 - 严格遵循JSON-RPC 2.0协议的主解析器JsonRpcMessage枚举 - 所有消息类型的判别联合ParseResult枚举 - 类型安全的解析结果- 标准错误响应的静态工厂方法(-32700至-32603)
测试: src/codec/parser_test.cj (20个测试用例)
广泛的解析、验证和错误处理测试。
实现: src/server/server.cj
服务器基础设施:
JsonRpcHandler接口 - 定义请求/通知处理SimpleJsonRpcHandler类 - 基于HashMap的方法路由JsonRpcServer类 - 支持单一和批量消息处理的主服务器- 支持通过函数引用进行方法注册
- 全面的错误处理和响应生成
测试: src/server/server_test.cj (21个测试用例)
完整的服务器功能、处理器注册和消息处理测试。
实现: src/benchmark/benchmark.cj
使用仓颉@Bench宏的综合性能测试套件,涵盖:
- 所有类型的消息序列化性能
- 各种JSON-RPC消息格式的解析性能
- 服务器吞吐量和处理能力
- 处理器注册和查找性能
- 错误处理和恢复性能
- 类型安全: 广泛使用Option类型和模式匹配来消除空指针错误
- 协议合规: 严格遵循JSON-RPC 2.0规范,进行适当验证
- 错误处理: 完整的错误分类,支持标准错误码和自定义错误
- 扩展性: 基于接口的设计允许自定义处理器实现
- 批处理: 完全支持JSON-RPC 2.0规范中的批量请求
项目拥有完整的测试套件,包括单元测试和性能基准测试:
核心消息类型测试 - src/core/message_test.cj (18个测试用例):
- RequestIdTests (6个测试用例) - 字符串、数字、null ID的创建和序列化
- JsonRpcRequestTests (4个测试用例) - 请求消息创建、参数处理、验证
- JsonRpcResponseTests (3个测试用例) - 成功和错误响应处理
- JsonRpcNotificationTests (3个测试用例) - 通知消息处理
- JsonRpcMessageTests (2个测试用例) - 消息类型枚举和序列化
编解码器测试 - src/codec/parser_test.cj (20个测试用例):
- ParserConfigTests (2个测试用例) - 解析器配置
- JsonRpcParserTests (10个测试用例) - 各种消息类型解析和错误处理
- JsonRpcParserFactoryTests (5个测试用例) - 标准错误响应创建
- JsonRpcParserValidationTests (3个测试用例) - 消息验证逻辑
服务器实现测试 - src/server/server_test.cj (21个测试用例):
- ServerConfigTests (2个测试用例) - 服务器配置
- ServerStatsTests (2个测试用例) - 统计信息
- SimpleJsonRpcHandlerTests (5个测试用例) - 处理器注册和调用
- JsonRpcServerTests (9个测试用例) - 完整服务器功能
- CompositeJsonRpcHandlerTests (3个测试用例) - 复合处理器功能
消息序列化基准测试:
- 请求序列化性能(基本和带参数)
- 响应和错误响应序列化性能
- 通知序列化性能
消息解析基准测试:
- 各种JSON-RPC消息类型的解析性能
- 批量请求解析性能
服务器性能基准测试:
- 简单请求和计算请求处理性能
- 通知和无效请求处理性能
- 批量请求处理性能
处理器基准测试:
- 方法注册和查找性能
- 未知方法查找性能
- 支持方法列表获取性能
错误处理基准测试:
- 标准错误和自定义错误创建性能
- 错误序列化和响应创建性能
# 运行所有单元测试
cjpm test
# 运行性能基准测试
cjpm bench
# 查看详细的测试报告
cjpm test --verbose
# 生成HTML性能报告
cjpm bench --report-format=html
# 导出性能数据为CSV
cjpm bench --report-format=csv-raw- 单元测试: 59/59 通过 ✅
- 性能测试: 23/23 通过 ✅
- 构建状态: 成功 ✅
- 协议合规: JSON-RPC 2.0完全兼容 ✅
完整的API文档请参考 docs/api-reference.md
RequestId- JSON-RPC请求标识符(字符串、数字或null)JsonRpcRequest- JSON-RPC请求消息JsonRpcResponse- JSON-RPC响应消息JsonRpcNotification- JSON-RPC通知消息(无ID)JsonRpcError- 标准化错误对象
JsonRpcHandler- 处理器接口SimpleJsonRpcHandler- 简单处理器实现JsonRpcServer- 主服务器类CompositeJsonRpcHandler- 复合处理器
JsonRpcParser- 消息解析器JsonRpcMessage- 消息类型枚举ParseResult- 解析结果枚举
- 核心依赖:
stdx.encoding.json用于JSON处理 - 集合类:
std.collection.HashMap和ArrayList用于数据结构 - 扩展库: 使用位于
third_party/stdx/的仓颉扩展标准库
扩展库提供预编译的二进制文件和头文件:
- JSON编解码 (
stdx.encoding.json) - HTTP网络 (
stdx.net.http) - 加密功能 (
stdx.crypto) - 增强测试功能 (
stdx.unittest)
- 模式匹配: 广泛使用
match语句进行类型判别 - Option类型: 使用
Option<T>和Some/None模式安全处理空值 - 带数据的枚举: 如
RequestId和JsonRpcMessage等丰富的枚举类型 - 接口和类: 使用
JsonRpcHandler接口实现清晰的关注点分离 - 异常处理: 使用
try/catch块进行适当的错误传播 - 函数类型: 方法处理器使用一等函数
(Option<JsonValue>) -> JsonValue
库实现了多层错误处理方法:
- 解析级别:
ParseResult枚举捕获JSON和协议错误 - 协议级别: 标准JSON-RPC错误码和适当的错误对象
- 应用级别: 方法处理器中的异常处理和错误响应生成
- 批处理级别: 批处理内单个消息错误隔离
在这个代码库上工作时:
- 添加新方法: 通过
SimpleJsonRpcHandler.registerMethod()注册处理器 - 自定义处理器: 为复杂路由实现
JsonRpcHandler接口 - 测试更改: 始终运行
cjpm test确保所有59个测试用例通过 - 性能影响: 使用
cjpm bench验证没有性能回归 - 协议合规: 确保所有更改保持JSON-RPC 2.0规范合规
- 所有新功能必须包含相应的单元测试
- 性能关键代码应包含基准测试
- 使用仓颉惯用法:模式匹配、Option类型、适当的错误处理
- 遵循既定的命名约定和代码组织
- 为公共API维护全面的文档
本项目基于MIT许可证开源。
欢迎贡献!请确保:
- 所有测试通过
- 遵循代码风格指南
- 为新功能添加测试
- 更新相关文档
这个库专为在大型仓颉语言服务器或基于RPC的应用程序中用作依赖项而设计。