在不依赖解析或Firebase的情况下为iOS应用构建后端

您的iOS应用需要后端。 有了Parse关闭店,现在该怎么办? 寻找解析替代品还是建立自己的后端?

我坚定地处于“学习构建自己的”后端阵营中。

许多开发人员建议不要构建自己的后端。 BaaS关闭后,这些开发人员争先恐后地寻找下一个替代BaaS。 然后他们会尝试说服您也使用替代BaaS。 但是我们都知道不可避免的事情会再次发生。 有一天,您会收到来自BaaS提供商的一封意外电子邮件,通知您他们即将在新应用程序版本发布期间关闭。

我记得发生在我身上的时间-我依赖于关闭的BaaS。 当我第一次看到关闭的电子邮件时,我感到很习惯。 我感到被出卖了。 然后我感到生气。 当我陷入螺旋式下降时,我孤立了自己。 我在冰淇淋上喝了些什么,然后在淋浴中抽泣时听了席琳·迪翁的歌。 我应该已经看到它的来临,但是我对服务所提供的便利性和稳定性的幻想着迷。 但是,仅此而已-一种幻觉。

那么,为什么夜以继日的BaaS提供程序会不断出现并向我们所有人贫穷的移动开发人员这样做呢?

建立自己的后端的想法似乎不可行。

学习有关构建后端的一切都是很多工作。 这就是为什么一开始BaaS似乎是一个不错的选择。

但是,如果您想摆脱对BaaS的依赖,而是构建自己的后端,那么这就是窍门:不要尝试学习有关后端的所有知识! 从小开始。

当您构建第一个iOS“应用”时,您可能并没有专注于使其具有可扩展性和可维护性。 第一次回收这些UITableview单元并显示错误的数据时,您并不会花费太多精力。 您可能并不担心您的应用程序应该遵循MVC还是MVVM还是MMVCM(我最后讲了)。 我敢打赌,您的第一个应用程序可能甚至从未通过模拟器。

我建议使用相同的方法来构建后端:从小处着手。 不管有多小,都首先要工作。 然后在此基础上。

后端后端方法

您无需将自己埋藏在有关Python或Ruby的书中,也无需学习有关服务器的所有知识,即可启动并运行后端。 设计整个API,进行部署和扩展-所有这些事情都可能在以后出现。

首先执行以下操作:

编写一个iOS函数,即使在构建后端之前也可以调用您的后端

这是一个例子。 假设您决定第一个函数将进行API调用以检索特定用户的消息。

以下用Swift编写的函数向尚不存在(但很快会出现)的本地服务器上的“ / get_messages”发出POST请求。 让我们看一下该函数的代码:

  func printMessagesForUser()->无效{ 
让json = [“ user”:“ larry”]
 做{ 
让jsonData =尝试NSJSONSerialization.dataWithJSONObject(json,选项:.PrettyPrinted)

让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”,对于HTTPHeaderField:“ Content-Type”)
request.HTTPBody = jsonData

let task = NSURLSession.sharedSession()。dataTaskWithRequest(request){数据,响应,错误
如果错误!=无{
print(“错误-> \(错误)”)
返回
}
做{
让结果=尝试NSJSONSerialization.JSONObjectWithData(data !, options:.AllowFragments)as? [String:AnyObject]
print(“结果-> \(结果)”)

} {
print(“错误-> \(错误)”)
}
}

task.resume()
} {
打印(错误)
}
}

此代码使用用户名“ larry”向“ http://127.0.0.1:5000/api/get_messages”发出POST请求。 当然,如果我们现在运行此代码,它将无法工作,因为我们尚未创建端点“ http://127.0.0.1:5000/api/get_messages”。 这就是我们接下来要做的。

安装Flask(如果尚未安装,请安装Python)

查看Python和Flask文档。

编写后端功能

现在,我们必须为iOS函数创建get_messages端点才能调用。 这是默认Flask文件app.py中的外观:

  @ app.route('/ api / get_messages',方法= ['POST']) 
def get_messages():
json = request.get_json()
如果json ['user'] ==“ larry”:
返回jsonify({'messages':['test1','test2']})
 返回jsonify({'错误':'未找到用户'}) 

这个Python / Flask存根函数非常简单。 顶部的@ app.route装饰器指定该函数应对应于’/ api_get_messages’端点,并且应为POST请求。 “ get_messages”函数的主体在request.get_json()内部进行检查,这是一个Flask函数,可返回包含POST请求中发送的值的字典。 如果为“ user”参数请求了用户名“ larry”的消息,则我们的函数向客户端发送一个JSON对象字典,其中包含字符串“ test1”和“ test2”的数组。

get_messages函数返回硬编码的JSON,但是稍后您可以将其连接到真实数据库。 在此之前,请运行Flask服务器和iOS客户端,以查看后端的第一个构建块是否正常工作。 接下来,我们将做。

运行本地服务器

我们确保app.py具有以下内容:

 如果__name__ =='__main__': 
app.run(调试= True)

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

  Python app.py 

这将使用默认端口5000启动本地主机上托管的Flask服务器。

从您的应用中调用函数

实际上, 看到您的后端API返回了一些东西,将使您有动力继续前进,进行后端构建冒险。

运行开始时编写的“ getMessages” Swift函数-只需将其放在主视图控制器或应用程序委托中,然后稍后进行重构即可。 另外,请确保将其添加到info.plist中,以便可以在开发阶段禁用iOS传输安全要求:

   NSAppTransportSecurity  

NSAllowsArbitraryLoads

一旦在控制台上打印出数组{“ test1”,“ test2”},就知道您已经成功调用了自己的后端。 如果没有得到输出,请调整直到完成。

如果您到此为止,那么恭喜您。 通过更多的“填补空白”(学习更多的Python,为数据库查询插入ORM),您现在可以编写后端,而无需Parse或任何类型的BaaS服务。

这样过分简化了吗? 是的,我们刚刚写的内容还不是完整的后端。 正确的API设计,数据库设计,服务器维护和可伸缩性都是您在继续旅途中必须解决的问题。 但是,如果您像这样从头开始,那么您就有了基础,并且可以控制自己的系统。 而且,拥有控制权比依赖于可能随时随地插上您的第三方服务提供商要好得多。

您可以创建功能强大的后端API,而无需第三方服务。 单击此处进行注册,成为第一个知道我即将出版的有关iOS应用程序后端的书的人。