不依賴Parse或Firebase,如何開始爲你的iOS應用程序創建後端

不依賴Parse或Firebase,如何開始爲你的iOS應用程序創建後端

你的iOS應用程序需要後端。隨着Parse關閉了商店,現在我們該做什麼呢?找到一個Parse替換或建立自己的後端?

我堅定地站在“學會建立自己的”後端陣營這邊。

許多開發人員建議不要建立自己的後端。BaaS關閉後,這些開發商爭相尋找下一個替換BaaS。然後他們也會試圖說服你使用替換BaaS。但我們都知道有些事不可避免的會發生。有一天你會從你的BaaS提供者處得到一個“驚喜”郵件,通知你他們正好在你的新應用程序版本推出時關閉。

我記得那次也發生在我身上——一個我依靠的BaaS關閉了。當我第一次看到關閉通知的郵件時,我覺得被利用了。我感到被出賣了。然後我感到很生氣。我陷入了一個惡性循環,我孤立了自己。我吃冰淇淋,邊淋浴邊聽Celine Dion而哭泣。我應該能夠預見這種事的,但是我被方便的幻覺和服務提供的穩定誘惑了。但這都只是——一個錯覺。

爲什麼不可靠的BaaS提供商不斷出現還對我們這樣可憐的移動開發者這樣做呢?

構建你自己的後端的想法似乎勢不可擋。

學習如何建立後端是一項很重的工作。這就是爲什麼BaaS似乎是一個不錯的選擇。

但如果你想掙脫BaaS的依賴而構建自己的後端,關鍵之處在於:不要試圖瞭解後端的一切!我們需要從小事做起。

當你創建你的第一個iOS應用程序,你可能沒有專注於讓它成爲可伸縮和可維護的。你第一次沒有太多壓力,UITableview單元格得以回收和顯示錯誤的數據。你可能並不擔心你的應用是否應該遵循MVC或MVVM或MMVCM(我將其放在最後一個)。我敢打賭你的第一個應用可能從來沒有讓它試過模擬器。

我建議以同樣的方法建立後端:從小事做起。先做一些小事情,無論多麼的小。然後在此基礎上進行創建。

向後後端方法

你不需要把自己埋在關於Python或Ruby的書裏,或者你可以得到一個後端啓動並運行之前學習關於服務器的一切。設計整個API,部署它,擴展它——所有這些事情都可以稍後進行。

首先這樣做:

寫一個會調用你的後端的iOS函數,甚至在你構建後端之前

這是一個例子。假設你決定你的第一個函數會調用可以檢索一個特定用戶的信息的API。

下面的函數由Swift編寫,建一個POST請求‘/ get_messages’ 在並不存在(但很快會有的)的本地服務器上。讓我們來看看這個函數的代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
func printMessagesForUser() -> Void {
             
    let json = ["user":"larry"]
             
    do {
                 
        let jsonData = try NSJSONSerialization.dataWithJSONObject(json, options: .PrettyPrinted)
                 
        let url = NSURL(string: "http://127.0.0.1:5000/api/get_messages")!
        let request = NSMutableURLRequest(URL: url)
        request.HTTPMethod = "POST"
                 
        request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
        request.HTTPBody = jsonData
                 
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in
            if error != nil{
                print("Error -> \(error)")
                return
            }
            do {
                let result = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as? [String:AnyObject]
                print("Result -> \(result)")
                         
            } catch {
                print("Error -> \(error)")
            }
        }
                 
        task.resume()
    } catch {
        print(error)
    }
}

這段代碼建了一個帶用戶名“larry”的POST請求到“http://127.0.0.1:5000/api/get_messages”。當然,如果我們現在運行這段代碼,它是不會運行的,因爲我們還沒有創建端點“ttp://127.0.0.1:5000/api/get_messages”。這是下一步我們將要做的。

安裝Flask(如果你還沒有,就用Python)

不依賴Parse或Firebase,如何開始爲你的iOS應用程序創建後端

檢查Python和Flask文檔。

寫後端函數

現在,我們必須爲我們的iOS函數創建get_messages端點。這是它在默認Flask文件中的樣子,app.py:

1
2
3
4
5
6
@app.route('/api/get_messages', methods = ['POST'])
def get_messages():
    json = request.get_json()
    if json['user'== "larry":
        return jsonify({'messages':['test1''test2']})
    return jsonify({'error':'no user found'})

這個Python/Flask存根函數非常簡單。頂部的@app.route裝飾指定函數應該對應於‘get_messages’端點,它應該是一個POST請求。 ‘get_messages’函數的主題檢查request.get_json()——一個Flask函數,返回一個代碼,其中包含POST請求中發送的值。如果用戶名“larry”的消息是‘user’的請求參數,那麼函數會發送給客戶端包含一個字符串數組“test1”和“test2”的JSON對象代碼。

get_messages函數返回硬編碼JSON,但是以後你可以將它連接到一個真正的數據庫。在那之前,運行Flask服務器和iOS客戶端,看看你的後端的第一個構建塊是否能夠運行。接下來我們將這樣做。

運行本地服務器

我們確保app.py有以下的命令:

1
2
if __name__ == '__main__':
    app.run(debug = True)

現在你可以運行app.py來啓動Flask服務器:

1
Python app.py

這將以默認端口爲5000啓動託管在你的本地主機上的Flask服務器。

從你的應用程序調用函數

其實看到你的後端API返回的東西會給你後端構建冒險繼續前進的動力。

運行你一開始寫的“getMessages” Swift函數——把它貼在你的主要視圖控制器或應用程序委託上,然後重構。另外,確保你添加了以下代碼到你的info.plist,這樣你就可以在開發階段禁用iOS運輸安全需求:

1
2
3
4
5
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true>
</true></dict>

一旦你得到在控制檯上打印出來的數組{“test1”、“test2”},你就知道你已經成功地調用自己的後端。如果你沒有得到這組輸出,就繼續調整直到你拿到它。

如果你看到了這裏,祝賀你。通過更多的“填補空白”(學習一些Python,爲數據庫查詢插入一個ORM),你現在不需要Parse或任何形式的BaaS服務就可以編寫一個後端。

這是過於簡單化的嗎?是的,我們剛剛編寫的並不是一個完整的後端。適當的API設計、數據庫設計、服務器維護和可擴展性都是你將不得不解決的問題,以便你可以繼續你的旅程。但是如果你這樣開始,那麼你已經有了一個基礎,你必須控制你自己的系統。相比依賴於可能對你隨時拔掉插頭的另一個第三方提供者,這種控制要好得多。

本文翻譯自:How to Start Building a Backend for Your iOS App Without Relying on Parse or Firebase


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章