17
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Grapeとrablを捨て去って原点回帰した話

Last updated at Posted at 2016-09-28
1 / 22

自己紹介

  • @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ドキュメント生成

起こっていた問題点


起こっていた問題点

  1. ドキュメントが片手落ち
  2. レスポンスの型が安定しない
  3. Smart UIなAPI
  4. 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
17
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?