SamplarというRailsエンジンでAPIクライアント達にWeb UIを生成してあげた

概要

Rails app(以下app)で使用しているAPIクライアントを画面上から実行して結果を画面表示するためのRailsエンジンを作成してみました
誰得?というとまぁRailsエンジン作ってみる練習がてらのプロダクトなので自分得です

github.com

背景

  • 業務で開発しているWebサービスは外部のAPIを結構使っているのでapp内で使用するAPIクライントgemがこのままだと2桁いくかもという状態
  • APIクライアント使ってAPI実行するのはcurlより便利なのでAPIの動作確認したいときにたまにRailsコンソール起動して実行したりする
    • しかし呼び出すメソッド名や引数などを思い出すために、どこかで使用してるコードを探したりしてるのがめんどくさい
  • また、自分たちで開発しているAPIはドキュメント作っていたりするが、意外と使用している外部APIのドキュメントってシュッと見れなかったりする
  • そこでいつもRailsコンソールでやってたようなことが画面上からできたら便利かなと思って作ってみました
    • 外部APIのドキュメントっぽいものも副産物としてできるのでは?とも思っていたりする
  • あと開発環境のみでの利用を想定しています

機能

  • 今は概要で書いてるそのままの機能しかない
  • 画面に飛んで、必要な引数をフォーム入力して実行すると次の画面で結果が表示される

https://user-images.githubusercontent.com/17349045/52520027-afacaa80-2ca7-11e9-8a48-b4e9556140de.png

実行すると以下のような結果が表示される
https://user-images.githubusercontent.com/17349045/52520033-bd623000-2ca7-11e9-9483-1a5db99f8b73.png
実行したAPI: Client.new.bar(hello, world)
出力内容: #=> execute instance method bar(hello, world)
が画面表示されているがそのあたりの見せ方とかはまだ…という感じです

Web UI生成のためにやっていること

  • RailsRubyにはこの手の実現に際して便利すぎるメソッドが多数存在しているので特別なにかしているわけではないです
  • APIクライント画面毎のURLは/samplar/:クライアントクラス名/:メソッド名という感じにしている
  • 文字列をクラス名化するActiveSupportconstantizeを使用しています
  • あと引数の数に応じてメソッドに引数を渡せるように*を使って*arrayのような感じに配列展開を使ってsendでメソッドを呼び出すようにしてます

設定

  • 今はconfig/samplar.ymlというファイルに以下のような感じでクライアント名とメソッドと引数名などを設定しておく必要があります
    • ちなみにselfはクラスメッソッドを定義したい場合
client:
  foo:
  bar:
    - arg1
    - arg2
  self:
    foo:
    bar:
      - arg1
      - arg2

最後に

  • 特に今は何も制限してないので、APIクライントに限らず呼び出し可能なクラスならなんでもymlに書けば画面上から多分実行できます
  • 設定ファイルを置く適切な場所などのお作法よくわかってないのでフィードバックなどもらえると助かります🙏