• <menu id="w2i4a"></menu>
  • logo 移動開發(fā)學(xué)習(xí)指南

    文檔首頁>>移動開發(fā)學(xué)習(xí)指南>>不依賴Parse或Firebase,如何開始為你的iOS應(yīng)用程序創(chuàng)建后端

    不依賴Parse或Firebase,如何開始為你的iOS應(yīng)用程序創(chuàng)建后端


    不依賴Parse或Firebase,如何開始為你的iOS應(yīng)用程序創(chuàng)建后端

    你的iOS應(yīng)用程序需要后端。隨著Parse關(guān)閉了商店,現(xiàn)在我們該做什么呢?找到一個(gè)Parse替換或建立自己的后端?

    我堅(jiān)定地站在“學(xué)會建立自己的”后端陣營這邊。

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

    我記得那次也發(fā)生在我身上——一個(gè)我依靠的BaaS關(guān)閉了。當(dāng)我第一次看到關(guān)閉通知的郵件時(shí),我覺得被利用了。我感到被出賣了。然后我感到很生氣。我陷入了一個(gè)惡性循環(huán),我孤立了自己。我吃冰淇淋,邊淋浴邊聽Celine Dion而哭泣。我應(yīng)該能夠預(yù)見這種事的,但是我被方便的幻覺和服務(wù)提供的穩(wěn)定誘惑了。但這都只是——一個(gè)錯(cuò)覺。

    為什么不可靠的BaaS提供商不斷出現(xiàn)還對我們這樣可憐的移動開發(fā)者這樣做呢?

    構(gòu)建你自己的后端的想法似乎勢不可擋。

    學(xué)習(xí)如何建立后端是一項(xiàng)很重的工作。這就是為什么BaaS似乎是一個(gè)不錯(cuò)的選擇。

    但如果你想掙脫BaaS的依賴而構(gòu)建自己的后端,關(guān)鍵之處在于:不要試圖了解后端的一切!我們需要從小事做起。

    當(dāng)你創(chuàng)建你的第一個(gè)iOS應(yīng)用程序,你可能沒有專注于讓它成為可伸縮和可維護(hù)的。你第一次沒有太多壓力,UITableview單元格得以回收和顯示錯(cuò)誤的數(shù)據(jù)。你可能并不擔(dān)心你的應(yīng)用是否應(yīng)該遵循MVC或MVVM或MMVCM(我將其放在最后一個(gè))。我敢打賭你的第一個(gè)應(yīng)用可能從來沒有讓它試過模擬器。

    我建議以同樣的方法建立后端:從小事做起。先做一些小事情,無論多么的小。然后在此基礎(chǔ)上進(jìn)行創(chuàng)建。

    向后后端方法

    你不需要把自己埋在關(guān)于Python或Ruby的書里,或者你可以得到一個(gè)后端啟動并運(yùn)行之前學(xué)習(xí)關(guān)于服務(wù)器的一切。設(shè)計(jì)整個(gè)API,部署它,擴(kuò)展它——所有這些事情都可以稍后進(jìn)行。

    首先這樣做:

    寫一個(gè)會調(diào)用你的后端的iOS函數(shù),甚至在你構(gòu)建后端之前

    這是一個(gè)例子。假設(shè)你決定你的第一個(gè)函數(shù)會調(diào)用可以檢索一個(gè)特定用戶的信息的API。

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

     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)
        }
    }

    這段代碼建了一個(gè)帶用戶名“larry”的POST請求到“http://127.0.0.1:5000/api/get_messages”。當(dāng)然,如果我們現(xiàn)在運(yùn)行這段代碼,它是不會運(yùn)行的,因?yàn)槲覀冞€沒有創(chuàng)建端點(diǎn)“ttp://127.0.0.1:5000/api/get_messages”。這是下一步我們將要做的。

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

    不依賴Parse或Firebase,如何開始為你的iOS應(yīng)用程序創(chuàng)建后端

    檢查Python和Flask文檔。

    寫后端函數(shù)

    現(xiàn)在,我們必須為我們的iOS函數(shù)創(chuàng)建get_messages端點(diǎn)。這是它在默認(rèn)Flask文件中的樣子,app.py:

    @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'})

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

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

    運(yùn)行本地服務(wù)器

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

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

    現(xiàn)在你可以運(yùn)行app.py來啟動Flask服務(wù)器:

    Python app.py

    這將以默認(rèn)端口為5000啟動托管在你的本地主機(jī)上的Flask服務(wù)器。

    從你的應(yīng)用程序調(diào)用函數(shù)

    其實(shí)看到你的后端API返回的東西會給你后端構(gòu)建冒險(xiǎn)繼續(xù)前進(jìn)的動力。

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

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

    一旦你得到在控制臺上打印出來的數(shù)組{“test1”、“test2”},你就知道你已經(jīng)成功地調(diào)用自己的后端。如果你沒有得到這組輸出,就繼續(xù)調(diào)整直到你拿到它。

    如果你看到了這里,祝賀你。通過更多的“填補(bǔ)空白”(學(xué)習(xí)一些Python,為數(shù)據(jù)庫查詢插入一個(gè)ORM),你現(xiàn)在不需要Parse或任何形式的BaaS服務(wù)就可以編寫一個(gè)后端。

    這是過于簡單化的嗎?是的,我們剛剛編寫的并不是一個(gè)完整的后端。適當(dāng)?shù)腁PI設(shè)計(jì)、數(shù)據(jù)庫設(shè)計(jì)、服務(wù)器維護(hù)和可擴(kuò)展性都是你將不得不解決的問題,以便你可以繼續(xù)你的旅程。但是如果你這樣開始,那么你已經(jīng)有了一個(gè)基礎(chǔ),你必須控制你自己的系統(tǒng)。相比依賴于可能對你隨時(shí)拔掉插頭的另一個(gè)第三方提供者,這種控制要好得多。

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

     

    PS: 關(guān)于移動開發(fā),這些產(chǎn)品你可以關(guān)注>>
    關(guān)于移動開發(fā)的最新資訊和產(chǎn)品推薦,請<咨詢在線客服>!
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();