本篇部落格算是一個開頭,接下來會持續更新使用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檔案進行配置。
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
請求參數:
響應封包:![]()
Swift3.0服務端開發(一) 完整示例概述及Perfect環境搭建與配置(服務端+iOS端) ![]()
Swift3.0服務端開發(一) 完整示例概述及Perfect環境搭建與配置(服務端+iOS端)
(2)、使用者登入或者注冊接口
請求位址:/login,/register![]()
Swift3.0服務端開發(一) 完整示例概述及Perfect環境搭建與配置(服務端+iOS端) ![]()
Swift3.0服務端開發(一) 完整示例概述及Perfect環境搭建與配置(服務端+iOS端)
(3)、擷取相應使用者的筆記清單接口
請求位址:/contentList響應封包:![]()
Swift3.0服務端開發(一) 完整示例概述及Perfect環境搭建與配置(服務端+iOS端) ![]()
Swift3.0服務端開發(一) 完整示例概述及Perfect環境搭建與配置(服務端+iOS端)
其他的就不一一的展示了。上述的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架構的概述。
作者:青玉伏案
出處:http://www.cnblogs.com/ludashi/
本文版權歸作者和共部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。
收履歷:某網際網路公司,招聘iOS/Android靠譜工程師,入職後,可内部聯系樓主,有小禮品贈送,有意者可郵箱投遞履歷:[email protected]