iOS 网络 - Moya 和协议缓冲区序列化
Posted
技术标签:
【中文标题】iOS 网络 - Moya 和协议缓冲区序列化【英文标题】:iOS Networking - Moya & Protocol Buffer Serialisation 【发布时间】:2021-04-28 12:31:22 【问题描述】:谁能详细说明使用 Moya 与使用 ProtoBuf 序列化而不是 JSON 表示法的 Web 服务进行通信的可能性?是否可以?它是否已经实现或是否有任何扩展? 任何信息都非常感谢:)
【问题讨论】:
我认为 Moya 不支持 protobuf。您可能会从 Web 服务接收原始数据,然后使用这个库:github.com/apple/swift-protobuf 从中创建您的 proto 对象。 @vpoltave 是的,但是否有可能(理论上)集成这些以便 Moya 可以使用 swift-protobuf 进行序列化/反序列化? 【参考方案1】:是的,有可能
以下是如何将 protobuf 与 Moya 一起使用的过程。
import Foundation
import Moya
import SwiftProtobuf
enum Currency
case exchangeRate(param: SwiftProtobuf.Message)
extension Currency: TargetType
var validationType: ValidationType
return .successCodes
var headers: [String: String]?
return [
"Accept": "application/octet-stream",
"Content-Type": "application/octet-stream",
"Authorization": [use auth token here if any],
]
var baseURL: URL
return URL(string:"https:www.currency.com")
var path: String
switch self
case .exchangeRate:
return "/exchangeRate"
var method: Moya.Method
switch self
case .exchangeRate:
return .post
var parameters: Data?
switch self
case let .exchangeRate(param):
return try! param.serializedData()
var task: Task
switch self
case .exchangeRate:
return .requestData(self.parameters!)
您可以像这样访问 API:
provider = MoyaProvider<GitHub>()
provider.request(.exchangeRate(param:[here will be protobuf model object]))
result in
switch result
case let .success(moyaResponse):
//do something with the response data
case let .failure(error):
//error occured
【讨论】:
以上是关于iOS 网络 - Moya 和协议缓冲区序列化的主要内容,如果未能解决你的问题,请参考以下文章