Eyes, JAPAN Blog > Swift PerfectTemplateをみる

Swift PerfectTemplateをみる

Seiya Kobayashi

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

Perfect とは

公式サイト – perfect.org

Swiftによるサーバサイドフレームワーク

とりあえずテンプレートを見る

PerfectTemplate – PerfectTemplate

動かしてみる

git clone https://github.com/PerfectlySoft/PerfectTemplate.git
cd PerfectTemplate
swift build
.build/debug/PerfectTemplate

※ swift build でコケる場合は以下で直るかも

$ export PATH=/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:"${PATH}"

http://localhost:8080 にアクセスすると `Hello, World!`が表示されます

構成

$ tree -L 2
                                                                                                                                                                                                                       .
├── Dockerfile
├── LICENSE
├── LICENSE.zh_CN
├── Package.swift
├── Packages
│ ├── COpenSSL-2.0.2
│ ├── PerfectHTTP-2.1.4
│ ├── PerfectHTTPServer-2.1.10
│ ├── PerfectLib-2.0.6
│ ├── PerfectNet-2.1.1
│ └── PerfectThread-2.0.4
├── README.md
├── README.zh_CN.md
└─ Sources
  ├── arguments.swift
  └── main.swift

main.swift

Document – HTTPServer

サーバスタート
do {
	// Launch the servers based on the configuration data.
	try HTTPServer.launch(configurationData: confData)
} catch {
	fatalError("\(error)") // fatal error launching one of the servers
}

confData をJSON形式で与えてその情報を元にサーバが立ち上がる。

confData 用のファイルまでのパスで指定してもok

 try HTTPServer.launch(configurationData: "/path/to/confData.json")
confData
let confData = [
	"servers": [
		[
			"name":"localhost",
			"port":port1,
			"routes":[
				["method":"get", "uri":"/", "handler":handler],
				["method":"get", "uri":"/**", "handler":PerfectHTTPServer.HTTPHandler.staticFiles,
				 "documentRoot":"./webroot",
				 "allowResponseFilters":true]
			],
			"filters":[
				[
				"type":"response",
				"priority":"high",
				"name":PerfectHTTPServer.HTTPFilter.contentCompression,
				]
			]
		],
		[
			"name":"localhost",
			"port":port2,
			"routes":[
				["method":"get", "uri":"/**", "handler":PerfectHTTPServer.HTTPHandler.redirect,
				 "base":"http://localhost:\(port1)"]
			]
		]
	]
]

構成

[
  servers: [
    [ 
      "name": "domain",
      "port": "port",
      "adress": "IP Adress",
      "routes": "route information",
      "filters": "filters"
    ]
  ]
]
  •  name – ドメイン
  •  port – ポート
  • adress – IPアドレス
  •  routes – 各ルートに対する処理を書く
  •  fileters – フィルタリング
routes
"routes": [
  "method": "get",
  "uri": "/**",
  "handler": "PerfectHTTPServer.HTTPHandler.staticFiles",
  "documentRoute": "/webroot",
  "base": "http://anotherUrl",
  "allowResponseFilters": "true",
]
  • method
    • メソッド指定
    •  “methods”: [“get”, “post”] で複数指定も可能
  •  uri
    •  ルート指定
  •  handler
    •  呼び出すハンドラーの指定
    •  staticFiles
      •  ローカルファイルを呼び出す。そのためにdocumentRouteを指定しておく。
      •  例の場合、http://localhost:8080/example.jpg にアクセスすると webroot/example.jpg が返される。
      •  PerfectTemplateにはwebroot用意はされてないので、自分で作成しておく。
    •  redirect
      •  base で指定したところへリダイレクトさせる
  •  allowResponseFilters – フィルターを適用するかどうか
filters
"filters": [
  "type": "request or response",
  "priority": "high, medium or low",
  "name": "filter name",
  "path":"./webroot/404.html"
]
  • type – request か response の指定
  •  priority – high, medium or low の指定 (デフォルトはhigh)
    •  priorityが高いフィルターから処理されていく
  •  name
    •  PerfectHTTPServer.HTTPFilter.customReqFilter
    •  PerfectHTTPServer.HTTPFilter.custom404
    •  PerfectHTTPServer.HTTPFilter.contentCompression
  •  path
    •  custom404で飛ばす先を指定

—-

基本的な構成は上のような感じでした。

Perfectはドキュメントもしっかりしていて、GUIアシスタントが用意されていたりします。
気になる人は触ってみてはいかがでしょうか。

Kituraなどもあるので今後サーバサイドSwiftがどうなっていくか楽しみですね^^

Comments are closed.