Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

SendGrid Web API V3をUnirest for Javaでコールする -認証-

SendGrid Web API V3では認証方法が増えて、ベーシック認証やAPIキーを利用することができるみたいです。

API v3 Overview - SendGrid Documentation | SendGrid

f:id:kikutaro777:20150720193244j:plain

先日使ってみたHTTPクライアントライブラリのUnirest for Javaは、元々このAPI叩くために触ってました(^^;
全然利用例を書いていないのにはてブのったりして焦りました…。kikutaro777.hatenablog.com

Basic認証

SendGridで登録したユーザとパスワードをコロンでつなげてBase64で変換します。
例えば、ユーザが「Aladdin」でパスワードが「open sesame」の場合は「Aladdin:open sesame」をBase64で変換します。

今回は次のWebサイト使って変換しました。

www.base64encode.org
f:id:kikutaro777:20150720231241j:plain

ちなみにAladdinとopen sesameはUSのWikipediaのBasic認証の解説ページからでした(^^;
Basic access authentication - Wikipedia, the free encyclopedia

ここまで準備できたら、あとは次のように呼び出すだけ。

HttpResponse<JsonNode> ret = Unirest.get("https://api.sendgrid.com/v3/templates")
                .header("Authorization", "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==")
                .asJson();
System.out.println(ret.getBody());

SendGridではメールのひな形(テンプレート)を作れるのですが、それを取得するものです。
結果はJSONで次のような情報が返ってきます。

{
    "templates": [
        {
            "id": "8832dabe-3515-47ac-a06d-f8852970556a", 
            "name": "kikutaro_template", 
            "versions": [
                {
                    "active": 1, 
                    "id": "37268f35-0ed2-4c55-bf1a-593a677b7f43", 
                    "name": "kikutaro_template Version 1", 
                    "subject": "<%subject%>", 
                    "template_id": "8832dabe-3515-47ac-a06d-f8852970556a", 
                    "updated_at": "2015-07-18 10:23:53"
                }
            ]
        }
    ]
}

今回はテンプレートを全て取得するものでしたが、基本的にREST形式となっていて

  • 全てのテンプレートを取得
  • テンプレートIDを指定して一本引き
  • テンプレートの作成(POST)
  • テンプレートの編集(PATCH)
  • テンプレートの削除(DELETE)

などの操作がAPIからできます。この辺はまた別途使っていきたい。

なお、UnirestではBASIC認証に対応していて、次のように書くこともできます。

HttpResponse<JsonNode> ret = Unirest.get("https://api.sendgrid.com/v3/templates")
                .basicAuth("Aladdin", "open sesame")
                .asJson();
System.out.println(ret.getBody());

APIキーによる認証

APIキーについてはKKEのブログに日本語で詳しく解説されてますので、ここでは解説を飛ばします。

APIキー認証でセキュリティを強化しよう | ブログ | SendGrid

次のように書けます。

HttpResponse<JsonNode> ret = Unirest.get("https://api.sendgrid.com/v3/templates")
                .header("Authorization", "Bearer SG.xxxxxxxxxxxxxxx.yyyyyyyyyyyyyyyyyyyyyyy")
                .asJson();
System.out.println(ret.getBody());

認証ができてしまえば、色々API叩けるので遊べそうです。

HTTPクライアントライブラリ Unirest for Java

JavaのHTTPクライアントはHttpClientやJersey Client等、いつも何を使うか迷います。
google-http-java-clientなんかも良さそうだし。この辺は同じような迷いの中、色々と紹介されています。

d.hatena.ne.jp

vividcode.hatenablog.com

で、英語でググっていたらUnirestというのがありました。

Unirest for Java - Simplified, lightweight HTTP Request Library

色々な言語に対応しているようで、Java以外にRuby,PHP,.NET,Python,Objective-C,Nodeとあるようです。

f:id:kikutaro777:20150719031049j:plain

Windows 8っていう箱が.NETと何が違うのかちょっと謎ですが…(^^;

で、このライブラリはmashape.comというAPIのマーケットプレース的なサービスを提供している企業が開発してる模様。
ライブラリ自体のライセンスはMIT licenseです。

www.mashape.com

jp.techcrunch.com

とりあえず、ライブドアさんのお天気REST APIで次のURLをコールするものを

http://weather.livedoor.com/forecast/webservice/json/v1?city=130010

Unirestで書いてみると

HttpResponse<JsonNode> ret 
    = Unirest.get("http://weather.livedoor.com/forecast/webservice/json/v1")
             .queryString("city", "130010")
             .asJson();

こんな感じ。

サイトにあるFeaturesを読むと、色々なことがシンプルにできそうです。

本当はHttpClientやJersey Client等の他のライブラリとの機能比較表みたいなのがわかると良いのですが…(^^;

今は仕事じゃなく遊びのプログラムなので、お試しでこのUnirest for Javaを使ってみようー。

若干残念なのはググラビリティが少し低く、「Unirest」と他のキーワードで調べると「Unit test」(REST APIのユニットテスト)の間違いではありませんか?と推論されてしまったり(^^;

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村