仕事でAPI用のサーバを用意して、そのAPI用のサーバを別のrailsアプリから叩く、という必要が出てRubyで使えるhttpclientを探した。探していたのはJSONをPOSTのパラメータとして渡すことができて、さらにDigest認証に対応しているライブラリ。
上のうち、一番APIが綺麗に見えたのが、Omniauthの内部とかでも使われているFaradayだったんだけど、残念なことにDigest認証のやり方が見つからなかった。
結局、選んだのはhttpclientで、以下のようにJSONをPOSTしつつ、Digest認証をかけることができる。ちなみに、Railsアプリなので、ActiveSupportのto_jsonとか使っている。これも便利。
#require 'httpclient'が必要 request_content = {:hoge => 'hoge', :fuga_id => ['test', 'test2', 'test3']} http_client = HTTPClient.new endpoint_uri = 'http://hogehoge/api/endpoint' content_json = request_content.to_json http_client.set_auth( endpoint_uri, 'digest_auth_user', 'digest_auth_password') http_client.post_content(endpoint_uri, content_json, 'Content-Type' => 'application/json')
公式ドキュメント(rubydoc)
gitのRead MEにはあまりサンプルや使い方が載っていなかったけど、rubydocに結構ちゃんとしたサンプルや使い方が載っていたのでこれを参考にした。