超强大的服务器端 Swift

摘要:如今Swift已经开源,而且支持多平台,一些团队正在试图让Swift成为web开发的有效语言。Join Edward将会向我们讲述如何将Swift程序部署到云端。

如今Swift已经开源,而且支持多平台,一些团队正在试图让Swift成为web开发的有效语言。Join Edward将会向我们讲述如何将Swift程序部署到云端。

在苹果推出了Swift之后,我马上就开始使用了这种新的语言。在那段时间里,我还没有成为一名iOS开发人员(我那时只是一个什么东西都想试试的开发人员),在使用了Swift之后,我立刻就被它折服了。

在供职的公司为Stormpath,我们的产品是用户管理和用户存储系统。如果你正在开发一个web应用,或是后端,你可以使用Stormpath来帮你做出很优秀的产品。在此之前,我在PadMapper公司工作,并且创立了StudentRND,这是一个向学生讲述编程知识的非盈利机构。

我想要从一个局外者的角度来讨论服务器端Swift,我将会讨论不同的框架,以及服务器端Swift的定位。我将会快速的讲述一下服务器端Swift生态系统的概览,然后做一个简单的“Hello World”程序,之后进行一次编程demo,来展示一下如何用服务器端Swift来配置Swift环境,之后再将这个程序部署到云端。

为何要将Swift用于Web开发?

我们中的大多数人都实用Swift开发过iOS或是Mac OS X应用程序,或是至少曾经尝试过Swift。去年12月,Swift正式开源,自此以后,许多开发人员都在尝试搭建服务器,打造可以用来开发web应用的Swift。我们为何要将Swift用于web开发中?

1相比其他一些主流的web编程语言(Python、Ruby等),Swift速度更快,也更安全。

2它是一种强类型语言,而且可以用在很多地方,在使用它的时候,你能够确定代码中不会有任何空指针错误。

