zoukankan      html  css  js  c++  java
  • Project Perfect让Swift在server端跑起来-引言(一)

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

           

           你认识Swift或者是在client,由于它是苹果用来开发client的新一代语言。在Swift开源后苹果让它不仅在MacOS/iOS上跑。也执行到了Linux ,而第三方公司RemObject把Swift带到了Android,也带到了Windows(Windows Form/WPF/Universal Windows App) 。能够说Swift已经是一个完整的跨平台语言了。但有人会说Swift缺少了做server端的能力。如站点。接口等,如今Perfect就是一个非常不错的项目能完毕站点开发/数据接口等服务端的工作。今天開始我会介绍给大家。

           Perfect让Swift在server端跑起来了,它是开源的。

    你能够通过官网http://www.perfect.org (这个须要佛跳墙)了解它。也能够从它的Github上下载最新的源代码 https://github.com/PerfectlySoft/Perfect/

    下面是在Perfect站点上一个重要的介绍, 这真的是一个非常cool 的项目。

           

             Perfect主要提供了三块基本的功能一个是从server端到client都适用的PerfectLib(包含了一些简单的操作如JSON或者是WebHandler的相关操作)。其次是一个FastCGI和HTTP服务的容器去支持Perfect在服务端的执行,另一个Connector这个主要用来和一些server基础服务打交道(如和Apache接入,还有数据库链接等现阶段支持MySQL,MongoDB, PostgerSQL还有SQLite).

            Perfect在server端是怎样运作的?我们先来看看。

             

           从上面的图能够看出,这和我们的rails思想几乎相同,假设你熟悉.NET MVC/Java Spark !/Ruby on Rails是,那再迁移过来是非常快的事情。我们来看看怎样来创建一个Perfect项目并创建一个简单的WebAPI。

          1.  先把Perfect从Github拉下来 git clone https://github.com/PerfectlySoft/Perfect.git

          2.  下载完后,第一件事情不是编码,是把Perfect模版加入到Xcode内。

    模版放在Extras文件夹下(如图)

          

           然后仅仅须要把Extras/Xcode Templates/Perfect 复制到/Users/username/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进行改动

    
    import PerfectLib
    import MySQL
    
    
    let HOST = "你的数据库链接"
    let USER = "你的帐号"
    let PASSWORD = "你的密码"
    let SCHEME = "你的数据库"
    
    public func PerfectServerModuleInit() {
        
        Routing.Handler.registerGlobally()
        Routing.Routes["GET", ["/"]] = { (_:WebResponse) in return PerfectHandler() }
        print("(Routing.Routes.description)")
    }
    
    //Create a handler for index Route
    class PerfectHandler: RequestHandler {
        
        func handleRequest(request: WebRequest, response: WebResponse) {
            
            response.addHeader("Content-Type", value: "application/json")
            response.addHeader("Content-Type", value: "text/html; charset=utf-8")
            
            let mysql = MySQL()
            let connect = mysql.connect(HOST, user: USER, password: PASSWORD)
            if(connect)
            {
                let sres = mysql.selectDatabase(SCHEME)
                if(sres)
                {
                    
                    let sres2 = mysql.query("SELECT name,memo FROM Info")
                    
                    if(sres2)
                    {
                        let results = mysql.storeResults()!
                        
                        
                        
                        if(results.numRows()==0)
                        {
                            do{
                                
                                
                                let encoder = JSONEncoder()
                                let data = try encoder.encode(["result": ""])
                                response.appendBodyString(data)
                            }
                            catch{
                                response.setStatus(500, message: "Could not create data")
                            }
                        }
                        else
                        {
                            var dataArray:Array<AnyObject> = []
                            var dict = Dictionary<String,String>()
                            while let row = results.next() {
                                
                                dict["name"]=row[0];
                                dataArray.append(dict)
                                
                            }
                            
                            print(NSJSONSerialization.isValidJSONObject(dataArray))
                            
                            
                            do {
                                
                                
                                let dataFinal = try NSJSONSerialization.dataWithJSONObject(dataArray, options:NSJSONWritingOptions(rawValue:0))
                                
                                let string = NSString(data: dataFinal, encoding: NSUTF8StringEncoding)
                                
                                let tee : String = string as! String
                                response.appendBodyString(tee)
                            }
                            catch{
                                response.setStatus(500, message: "Could not create data")
                            }
                            
                            
                            
                        }
                        
                        
                        
                        
                        results.close()
                    }
                }
                mysql.close()
            }
            response.requestCompletedCallback()
        }
    }
    
            7. 执行,当执行时会启动 PerfectServer.app,然后在浏览器输入0.0.0.0:8080就能够看到JSON结果了。

            

            结果:

            


           好!一个简单的Web API就完毕了,当然这是平平无奇,可是用Swift完毕了server端的开发是感觉不错的事情。

    Perfect是一个開始,完毕度也有待提高。可是我相信非常快会有质的飞跃,如即将支持的ORM等。文档不足也是一个非常致命的原因。我相信也会非常快改善。

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

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

  • 相关阅读:
    NodeJs实现图片上传
    初步认识Express框架渲染视图
    在javascript中使用replace
    javascript作用域与闭包
    eviews面板数据的操作
    我做的python常用的小技巧
    css3学习笔记
    div垂直居中的问题
    display和visibility的区别
    关于call和apply的那点事儿
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7126063.html
Copyright © 2011-2022 走看看