SwiftJSONRPC
使用方法
定义服务
import SwiftJSONRPC
class UserService: RPCService {
func vote(rating: Int) async throws -> Int {
return try await invoke("vote", params: ["rating": rating])
}
func create(name: String) async throws -> User {
return try await invoke("create", params: ["name": name])
}
// And other JSON-RPC methods
}
您可以根据需求定义任意数量的服务。
发起请求
// Init JSON-RPC client
let url = URL(string: "http://example.com/rpc")!
let client = RPCClient(url: url)
// Init JSON-RPC service
let service = MyService(client: client)
// Perform request
try await service.vote(rating: 5)
结果解码
SwiftJSONRPC 使用 Swift 的 Decodable
协议来解析响应对象。
struct User: Decodable {
let id: String
let name: String
}
class UserService: RPCService {
func getCurrentUser() async throws -> User {
return try await invoke("getCurrentUser")
}
}
let user = try await userService.getCurrentUser()
print("Current user ID = \(user.id), name = \(user.name)")
如需修改JSONDecoder
的行为,请使用RPCClient.coder.resultDecoder
。
client.coder.resultDecoder.dateDecodingStrategy = .iso8601
参数编码
SwiftJSONRPC使用Swift的Encodable
协议对请求参数进行编码。
struct Message: Encodable {
let text: String
}
class MessageService: RPCService {
func send(message: Message) async throws {
return try await invoke("sendMessage", params: message)
}
}
let message = Message(text: "Hello World")
try await messageService.send(message: message)
如需修改JSONEncoder
的行为,请使用RPCClient.coder.paramsEncoder
。
client.coder.paramsEncoder.dateDecodingStrategy = .iso8601
安装
CocoaPods
SwiftJSONRPC通过CocoaPods提供。要安装它,只需将以下行添加到Podfile中:
pod "SwiftJSONRPC"
Carthage
github "kolyasev/SwiftJSONRPC"
Swift包管理器
dependencies: [
.package(url: "https://github.com/kolyasev/SwiftJSONRPC.git", .upToNextMajor(from: "0.7.0"))
]
待办事项
- 添加对不带“id”成员的通知请求对象的支持。
作者
Denis Kolyasev,[email protected]
许可证
SwiftJSONRPC 在 MIT 许可下可用。有关更多信息,请参阅 LICENSE 文件。