Project Perfect让Swift在服务器端跑起来-引言(一)

Project Perfect让Swift在服务器端跑起来-引言(一),第1张

概述编者语:今天是大年初一,先和大家简单说一句猴年快乐!                你认识Swift或者是在客户端,因为它是苹果用来开发客户端的新一代语言。在Swift开源后苹果让它不仅在MacOS/iOS上跑,也运行到了Linux ,而第三方公司RemObject把Swift带到了Android,也带到了Windows(Windows Form/WPF/Universal Windows App

编者语:今天是大年初一,先和大家简单说一句猴年快乐!

你认识Swift或者是在客户端,因为它是苹果用来开发客户端的新一代语言。在Swift开源后苹果让它不仅在MacOS/iOS上跑,也运行到了linux ,而第三方公司RemObject把Swift带到了Android,也带到了windows(windows Form/WPF/Universal windows App) 。可以说Swift已经是一个完整的跨平台语言了。但有人会说Swift缺少了做服务器端的能力,如网站,接口等,现在Perfect就是一个很不错的项目能完成网站开发/数据接口等服务端的工作。今天开始我会介绍给大家。

Perfect让Swift在服务器端跑起来了,它是开源的。你可以通过官网http://www.perfect.org(这个需要佛跳墙)了解它,也可以从它的Github上下载最新的源码https://github.com/PerfectlySoft/Perfect/。以下是在Perfect网站上一个重要的介绍,这真的是一个很cool 的项目。

Perfect主要提供了三块主要的功能一个是从服务器端到客户端都适用的Perfectlib(包括了一些简单的 *** 作如JsON或者是WebHandler的相关 *** 作),其次是一个FastCGI和http服务的容器去支持Perfect在服务端的运行,还有一个Connector这个主要用来和一些服务器基础服务打交道(如和Apache接入,还有数据库链接等现阶段支持MySQL,MongoDB,Postgersql还有sqlite).

Perfect在服务器端是如何运作的?我们先来看看。

从上面的图可以看出,这和我们的rails思想差不多,如果你熟悉.NET MVC/JavaSpark!/Ruby on Rails是,那再迁移过来是很快的事情。我们来看看如何来创建一个Perfect项目并创建一个简单的WebAPI。

1. 先把Perfect从Github拉下来@L_419_9@clonehttps://github.com/PerfectlySoft/Perfect.git

2. 下载完后,第一件事情不是编码,是把Perfect模版添加到Xcode内。模版放在Extras目录下(如图)

然后只需要把Extras/Xcode Templates/Perfect 拷贝到/Users/用户名/library/Developer/Xcode/Templates/Project Templates/ 下即可。添加完后你打开Xcode就可以看到Perfect模版了。

3. 把上面开发环境配置好现在就可以开始创建Perfect项目了,我们先来创建一个WorkSpace(如果你不太懂看下图),叫PerfectSample

4. 创建成功后,分别先把Perfectlib,PerfectServer,MysqL引入WorkSpace中,由于用到不同的基础服务所以必须引入。Perfectlib你可以理解成Perfect框架,而PerfectServer是启动支持Perfect的类似IIS/Apache的容器,MysqL是需要介入MysqL Connector

5. 利用Perfect模版创建PerfectWeb项目,如图我创建了一个HelloWorld的项目。如图这个和我们创建Cocoa Framework一致的。当然你可以不需要这个模版,直接从Cocoa Framework模版上创建。

项目里面就包含了一个Handler和一个对应的mustache模版。但这个时候还是不能运行的,你必须把Perfectlib/MysqL Connector引用进来,如下图,这里需要注意Perfectlib是引用PerfectlibOSX版本。

完成添加这两个库后还需要配置BuIDing Scheme ,如图,因为你启动需要PerfectServer所以你需要把executable改成PerfectServer.app ,并把Shared项目钩上。

6. 对PerfectHandler.swift进行修改

[plain]view plaincopy

print?

importPerfectlib importMysqL letHOST="你的数据库链接" letUSER="你的帐号" letPASSWORD="你的密码" letSCHEME="你的数据库" publicfuncPerfectServerModuleInit(){ Routing.Handler.registerGlobally() Routing.Routes["GET",["/"]]={(_:WebResponse)inreturnPerfectHandler()} print("\(Routing.Routes.description)") } //CreateahandlerforindexRoute classperfectHandler:RequestHandler{ funchandleRequest(request:WebRequest,response:WebResponse){ response.addheader("Content-Type",value:"application/Json") response.addheader("Content-Type",value:"text/HTML;charset=utf-8") letMysqL=MysqL() letconnect=MysqL.connect(HOST,user:USER,password:PASSWORD) if(connect) { letsres=MysqL.selectDatabase(SCHEME) if(sres) { letsres2=MysqL.query("SELECTname,memoFROMInfo") if(sres2) { letresults=MysqL.storeResults()! if(results.numRows()==0) { do{ letencoder=JsONEncoder() letdata=tryencoder.encode(["result":""]) response.appendBodyString(data) } catch{ response.setStatus(500,message:"Couldnotcreatedata") } } else { vardataArray:Array<AnyObject>=[] vardict=Dictionary<String,String>() whileletrow=results.next(){ dict["name"]=row[0]; dataArray.append(dict) } print(NSJsONSerialization.isValIDJsONObject(dataArray)) do{ letdataFinal=tryNSJsONSerialization.dataWithJsONObject(dataArray,options:NSJsONWritingOptions(rawValue:0)) letstring=Nsstring(data:dataFinal,enCoding:NSUTF8StringEnCoding) lettee:String=stringas!String response.appendBodyString(tee) } catch{ response.setStatus(500,message:"Couldnotcreatedata") } } results.close() } } MysqL.close() } response.requestCompletedCallback() } }

7. 运行,当运行时会启动 PerfectServer.app,然后在浏览器输入0.0.0.0:8080就可以看到JsON结果了。

结果:

好!一个简单的Web API就完成了,当然这是平平无奇,但是用Swift完成了服务器端的开发是感觉不错的事情。Perfect是一个开始,完成度也有待提高,但是我相信很快会有质的飞跃,如即将支持的ORM等。文档不足也是一个很致命的原因,我相信也会很快改善。

介绍一个不错的blog(需要佛跳墙)http://code-me-dirty.blogspot.co.uk/2016/02/creating-perfect-swift-server.html,当然你可以看我的连载。

今天先说到这里,接下来我会让Perfect在linux上飞,下篇见

总结

以上是内存溢出为你收集整理的Project Perfect让Swift在服务器端跑起来-引言(一)全部内容,希望文章能够帮你解决Project Perfect让Swift在服务器端跑起来-引言(一)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存