メドピア開発者ブログスマートフォン用の表示で見るメドピア開発者ブログ集合知により医療を再発明しようと邁進しているヘルステックリーディングカンパニーのエンジニアブログです。Tumblrこんにちは。メドピアエンジニアの保立です。メドピアでは、ドクター向けに運営している「MedPeer」のiOSアプリを3月15日にリリース致しました!!!今回は、iOSアプリ開発の過程で、APIの実装にActiveModelSerializersを使ったので、そこで得た知見を書きます。使った理由json形式のレスポンスを返却する場合、jbuilderを使うケースも多いのではないでしょうか。メドピアでも、今まで外部へのAPIにはjbuilderを使用していました。iOSアプリ用のAPIでは、以下のメリットを考慮して、ActiveModelSerializersを使うことにしました。複雑なjsonを返す際に、ActiveModelSerializersの方が、レスポンスが早いスマートフォン用のAPIでは、なるべく少ないリクエストで画面の描画に必要なすべての情報を返却したいため、何重にも入れ子になるjsonを返却することが多いと思います。そのため、viewをレンダリングするjbuilderでは汎用的なオブジェクトはpartial化することが求められますが、partialを呼び出すのに時間がかかってしまいます。ActiveModelSerializersでは、レスポンスの内容を定義するserializerにhas_manyやhas_oneを使って、関連するオブジェクトを指定することができます。これにより、jbuilderよりも素早くレスポンスを返すことができます。DSLな書き方をしなくてよいjbuilderの書き方は、直感的に分かりづらい記法になるケースがあります。@article.bodyendさらに、partialを読んだり、if文などの分岐が入ると、より分かりづらくなります。ActiveModelSerializersでは、Rubyの記法に則って書けるため、分かりやすいコードになります。以上の点から、メドピアのiOSアプリ用APIとして、ActiveModelSerializersを採用しました。使用例ActiveModelSerializerは以下のように使用します。]}並列関係の複数Modelに紐づくAPIを返却したい場合もあります。以下の例は、アプリ起動時など、Masterデータを取得する時のコードです。書いていて、ものすごくつまずくということがなかったです。ActiveRecordの延長のような作りなので、つまずくことなく書くことができました。GitHubのドキュメントが豊富なので、基本的にわからないことがあってもドキュメントをみれば解決しました。コード量はjbuilderより多くなるので、「すぐに実装したい」「複雑なjsonを返す必要がない」場合はjbuilderでもいいと思います。パフォーマンス比較)posts#showアクションにて、postsを1件とhas_many関係のcommentsを20件をレスポンスに設定するケースで比較します。comments.body実行結果は以下のようになります。:bodyend実行結果は以下のようになります。7.9ms)と、いうことで2倍以上の速度でレスポンスを返すことができました。恩恵は計り知れないものがあります。՞)☝︎是非読者になってくださいメドピアでは一緒に働く仲間を募集しています。...2017-11-08Railsの太ったモデルをダイエットさせる方法についてこんにちは。月別アーカイブリンク医師専用サイト「MedPeer」エンジニア採用はこちら!スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。