Server Side Swift — 玩玩Vapor 4

Ken Lee
Jul 20, 2020

--

Photo by William Iven on Unsplash

一時興起,想玩玩Backend。這念頭也不是第一次有了,但一直都沒有實現,光是哪個語言、哪個框架就難以決定。最近毅然決然選擇熟悉的語言Swift做起手,起初想用Kitura,但去年底IBM退出Kitaru工作組的消息讓我改用Vapor。

若要成為後端工程師,目前(2020) Swift絕對不會是選擇之一,查查工作機會就知道了。

Vapor的官方文件及相關教學不算少,但也因為版本不同,可能也會有些不支援的情形。這次我簡單用Vapor 4做了基本CRUD的API作為註冊與登入(實務上應該使用Authentication相關api),和聊天室的WebSocket。

單純娛樂,過過乾癮。

我沒有任何Backend實務經驗,本次Project並不完整,姑且稱為「會動的程式」吧!

安裝Vapor:

brew install vapor

開專案於桌面:
Fluent可以順便安裝,DB我選SQLite。

cd Desktop/vapor new Demo_Project

開啟專案:

cd Desktop/Demo_Projectopen Package.swift

這樣就建立完基本的專案了!

接下來會以我這次實作的程式碼做簡短說明。

簡介:

Routes:

Example:
呼叫http://127.0.0.1:8080/hello,則會得到”Hello, world!“.

同時也register了MemberController及ChatRoomController,易於管理API,待會會提到。

底下設定好ws的路徑:

Example:
呼叫ws://127.0.0.1:8080/ChatRoom/12345
(12345 為某聊天室 ID)
則會連接到該聊天室

Controllers:

(以MemberController為例)

因為我有
http://127.0.0.1:8080/Members/CreateMember
http://127.0.0.1:8080/Members/Login
http://127.0.0.1:8080/Members/EditMemberInfo

不少的API要實作,不論是要接收哪種HttpMethod(get, post, put, delete…)都可以在此統一管理。

Models:

此Member Model需要同時在DB裡建立Table, 所以import了Fluent,
並且在屬性前面加上了不同PropertyWrapper。

一張Table需要有一個@ID,其他一般欄位則是@Field。
schema則是為了讓Fluent能找到對應的Table。

Migrations:

有Backend經驗的朋友應該比我更清楚作用,建立table需要migration。
這邊則是設定各欄位的key、型別、constraints及reference。

WebSocket:

前面在Routes有提到,不同的URL會被加入不同的ChatRoom。
使用者在加入之後會被記下,未來有其他人發訊息(onBinary)上來此ChatRoom後,全部的人都會接收到訊息。

心得:

我沒有任何Backend實務經驗,對於DB、Server、WebSocket的操作與設定的相關知識很有限,自己也知道有很多缺漏的地方,有點像是拼拼湊湊做出來,至少會動的程式。
但能用熟悉的語言做出自己的後台服務,真的頗有樂趣!

有興趣可以參考Vapor官方文件,網路上也有一些教學可以學習。

--

--