不依赖 Parse 或 Firebase,如何开始为你的 iOS 应用程序创建后端

1,013 阅读6分钟
原文链接: www.evget.com

概述:你的iOS应用程序需要后端。随着Parse关闭了商店,现在我们该做什么呢?找到一个Parse替换或建立自己的后端?来看看Moe Burney决定做什么。

你的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’ 在并不存在(但很快会有的)的本地服务器上。让我们来看看这个函数的代码:


 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)

检查Python和Flask文档。

写后端函数

现在,我们必须为我们的iOS函数创建get_messages端点。这是它在默认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'})

这个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有以下的命令:


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

现在你可以运行app.py来启动Flask服务器:


Python app.py

这将以默认端口为5000启动托管在你的本地主机上的Flask服务器。

从你的应用程序调用函数

其实看到你的后端API返回的东西会给你后端构建冒险继续前进的动力。

运行你一开始写的“getMessages” Swift函数——把它贴在你的主要视图控制器或应用程序委托上,然后重构。另外,确保你添加了以下代码到你的info.plist,这样你就可以在开发阶段禁用iOS运输安全需求:


NSAppTransportSecurity

    NSAllowsArbitraryLoads
    

一旦你得到在控制台上打印出来的数组{“test1”、“test2”},你就知道你已经成功地调用自己的后端。如果你没有得到这组输出,就继续调整直到你拿到它。

如果你看到了这里,祝贺你。通过更多的“填补空白”(学习一些Python,为数据库查询插入一个ORM),你现在不需要Parse或任何形式的BaaS服务就可以编写一个后端。

这是过于简单化的吗?是的,我们刚刚编写的并不是一个完整的后端。适当的API设计、数据库设计、服务器维护和可扩展性都是你将不得不解决的问题,以便你可以继续你的旅程。但是如果你这样开始,那么你已经有了一个基础,你必须控制你自己的系统。相比依赖于可能对你随时拔掉插头的另一个第三方提供者,这种控制要好得多。

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

PS: 关于移动开发,这些产品你可以关注>>
关于移动开发的最新资讯和产品推荐,请咨询在线客服>!

慧都控件|提供软件技术整体解决方案

云集全球三千余款优秀控件、软件产品,提供行业领先的咨询、培训与开发服务
企业QQ:800018081|电话:023-66090381