Swift 4では、Codable が導入されました。これは、JSONEncoder や JSONDecoder を通して、JSON を扱いやすくしてくれるものです。 JSONのエンコードやデコードが、RESTful API を扱う際の一番複雑な部分です。Codable を使うことで、 Kitura 2.0 は JSON の処理の責務を受け持ち、型安全な方法で、独自の Codable 型で直接処理できます。KituraKit を用いることで、iOS アプリとサーバーサイドの間で型の定義を共有することができるでしょう。
Kitura で Codable ルーティング
IBMで10年

インドから来ました

日本の本読んでいます

このようなJSON文字列からスタートしたいと思います

JSONの一つの課題は、これを言語の方にコンバートすることです。 そしてまたJSONに戻すということです。
javascript以外では難しいです。
Javascriptはどうするか


JavascriptはJSONに近いわけです。デコードエンコードができるわけです。 これを別の言語のベンチマークにすることもできるわけです。
JSONとSwiftについて話していきましょう


いままではJSONSerializationクラスを使っていました。String文字列のConstantを使っている、そしてそれが、気づかないと問題が起きてしまう、おおきなJSON文字列になってしまう。
IBMでもいろいろやっている

しかしまだまだ改善が必要
Swift4

かなり改善されました。

Encode、DecodeできるEncodableとDecodable


Encoder.encodeがすべてやってくれる。
Decodableも同様に簡単



さまざまなケースで利用できます

これらがすべて型安全でクール


クライアントとサーバーサイドで同じ言語でバグがへり開発しやすくなり、Swiftはメモリフットプリントが少ないのでサーバーにも優しい
明日ワークショップします


Kituraは様々なクラウドで使えます

GitAPIを想定します。

コミットを取得したり、Author指定で取得できたりするとします
ここでシンプルな構造体を使います


prepareJSONステップが必要です。 エンコードステップ

POSTはデコード作業になる



AuthorName毎

誰が何をするのか
リクエストを送りKituraがRouterRequestを作ります クエリパラメータをパースしてビジネスロジックを行い、結果をJSONにして、レスポンスに返す
青がKitura,緑が皆さんがやる作業
エンコード、デコードは皆さんの作業ということです

Swift型がCodableなら


ロジックだけで住むということになります。CodableRouting



それ以外にもCodable クエリパラメータを処理できます。

複数のクエリパラメータがあるかもしれません。すべてstructに入っているようにします。オプショナルならオプショナルで定義すればいいのです。
最近リリースした、DB保存するものです

かなりの作業が必要なところでしたが、こうなります。

Swift Kuery ORM

Modelに準拠していればcommitSaveでできる

クライアント側の問題をみていきましょう
ViewControllerで変換を行います。
RESTAPIからデコードして型に変換する
同じコーダブルの考え方をクライアント側で適用できるのではないか
そこでKituraKit


クライアント側とサーバー側でこのように解決できる。
もしKituraKitを使うならAPIもCodableであるほうが好ましいです。


End to Endでみてみましょう
どういうコンポーネントがどこで動いているか
Kitura側ではKituraHandler HandlerからPrepareResponseにSwifttyぺが行きます
こうするとコードをクライアントとサーバー側で共有する機会が生まれます

Type定義が共有できます。今は課題かもしれませんが必ずできるようになります。
簡単にトライするにはこちらのURLをお試しください

ご清聴ありがとうございました。

Slackでいつでも質問していただけるし、kitura.ioに情報があるし、全て見たければgithub.com/ibm-swiftに来ていただけます
