自己紹介
- @qsona (Twitter/GitHub)
- Node.js 2年半
- 2016/2 - now FiNC株式会社
- Ruby, Rails 半年
- マイクロサービス
- Microservices Meetup 運営してます
概要
- 最近、Rails上の技術スタックを変更してみている
-
Grape
=>ActionController
-
rabl
=>active_model_serializers
-
(grape-)swagger
=>JSON Hyper-Schema
-
- その背景と理由を話します
背景
- 2014- FiNCアプリ開発開始
- 早いうちから Microservices を選択
- grape, rablでAPI開発
- grape-swagger でAPIドキュメント生成
起こっていた問題点
起こっていた問題点
- ドキュメントが片手落ち
- レスポンスの型が安定しない
- Smart UIなAPI
- rabl辛い
ドキュメントが片手落ち
- Grape: 受け付けるリクエストパラメータを宣言的に記述できる
params do
requires foo, type: String
optional bars, type: Array[String]
end
get '/path/to/api' do
# ...
end
- そこからドキュメントを自動生成できる
(grape-swagger)
ドキュメントが片手落ち
- レスポンスのドキュメントはない
- swaggerの画面から、実際にAPIを叩いて確認はできる
- 結構めんどい、クライアントに不評
- Microservicesにとっては、APIのリクエスト/レスポンス型のドキュメントがフルで存在しないのは致命的
レスポンスの型が安定しない
- 同じようで違うキー名
- ex) 同じユーザ情報でも、APIによりキーが多い/少ない
- ex) ページングで次のページ番号のキーが has_next, has_next_page, next_page, ...
- rablをちゃんと使いこなせてない
- rablに強制力がない
Smart UIなAPI
前項に関連.
- 画面に密接に紐づくAPI
- 画面仕様が変わる度に、APIも変更に
- 万能なAPIがあちこちで使われる
- ex) 「マイページ」向けAPI
- パフォーマンス問題が起こる
参考: http://qiita.com/qsona/items/9c062de2bb83491aec38
rabl辛い
demo
rabl辛い
- ドキュメントが薄いDSLは辛い
- 社内で知見がめっちゃあるとかでもない
- 挙動が不思議ちゃん
- デフォルトの挙動も不思議ちゃん
- rablかわいいよrabl😄
- 使いにくい、イライラする💢
やったこと😀
ドキュメントの問題を解決する
- JSON Hyper-Schemaでリクエスト・レスポンスの型を記述
- interagent/prmd を利用してドキュメント自動生成
- interagent/committeeを 利用して、バリデーションする
ActionController
- JSON Schemaにより
リクエストのValidationできる - Grapeいらなくね? という話になった
- ちょうどGrape重い問題あった
- Controllerに回帰
active_model_serializers
- レスポンスが安定する
- リソース志向, RESTfulへの回帰
- Backendとしてビジネスロジックを守る
- Front-end Serverでオーケストレーションする
お気持ち
opinionated は Railsで十分かなー
新たな問題
- request paramsのType Coercionがない
- Grapeのtypeのやつ結構優秀だった。。。
- 代替策募集中
- 別ライブラリにしてくれ💢
Questions.
1. active_model_serializers vs rabl
- 単なる書き方の違いではない、思想が違う
- 単純に「どちらが良い」ではなく、目指すモノ、フェーズ、チームのレベルによっても変わりそう
2. ドキュメント自動生成?
pros/cons
- Grape + swagger
- JSON Schema + prmd