本篇博客算是一個開頭,接下來會持續更新使用Swift3.0開發服務端相關的博客。當然,我們使用目前使用Swift開發服務端較為成熟的框架Perfect來實現。Perfect框架是加拿大一個創業團隊開發的,目前是Perfect2.0版本,關於Perfect框架,下方會詳細的介紹。本篇博客會演示一個完整的Demo, 該Demo完全由Swift3.0開發,其中包括服務端和iOS客戶端,數據庫采用的是MySQL。
進一步說,本篇博客將會演示一個使用Swift3.0開發的記事本,當然該記事本的服務端和iOS端都是使用Swift 3.0開發的。該記事本包括登錄,注冊,添加筆記,更新筆記,刪除筆記以及查詢筆記,簡單的說就是對筆記的CURD操作。本篇博客算是Swift3.0服務端開發系列博客的開始,我們先通過今天這篇博客整體的看一下Perfect框架可以做的事情,然后一步一步的開發出一個完整的項目。
本篇博客先對Perfect框架進行了簡單介紹,然后演示由Perfect開發的Demo, 最后給出相應Demo的部分技術實現。
一、Perfect框架簡介
Perfect框架是目前比較完善的Swift服務端框架之一,當然其他的還有Vapor等其他的開源框架,橫向的對比了一下,還是Perfect的功能全面一些,目前Perfect的最新版本是2.0,由加拿大一創業團隊開發並維護。Perfect框架也是開源的,在Github上可以找到相關的源代碼(Perfect-Github地址:https://github.com/PerfectlySoft/Perfect)。Perfect的官網地址:https://www.perfect.org/,官網上有相關的Demo以及使用文檔,關鍵是其開發文檔有中文版的,這一點還是比較好的,官方開發文檔地址:https://www.perfect.org/docs/index_zh_CN.html。
因為Swift目前最新的版本是3.0,所以Perfect2.0只能在最新的Swift3.0版本上進行編譯。當然Swift語言支持Linux,iOS和Mac OS,所以Perfect框架也可以在上述的三種系統中進行編譯。我們可以使用Perfect開發Web應用,API等服務端應用。更多關於Perfect框架的詳細內容,請移步於Github或者官網進行了解,在此就不做過多贅述了。
二、示例展示
接下來我們先來看一下使用Swift3.0開發的服務端和iOS端的小Demo。在博客的開頭我們也提到過,我們要展示的Demo是一個簡單的筆記。包括登錄、注冊、筆記的增刪改查等功能。我們的服務端和iOS客戶端都是使用Swift3.0來實現的,當然服務端就是使用的上述的Perfect框架。接下來我們整體的看一下Demo的效果,后續的博客會給出更為具體的實現方式。
1.Demo功能介紹
下方就是我們Demo運行的具體效果,首先輸入用戶名點擊下一步,如果用戶已注冊,讓其輸入密碼登錄。登錄后進入筆記列表頁面,可以對相應的筆記進行增刪改查操作,具體做法如下所示。下圖左邊就是iOS客戶端運行的效果,右邊就是MySQL中的數據更新情況。
因為Demo的功能比較簡單,所以我們數據庫的表結構也是非常簡單的,user表中存儲的就是注冊用戶的信息,content表中存儲的就是筆記的相應信息,在content中有一個外鍵是userID, 每條內容通過userID外鍵與相應的用戶想關聯。換句話說,contentId與userId是一對多的關系。關於該Demo的數據庫設計細節,后期會詳細的介紹。
2.示例的項目結構
下方就是服務端+iOS客戶端的目錄結構,當然項目比較簡單,沒怎么分層。iOSClientForPerfect就是iOS客戶端工程,PerfectTemplate就是服務端的工程。這兩個Project位於同一個WorkSpace中。在PerfectTemplate中會有一些依賴的庫,Source文件夾下除了PerfectTemplate文件中的內容外,其他的都是依賴包,這些依賴包可以通過Package.swift文件進行配置。
下方是本工程中的Package.swift文件中的內容,也就是本工程中所依賴的包。
3、服務器log日志記錄
從上述依賴的包中我們可以清楚的看到依賴了日志過濾以及日志寫入的包,如果你的服務端要支持相關的日志記錄功能的話,那么就需要添加上述的這兩個依賴包了。下方就是我們工程記錄的日志文件。主要記錄了本工程的請求和相應以及Sql執行的相關信息,如下所示:
4.服務端API組織結構
下方就是本篇博客所演示Demo的服務端API。數據傳輸的格式為JSON,iOS客戶端將會對服務器端返回的JSON進行請求。全是POST請求,相應報文包括list,result以及errorMessage。list中存儲的就是從服務端獲取的相關數據,而result中存儲的是接口請求狀態,SUCCESS標志着請求成功,FAILURE標志着請求失敗。當請求失敗時,errorMessage會有相應的報文信息。當然這種API是比較常規的的做法,當然在請求報文中,應該添加上公共報文的,公共報文中可以添加token等公共信息,當然本Demo中沒有添加,下方是部分API
(1)、通過用戶名查詢用戶是否存在接口
請求方式:POST
請求地址:/queryUserInfoByUserName
請求參數:
響應報文:
(2)、用戶登錄或者注冊接口
請求方式:POST
請求地址:/login,/register
請求參數:
響應報文:
(3)、獲取相應用戶的筆記列表接口
請求方式:POST
請求地址:/contentList
請求參數:
響應報文:
其他的就不一一的展示了。上述的Demo就先到這兒,等我們介紹完Perfect的基本知識后,再對上述的Demo的具體實現細節進行剖析。本篇博客對上述Demo就不做過多贅述了。
三、Perfect框架的獲取和編譯
上面算是Perfect框架的引子, 接下來我正式的進入Perfect框架的主題。當然我們以Mac OS下的Perfect為准,如果你使用的是Linux系統,Perfect官網上有相關的配置過程,關於Linux下的Perfect在此就不做過多贅述了。
1.獲取Perfect框架的模板
首先我們從Github上Clone一份Perfect框架的模板(PerfectTemplate:https://github.com/PerfectlySoft/PerfectTemplate)。具體執行命令以及執行結果如下所示:
git clone https://github.com/PerfectlySoft/PerfectTemplate
cd PerfectTemplate
ls
2.編譯模板
在PerfectTemplate目錄中有一個Package.swift文件,其中可以指定工程的名稱以及工程所依賴的包。首先我們打開Package.swift,指定我們工程的文件名。具體如下所示。
指定完工程名,接下來就該編譯我們的模板工程了,下方是編譯並執行上述工程的命令。因為首次編譯時需要從github上下載相關的依賴包,所以首次編譯的過程是比較漫長的,等待一段時間,編譯和執行的命令如下:
編譯:swift build
執行:.build/debug/ZeLuLiPerfectDemo
還是那句話,首次編譯的過程會比較慢,下方就是首次編譯是需要下載的各種依賴包,然后再進行編譯的過程:
編譯完成后,會提示你鏈接並運行的命令,如果執行該命令后,你的Perfect服務端的服務就啟動了,如下所示:
執行完畢后,我們就可以通過瀏覽器訪問我們的Perfect服務器了。默認端口是8181,所以我們訪問的本機地址是localhost:8181。下方是訪問上述地址返回的具體信息,如下所示:
我們可以在Source文件夾下的main.swift文件中對我們的服務進行相關的配置,我們可以改一下端口和返回的內容:
重新編譯並運行,結果如下所示:
3.生成Xcode項目
編譯並運行成功后,我們可以使用Swift3.0自帶的包管理器,生成一個Xcode項目。下方就是生成的Xcode的Project文件的命令
swift
package
generate
-
xcodeproj
運行上面的命令就會生成相應的xcodeproj文件,我們就可以使用Xcode來管理我們的項目了。因為Project框架僅支持Swift3.0, 所以我們需要使用Xcode8.0+版本來打開生成的xcodeproj文件。如下:
你就可以打開上面生成的xcodeproj文件了,可以通過Xcode來編譯和運行我們的Perfect項目,當然要選擇Mac運行。運行完畢后,我們的服務就啟動了,就可以在瀏覽器中進行訪問了,如下所示:
本篇博客就先到這兒,下篇博客仍然會對Project框架進行介紹,在使用該框架時,我們還會涉及一些Perfect框架的部分源碼的解析。
Perfect完整Demo的github分享地址為: https://github.com/lizelu/PerfectDemo ,在以后的博客中,我們會陸續的對該Demo的具體實現細節進行講解,本篇博客算是一個Perfect框架的概述。