Swift 全棧開發之路 (一)protoc && SwiftPM

大朕東發表於2019-01-29

The Tips

  • 結合VaporGoogle Protocol Buffers實踐一款簡單的應用
  • 使用SwiftPM建立專案,編寫Server端程式碼

Google Protocol Buffers

Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data — think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.

Protocol Buffers 是一種輕便高效的結構化資料儲存格式,可以用於結構化資料序列化,或者說序列化。它很適合做資料儲存或 RPC 資料交換格式。可用於通訊協議、資料儲存等領域的語言無關、平臺無關、可擴充套件的序列化結構資料格式。支援多種語言,詳見Google 官方文件

其次,Google今年開源了gPRC,gPRC用到的資料儲存格式就是 protocol buffers。

Swift 全棧開發之路 (一)protoc && SwiftPM

#####使用Protocbuf的好處

**「高效」**效能比XML快,儲存比XML小
**「易於使用」**只要按編寫好資料結構,然後通過命令列工具,可以轉換到不同的語言環境下使用,目前已經支援了java,c++,python,OC,還有Swift等等
**「省流量」**同一條資料資訊,是JSON的1/10,XML的1/20,效能是XML的接近10倍

#####如何使用Protocbuf,大致分兩步
1、使用protobuf 的語法構建你需要的資料型別
2、使用命令列轉化成你需要的語言格式,比如C++,Java,Swift等

#####安裝protoc和**swift-protobuf-plugin**

$ brew install protobuf

讓protobuf可以轉化成Swift格式,需要安裝最近開源的**swift-protobuf**
這裡就不做闡述,可以直接到Github上跟著教程走

#####舉個簡單的例子
step1,構建資料結構(因為.proto是二進位制檔案,可以在命令列上直接建立)

$ vim Search.proto

syntax = "proto3";
message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 result_per_page = 3;
}
複製程式碼

在輸入wq!退出編輯後,執行

$ protoc –swift_out=. my.proto

可以在該目錄下找到Person.pb.swift的檔案

工程如果需要使用只要匯入這個檔案即可,而不需要Person.proto這個二進位制檔案。


我們使用SwiftPM來嘗試一下

Last Remarks

上一篇至今已經有兩個月了,有同學已經在催我寫第(二)篇了。當初是想要在一週後發(二)的,但是實話說,我不知道要從什麼地方開始寫,我不懂的地方太多了,怕寫錯,寫的不深入,沒有什麼技術水平。這個月我沒有閒著,對服務端Swift程式設計依然很感興趣。

  • 看了很多大神的文章;Instapaper通道
  • 看了Hcaking with Swift關於Server-side Swift的書;
  • 經常逛Slack,看來自世界各地的人們在討論Vapor,也很感謝有個大佬幫我解決了我的vapor命令列錯誤。
  • 看完了IBM出的書「Extending Swift Value(s) to the Server」,講了Kitura、SwiftPM、ValueType 、Protocol Oriented Programming,學了很多。
  • 瞭解了MVVM設計模式
  • 實踐如何用Swift處理protobuf,感謝@諸葛俊偉的幫助。
  • 寫了幾篇關於Swift 面向協議程式設計的文章。
  • 用Swift做了爬蟲,amazing
  • 當然最後還有準備期末考試…

想引用在某文章看的一句話,大概是這個意思

網際網路的路是沒有盡頭的,只有不斷的學習,才能在這個大浪中躋身前列

###Write the code, change the world.

相關文章