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に来ていただけます