Swift Protobuf 初探 —— 继 XML 后,JSO

作者: Binboy_ | 来源:发表于2016-11-24 08:25 被阅读686次

Protocol Buffers 是什么?

Protocol buffers are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. —— Google Official Definition

简单地说,Protocol Buffers 就是一种轻量高效的结构化数据交换格式,语言无关、平台无关、可扩展。理解地直白粗暴一点就是“更厉害更面向未来的 JSON”,那么接下来我们就将通过 Swift 官方实现的 Protobuf 来一探究竟。

Swift Protobuf

从去掉软盘到干掉光驱,从摈弃 Flash 推广 HTML5 ,到现在干脆把标准音频接口抹去,苹果一向善于引领科技时尚,那么在面向未来的数据交换格式上自然不会落后,因此 Swift Protobuf 应运而生。

开始动手尝试吧

本来我想拿照官方示例来走一遍的,但这次正好有个绝佳的示例,既有客户端又有服务端,可以“做”享其成一次,其中还涉及到 Go 语言,趁此机会也可以把玩一番。

ProtoBufExample 克隆至本地

➜ git clone https://github.com/KyoheiG3/ProtobufExample.git
➜ cd ProtobufExample

配置客户端

➜ cd ./ProtobufClient
➜ pod install

初始化服务端

➜ cd ./ProtobufServer
➜ swift build
// 创建工程文件,以便在 Xcode 下编辑
➜ swift package generate-xcodeproj

启动 API

➜ ./.build/debug/api

配置并启动服务 with Go

➜ go get github.com/golang/protobuf/protoc-gen-go
➜ go run server/api.go
  • 有必要的话,先下载安装 Go 语言环境,并配置 $GOPATH
➜ mkdir ~/go
➜ export GOPATH=~/go
➜ export PATH=$PATH:$GOPATH/bin

体会 .proto

安装 protobuf

➜ brew install protobuf

用 Swift 编译 protobuf

➜ cd ./ProtobufServer
➜ swift build
➜ protoc --plugin=protoc-gen-swift=.build/debug/protoc-gen-swift --swift_out=../protos --proto_path=../protos ../protos/DataModel.proto

此时我们就能在 protos 这个输出目录下就可以看到刚刚生成的对应 .pb.swift 文件了。

/*
 * Generated by the protocol buffer compiler.
 * Source: DataModel.proto
 */

import Foundation
import SwiftProtobuf

public struct BookInfo: ProtobufGeneratedMessage {
  public var swiftClassName: String {return "BookInfo"}
  public var protoMessageName: String {return "BookInfo"}
  public var protoPackageName: String {return ""}
  public var jsonFieldNames: [String: Int] {return [
    "id": 1,
    "title": 3,
    "author": 2,
  ]}
  public var protoFieldNames: [String: Int] {return [
    "id": 1,
    "title": 3,
    "author": 2,
  ]}

  public var id: Int64 = 0

  public var title: String = ""

  public var author: String = ""

  public init() {}
  ......
  ......
  ......
  if !keys.isEmpty {
      try visitor.visitMapField(fieldType: ProtobufMap<ProtobufString,ProtobufString>.self, value: keys, protoFieldNumber: 4, protoFieldName: "keys", jsonFieldName: "keys", swiftFieldName: "keys")
    }
  }

  public func _protoc_generated_isEqualTo(other: MyLibrary) -> Bool {
    if id != other.id {return false}
    if name != other.name {return false}
    if books != other.books {return false}
    if keys != other.keys {return false}
    return true
  }
}

其中还包括了一些对 JSON 的友好兼容,感兴趣的朋友可以自己动手玩一下。

探索更多

Google Protocol Buffers

Swift Protobuf

ProtobufExample - Github

深入理解 ProtoBuf

Google Protocol Buffer 的使用和原理 - IBM

相关文章

  • Swift Protobuf 初探 —— 继 XML 后,JSO

    Protocol Buffers 是什么? Protocol buffers are Google's langu...

  • swift Protobuf (一)初探

    什么是ProtoBuf?Protobuf是google推出的数据交换格式,其功能类似于xml、json,用户数据传...

  • 你应该懂得protobuf

    某大牛封装的(protobuf-swift) 苹果封装的(swift-protobuf) 本文记录配置环境过程,不...

  • Swift初探(二)

    继Swift初探之后,我们来继续学习下Swift里的结构体,类,协议,闭包 结构体 两种调用结构体的方法1.调用结...

  • protobuf 初探

    一 简介 Google Protocol Buffer(简称Protobuf)是Google公司内部的混合语言数据...

  • 2020-06-18

    Protobuf For Swift 公司项目重构,为了优化网络请求响应的时间, 需将部份数据使用protobuf...

  • 最近用到的一些String的一些常用方法

    string的Base64加密/解密 oc 加密 oc解密 swift 加密 swift 解密 oc字典转jso...

  • google的protobuf使用

    针对数据解析,个人觉得json,xml等比protobuf 效率低,最近看了下goole的protobuf,发现c...

  • Google Protobuf简单使用

    一、简介 1.什么是ProtoBuf? Protobuf是google推出的数据交换格式,相比xml、json主要...

  • js使用ProtoBuf,支持web端

    之前在移动端oc/swift语言使用ProtoBuf,最近在web端js使用了ProtoBuf,周末无事,整理记录...

网友评论

    本文标题:Swift Protobuf 初探 —— 继 XML 后,JSO

    本文链接:https://www.haomeiwen.com/subject/ymkbpttx.html