3和其他安全语言不同(例如Java或C#),Swift的表达性更强。你可以用它快速的开发程序,同时确保你不需要编译程序的协助来帮你1)打造不会一直崩溃的程序,以及2)让你加快应用程序的开发速度。

4开发人员们都热爱Swift。将其带到更多的平台上,一直是一件让人兴奋的事情。

我有一个朋友,他就是经一个顾问公司的介绍开始使用了Swift。这个顾问公司本来是在使用PHP的Laravel来给他们的iOS应用打造后端,而在开发这个应用本身的时候,他们用的是Swift。之后他们想要在前端开发人员和后端开发人员之间建立起更高的灵活性,于是他们开始使用服务器端Swift。他们让一些后端开发人员学习Swift,此举让开发人员的工作变得更加高效,因为前端开发人员和后端开发人员之间能够更好的理解彼此的工作。

我曾经尝试过将服务器端Swift整合到四个框架中,它们分别是Perfect、Vapor、Kitura和Zewo。

Perfect

很多人都曾经听说过Perfect,如果你仔细研究一下这个生态系统的话,你会发现Perfect是由一个来自加拿大的小型团队创建的,这个团队只有2-3个人。去年10月或11月的时候,他们在到处宣传,“当Swift走向开源,你将能够在这个服务器上打造出一些炫酷的东西”。

Perfect如今在GitHub上已经获得了超过7200颗星,是所有web框架中最高的(其他一些主流web框架,例如Rails、Expressjs和JDjango等,它们都只有2000-3000颗星)。由此可见人们对服务器端Swift的兴趣。这个团队的目标使用成为Swift的Rails。它们想要做出一个完整的框架,允许你在上面使用Swift做所有你想做的事情。这个框架有着优秀的功能。然而和Rails一样,Perfect也有着同样的问题:使用者必须按照Perfect自己的方式来工作。虽然它有着很多优秀的功能,但是却限制了人们与软件之间的互动方式。

我们现在来看一段Perfect代码。在你运行程序的时候,Perfect自己有一个http服务器,你可以在这里运行它的fastCGI模块,然后将其连接到Apache或是NGINX上。之后你需要编写一个Perfect服务器可以运行的模块。在这个代码段中,我们将会打造一个“Hello World!”程序。作为使用者,你需要转到localhost,然后它会打出“Hello World!”。Perfect要求你在模块中输入一个全局函数,这个函数被称为PerfectSevertModeleInit。之后你需要初始化它们的路由处理器,并且给Slash Route绑定一个处理器。在你的路由处理器中,它会称为一个类,这个类拥有一个被称为handleRequest的函数。我们给“Hello, World!”设置好文件搜索路径,然后这个请求就完成了。

我一直都在服务器端开发 Node.js应用,而在此之前是开发PHP应用。在语法方面,Perfect与我的习惯有些出入,但是它可以帮我完成工作。

Vapor

Vapor是GitHub上第二受欢迎的库(超过4000颗星),它是受到Laravel的启发而开发的。Laravel是一个PHP Web框架架构器,它有着表达性非常强的语法。

在我刚刚开始尝试服务器端Swift的时候,Vapor提供了非常好的说明文件。Vapor的创作者之一Tanner,是一个我以前就认识的人:Vapor有两个人全职人员,他们不知疲倦的工作终于让他们做出了一个优秀的web框架。

我们来看看Vapor的代码,和刚才一样开发一个“Hello, World!”程序。我们将会导入Vapor模块,然后创建程序对象。我们给用于返回“Hello, World!”命令行的slash绑定处理器。然后运行应用。在Vapor中,以上就是我们所需要做的所有事情。

IBM Kitura(9:28)

Kitura的开发者为IBM。它是GitHub上受欢迎程度排在第三的框架(超过3000颗星)。IBM此前收购了一家名为Strongloop的公司,这家公司也是Express.js的维护方,因此Kitura也是一个受到Express.js启发的框架。Kitura的语法与Vapor类似。我们要导入Kitura,创建路由端详,然后路由向slash绑定一些东西。在这个过程中,我们发送了一个内容为“Hello, World!”的答复,然后运行http服务器。

虽然语法相似,但是Kitura和Vapor还是有很大区别的,不过如果你熟悉Express的话,你会觉得Kitura的工作过程似曾相识。

Zero

和上面三个框架不一样,Zewo在GitHub上的受欢迎程度并没有那么高(只有1000颗星)。虽然你可以找到许多种不同的Swift web框架,例如Swift on Rails、Swift on Sails和Swift Express等,但是和这些框架不同,Zewo是一个超级模块组合:Zewo集合了超过50种不同的开发包,你可以使用它们来打造自己的web应用。如果你想要建造自己的http服务器,或是你想要自己的web应用框架,但是你不想要所有事情都自己做,你可以使用Zewo的库来订制你的web服务器或是你的web应用框架。

Open Swift

Open Swift提出了S4计划,S4代表的是服务器端Swift标准(Server Side Swift Standards)。Open Swift一直在统一中间件、请求、响应和服务器的标准。你可以打造出一个同时支持Vapor和Zewo的中间件。我还曾经见过有人在Slack频道中使用Kitura和Perfect。在接下来的几个月中,这或许将会成为一个标准,所有带有框架的主流的服务器网站都会支持这个标准。

Swift Package Manager

Swift Package Manager只在Swift 3的开发快照上可用,部分原因在与最初的时候Swift 3与Swift 2看上去非常类似(你需要做的只是在Swift 3快照上进行开发)。然而,每隔半个月就会有一次改变,现在所有项目都可以运行在不同版本的Swift 3上。;另外,Foundation框架也没有完整实施。很多框架的实施器都在等待Swift 3发布对Foundation框架的支持。

我想要展示一下如何用Vapor开发应用的过程,然后将其部署到Heroku上。首先我们需要先搭建Swift的开发环境。

安装Swift Version Manager

首先,我们需要设置Swiftenv。如果你对Python或是Ruby不熟悉,在很多其他的编程语言中,开发人员社区里肯定有某种工具可以帮你管理你所使用的不同版本的语言。对于Swift来说也是这样。

首先我们需要安装Swiftenv。

$ git clone github.com/kylef/swift…

Swiftenv的作者为Kyle Fuller,他喂Swift生态系统做出了很多的贡献。我们要做的就是克隆他的repo,将他移动到我们自己的目录中,设置环境变量,将其添加到我们的bash profile中。

安装 Swift 5-31

我们使用Swiftenv来安装Swift的最新安装快照(由于我们将开发Vapor应用,因此我们这里会安装5月31日的开发快照)。

bash $ swiftenv install DEVELOPMENT-SNAPSHOT-2016-05-31-a

初始化项目

创建一个文件夹,设定一个目录(SwiftLangHelloWorld),然后使用Swiftenv来为这个开发快照来配置本地环境。这个命令并不是一定需要的,但是日后你或许将会使用多个不同版本的Swift,因此你需要制定默认的版本。这个命令会生成一个名为Swift-version的文件,这可以让我们确认当前运行的Swift版本可以满足项目的需求。

最后,我们要使用Swift Package Manager来运行这条命令,并且运行swift package init --type executable。这个操作会声场一个基础的结构,供Swift Package Manager使用,我们也将会用它来开发程序。首先,我们要床架一个package.swift文件,这个文件会管理当前项目中的所有依赖。其次,我们还要创建一个main.swift文件,我们将会在这里运行大部分代码。

将Vapor添加到package.swift中

我们现在已经创建了项目,我们要讲Vapor作为项目的依赖,将它添加到package.swift中,然后让Swift Package Manager下载这个依赖,并且将其添加到Xcode文件中。

在Xcode中打开

如果我点击运行swift build swift package generate-xcodeproj,这个操作将会开始克隆Vapor依赖,查看整个Vapor依赖树,确保我们拥有全部的Vapor依赖。它将会下载这些依赖,然后生成Xcode文件。

Swift Package Manager并没有配备中央数据库,我们要做的,只是将其指向git repo,然后它就会检查这个repo,寻找package.swift文件和各种标签,从而确定对哪些文件进行下载。

现在项目已经创建好了,我们打开Xcode项目之后,它会生成一个名为SwiftLangHelloWorld.xcodeproj的项目。这里有一个main.swift文件,它只有一个打印状态。我们要将它复制到之前的代码中。然后运行这个,“服务器开始运行于0.0.0.0:8000”。如果我打开 localhost:8000, 我们就会看到Hello, World!用Vapor实现服务器端Swift就是这么容易。

在web端部署

Heroku是一个平台即服务。你拿着你的代码,用git数据库对其进行初始化,然后用git把它推送到Heroku上。Heroku会自动对你的程序类型进行检测,然后对其进行编写和运行。Heroku无法自动检测Swift,但是你可以设置个性化buildpack,让Heroku可以根据它来对项目进行检测、开发和运行。

在我们的命令行中,我们将会创建一个Git数据库。我们运行heroku来创建命令。在安装Heroku的时候,你可以下载一个实用命令来帮你完成自动化。这会让Heroku成为Git设置的遥控器。然后我们运行下面这个命令: heroku buildpack:set,用来创建Swift中可用于Heroku的buildpack。这个buildpack可以告诉Heroku:“用这个方式来监测应用,然后用这个方式来开发和运行应用。”

下面我们要做的事是创建Procfile。你需要告诉Heroku如何运行你的程序。我们需要用下面这个命令来创建Procfile,web: HelloWorld --port=$PORT. $PORT。下面我们要将其推送到Heroku上。推送过程可能会需要数分钟——Swift不是Heroku所支持的原生语言,它需要下载Swift的二进制,然后进行安装。

服务器端Swift做好大规模使用的准了吗?

还没有,在Linux下,Foundation依然不完整,如果你想要运行自己的网络请求,你将无法使用NSURLRequest或是MSURLSession。你你染需要将目录连接到C语言二进制上,例如libcurl。

管理不同版本的Swift也是一件烦人的事情。Swift语言每隔一段时间就会迎来新的release,但是当Swift 3预览版发布之后,我觉得这个问题会有所改观。

但是尽管如此,Swift依然是一个优秀的开发语言。服务器端Swift可以给你带来许多乐趣。我在开发人员社区中看到了很多令人兴奋的东西。我觉得Swift将会在服务器端迎来突破。

如果你无法在业余时间为服务器端Swift贡献力量,你至少可以先试着了解它。在我个人看来,Vapro、Zewo和Open Swift是了解服务器端Swift最简单的方式,它们在Slack都有自己的频道,你可以加入学习。如果你想要深入的了解服务器端Swift,你可以在GitHub上学习。你可以为服务器端Swift的发展贡献力量,并且用它打造自己的项目。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180112G0CQU700?refer=cp_1026

扫码关注云+社区