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 和协议缓冲区序列化的主要内容,如果未能解决你的问题,请参考以下文章

在 PhoneGap 中使用协议缓冲区 - iOS

Google 协议缓冲区和 stl 向量、映射和提升共享指针

确定协议缓冲区消息类型的最佳实践

在没有它们的情况下解析协议缓冲区数据

反序列化缓冲区协议缓冲区

使用协议缓冲区模拟泛型