開発
2017/1/23
Swift PerfectTemplateをみる
Seiya Kobayashi
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がどうなっていくか楽しみですね^^