初めて、VaporでSwiftサーバー - Part 1

#Swiftでサーバー作ってみよう

##初期設定
Vaporのdocは[こちら](https://vapor.github.io/documentation/)

###必須
Xcodeインストール（こちらでダウンロード：https://developer.apple.com/download/)

Vaporインストール
私`homebrew`使っているので下記の手順でインストールできる

```
% brew tap vapor/homebrew-tap
% brew update
% brew install vapor
```

##Hello World
**1**. セットアップ済みの状態で下記ターミナルで`vapor new ______`実行

```
% vapor new hello --template=api
Cloning Template [Done]
Updating Package Name [Done]
Initializing git repository [Done]

                                                                 **
                                                               **~~**
                                                             **~~~~~~**
                                                           **~~~~~~~~~~**
                                                         **~~~~~~~~~~~~~~**
                                                       **~~~~~~~~~~~~~~~~~~**
                                                     **~~~~~~~~~~~~~~~~~~~~~~**
                                                    **~~~~~~~~~~~~~~~~~~~~~~~~**
                                                   **~~~~~~~~~~~~~~~~~~~~~~~~~~**
                                                  **~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
                                                  **~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
                                                  **~~~~~~~~~~~~~~~~~~~~~++++~~~**
                                                   **~~~~~~~~~~~~~~~~~~~++++~~~**
                                                    ***~~~~~~~~~~~~~~~++++~~~***
                                                      ****~~~~~~~~~~++++~~****
                                                         *****~~~~~~~~~*****
                                                            *************
                                                   
                                                   _       __    ___   ___   ___
                                                  \ \  /  / /\  | |_) / / \ | |_)
                                                   \_\/  /_/--\ |_|   \_\_/ |_| \
                                                     a web framework for Swift

                                            Project "hello" has been created.
                                     Type `cd hello` to enter the project directory.
                                                               Enjoy!
```

**2**. Xcodeで全部やりたい時は下記のコマンド実行

```
% vapor xcode
Generating Xcode Project [Done]
Select the `Run` scheme to run.
Open Xcode project?
y/n> y
Opening Xcode project...
```

iOS/OSX開発慣れている人がこれ一番楽と思います。
普通のText editor/Terminalでいけるけど。

**3**. 次中身見ましょう。Routes.swift開きます。

```swift
import Vapor

extension Droplet {
    func setupRoutes() throws {
        get("hello") { req in
            var json = JSON()
            try json.set("hello", "world")
            return json
        }

        get("plaintext") { req in
            return "Hello, world!"
        }

        // response to requests to /info domain
        // with a description of the request
        get("info") { req in
            return req.description
        }

        get("description") { req in return req.description }
        
        try resource("posts", PostController.self)
    }
}
```
###Dropletって何？
DropletはVaporの機能アクセスできるサービスコンテーナーです。仕事はルート登録、サバー起動、middleware追加、など。

Routes.swiftでAPIルーティング行うべき場所です。
とりあえずそのままにしよう。

**4**. アプリbuildとrun実行しましょう

```swift
% vapor build
Building Project [Done]
% vapor run
Running hello ...
The current hash key "0000000000000000" is not secure.
Update hash.key in Config/crypto.json before using in production.
Use `openssl rand -base64 <length>` to generate a random string.
The current cipher key "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" is not secure.
Update cipher.key in Config/crypto.json before using in production.
Use `openssl rand -base64 32` to generate a random string.
Database prepared
No command supplied, defaulting to serve...
Starting server on 0.0.0.0:8080
```

現状四つのURL使って見ましょう
0.0.0.0:8080/plaintext
ただのplaintextファイル見れる今は`Hello, world!`
0.0.0.0:8080/hello
こちらがJSONの形で返ってくる
0.0.0.0:8080/info & 0.0.0.0:8080/description
こちらの二つ同じ結果になるんですがRequestの詳細出してくれる

##References
https://docs.vapor.codes/2.0/getting-started/hello-world/
https://docs.vapor.codes/2.0/getting-started/toolbox/
https://vapor.github.io/documentation/
http://www.appcoda.com/server-side-swift-vapor/