Swift 语言 Server 端开发资料收集
苹果的 Swift 语言第二版预计在今年底开源,届时还可在 Linux 下使用 Swift 语言。试想一下此语言用在服务端 Web 开发也该是个很好的方向,需要实现对 HTTP 协议的支持。
Swift 本身就可以做 Shell 脚本用,所以以 CGI 的方式运行是没问题的,没有第三方相关的框架,可以自己完全输出响应头和体。
我们可以把 Swift 集成到像 Apache 或 Nginx 的 Web 服务器中,要做的工作可能多些,应该要用到 C/C++ 来写 Swift 支持模块。想下我们用这种 URL http://localhost/service/customer.swift 来访问 swift 实现的后台页面。
或者也可以让 Swift 代码像 NodeJs 一样运行,自己启动 HTTP Server。幸运的是我们已经有了 Swifter 和 Taylor,再配之以纯 Swift 的模板实现 GRMustache, 简单开发不在话下。
一旦该语言流行开了,特别是能用在 Linux 平台下,总会有人去实现出对 HTTP 协议的支持,再配之以模板,让 Swift 像 PHP 一样在 Apache 中运行就不难了。
下面是收集的几个简单应用例子:
CGI 方式: 可存成 TestCGI, 属性改为可执行,放在 Web 下的 /cgi-bin,让 HTTP Server 允许对该目录下的文件的执行权限,http://localhost/cgi-bin/TestCGI 就能看到页面了。
Swifter 实现: 是不是像 NodeJs 的意味,也定义的路由
Taylor 实现: 也像 NodeJs 一样, 有了 req 和 res 显得更正式了
GRMustache 模板应用
document.mustache 模板文件:
把变量合并到模板中去的实现代码:
参考:
Google 关键字: swift scripting, swift http server
snell https://github.com/jonklein/snell 这个比较接近了, 可以 CGI 或单独运行,swtl 模板和 JSP 一样的用法来嵌入代码
http://perfect.org/ 这个说的漂亮,但没有一个最简单的 Hello World. 永久链接 https://yanbin.blog/swift-server-side-development/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
Swift 本身就可以做 Shell 脚本用,所以以 CGI 的方式运行是没问题的,没有第三方相关的框架,可以自己完全输出响应头和体。
我们可以把 Swift 集成到像 Apache 或 Nginx 的 Web 服务器中,要做的工作可能多些,应该要用到 C/C++ 来写 Swift 支持模块。想下我们用这种 URL http://localhost/service/customer.swift 来访问 swift 实现的后台页面。
或者也可以让 Swift 代码像 NodeJs 一样运行,自己启动 HTTP Server。幸运的是我们已经有了 Swifter 和 Taylor,再配之以纯 Swift 的模板实现 GRMustache, 简单开发不在话下。
一旦该语言流行开了,特别是能用在 Linux 平台下,总会有人去实现出对 HTTP 协议的支持,再配之以模板,让 Swift 像 PHP 一样在 Apache 中运行就不难了。
下面是收集的几个简单应用例子:
CGI 方式: 可存成 TestCGI, 属性改为可执行,放在 Web 下的 /cgi-bin,让 HTTP Server 允许对该目录下的文件的执行权限,http://localhost/cgi-bin/TestCGI 就能看到页面了。
1#!/usr/bin/env xcrun swift
2
3import Foundation
4
5println("Content-Type: text/html")
6println("Content:")
7println("")
8println("1. Process.argument(s):<br />")
9for s in Process.arguments {
10 println(s + "<br />")
11}
12println("<br />")
13
14let env: Dictionary = NSProcessInfo().environment
15
16if let requestMethod: Optional = env["REQUEST_METHOD"] {
17 println("2. Request method is: \(requestMethod!)<br /><br />")
18}
19
20println("3. Number of environment variables: \(env.count)<br /><br />")
21
22println("4. List environment:<br />")
23for key in env.keys {
24 println("\(key) == \(env[key]!)<br />")
25}Swifter 实现: 是不是像 NodeJs 的意味,也定义的路由
1import Swifter
2
3let server = HttpServer()
4server["/"] = { request in
5 return .OK(.HTML("Hello World!"))
6}
7
8var e: NSError?
9if !server.start(3002, error: &e) {
10 print("Server start error: \(e)")
11} else {
12 NSRunLoop.mainRunLoop().run
13}Taylor 实现: 也像 NodeJs 一样, 有了 req 和 res 显得更正式了
1import Taylor
2
3let server = Taylor.Server()
4server.get("/") {
5 req, res, cb in
6 res.bodyString = "Hello World!"
7 cb(.Send(req, res))
8}
9
10do {
11 try server.serveHTTP(port: 3001, forever: true)
12} catch let e {
13 print("Server start failed \(e)")
14}GRMustache 模板应用
document.mustache 模板文件:
1Hello {{name}}
2Your beard trimmer will arrive on {{format(date)}}.
3{{#late}}
4Well, on {{format(realDate)}} because of a Martian attack.
5{{/late}}把变量合并到模板中去的实现代码:
1import Mustache
2
3// Load the `document.mustache` resource of the main bundle
4let template = try Template(named: "document")
5
6// Let template format dates with `{{format(...)}}`
7let dateFormatter = NSDateFormatter()
8dateFormatter.dateStyle = .MediumStyle
9template.registerInBaseContext("format", Box(dateFormatter))
10
11// The rendered data
12let data = [
13 "name": "Arthur",
14 "date": NSDate(),
15 "realDate": NSDate().dateByAddingTimeInterval(60*60*24*3),
16 "late": true
17]
18
19// The rendering: "Hello Arthur..."
20let rendering = try template.render(Box(data))参考:
- Server Side Swift question by Shinichi Goto
- Can you use Swift as a web programming language?
- Swift scripts: How to write small command line scripts in Swift
- Scripting in Swift is Pretty Awesome
Google 关键字: swift scripting, swift http server
snell https://github.com/jonklein/snell 这个比较接近了, 可以 CGI 或单独运行,swtl 模板和 JSP 一样的用法来嵌入代码
http://perfect.org/ 这个说的漂亮,但没有一个最简单的 Hello World. 永久链接 https://yanbin.blog/swift-server-side-development/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。