開発
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がどうなっていくか楽しみですね^^
2024/09/13
2024/05/17
2024/05/10
2024/01/05
2023/08/18
2023/07/14
2023/05/12