概要
Rails app(以下app)で使用しているAPIクライアントを画面上から実行して結果を画面表示するためのRailsエンジンを作成してみました
誰得?というとまぁRailsエンジン作ってみる練習がてらのプロダクトなので自分得です
背景
- 業務で開発しているWebサービスは外部のAPIを結構使っているのでapp内で使用するAPIクライントgemがこのままだと2桁いくかもという状態
- APIクライアント使ってAPI実行するのはcurlより便利なのでAPIの動作確認したいときにたまにRailsコンソール起動して実行したりする
- しかし呼び出すメソッド名や引数などを思い出すために、どこかで使用してるコードを探したりしてるのがめんどくさい
- また、自分たちで開発しているAPIはドキュメント作っていたりするが、意外と使用している外部APIのドキュメントってシュッと見れなかったりする
- そこでいつもRailsコンソールでやってたようなことが画面上からできたら便利かなと思って作ってみました
- 外部APIのドキュメントっぽいものも副産物としてできるのでは?とも思っていたりする
- あと開発環境のみでの利用を想定しています
機能
- 今は概要で書いてるそのままの機能しかない
- 画面に飛んで、必要な引数をフォーム入力して実行すると次の画面で結果が表示される
実行すると以下のような結果が表示される
実行したAPI: Client.new.bar(hello, world)
出力内容: #=> execute instance method bar(hello, world)
が画面表示されているがそのあたりの見せ方とかはまだ…という感じです
Web UI生成のためにやっていること
- RailsやRubyにはこの手の実現に際して便利すぎるメソッドが多数存在しているので特別なにかしているわけではないです
- 各APIクライント画面毎のURLは
/samplar/:クライアントクラス名/:メソッド名
という感じにしている - 文字列をクラス名化するActiveSupportの
constantize
を使用しています - あと引数の数に応じてメソッドに引数を渡せるように
*
を使って*array
のような感じに配列展開を使ってsendでメソッドを呼び出すようにしてます
設定
- 今は
config/samplar.yml
というファイルに以下のような感じでクライアント名とメソッドと引数名などを設定しておく必要があります- ちなみに
self
はクラスメッソッドを定義したい場合
- ちなみに
client: foo: bar: - arg1 - arg2 self: foo: bar: - arg1 - arg2
最後に
- 特に今は何も制限してないので、APIクライントに限らず呼び出し可能なクラスならなんでもymlに書けば画面上から多分実行できます
- 設定ファイルを置く適切な場所などのお作法よくわかってないのでフィードバックなどもらえると助かります🙏