Challenge Engineer Life !

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

SendGridからTシャツ贈ってもらった話

わーい、アメリカから贈られてきた(*´▽`*)

f:id:kikutaro777:20160719193455j:plain

SendGrid Web API v3

クラウドメール配信サービスのSendGridから先月、Web API v3がリリースされました。
以下のドキュメントページにもあるように、RESTfulな形で操作できるので、curlなどからでもメール送信できます。データもJSONベース。

API v3 Overview - SendGrid Documentation | SendGrid

これに伴って、言語ごとに開発されていたライブラリもバージョンアップしています。
が、残念ながらbreaking changeとのこと。

また、以下ページにもあるように、現在、日本語というかマルチバイト文字が化けてしまったりするバグがあり、当面v2対応のライブラリが推奨のようです。
support.sendgrid.kke.co.jp

v3がリリースされた後、ライブラリを利用せずにWeb APIをFiddlerとかで叩いていたのですが、自分が送ってた範囲では日本語は文字化けしていませんでした。

ので、ライブラリ側に問題があるのかな?と興味本位にJavaコードをみていきました。

sendgrid-java/java-http-client

SendGridのJavaライブラリは主に以下2つ

ベースにはApache HttpComponents(HttpCore,HttpClientの4系)が使われています。

Apache HttpComponents - Apache HttpComponents

余談ですが、JavaのHttpClient調べてるとめっちゃかずひらさんのページでてくるw

JavaでのHttpClientサンプル - CLOVER
JavaでのHttpClientサンプル その2 - CLOVER

で、SendGridのコードを色々追ってると、文字コードはUTF-8にしてるのですが、POSTするデータには適用してるけど、レスポンスでは適用していない形になってたりと中途半端な感じでした(^^;
これレスポンスもちゃんとUTF-8にすれば文字化けなくなるんじゃ、、と試したら、文字化けがなくなりました。で、せっかくなのでissueを切って、プルリクしてみました。

SendGridへのコントリビュート

SendGridにプルリクするにはCLA/CCLA*1なるものにサインする必要があります。GitHubみてると、プルリク先に送って「マージするからCLA送ってー」みたいなやりとりも多々あるっぽいですが、先に書いとくのが無難かと。

難しいものではなく、以下Contributingの説明ページにあるリンクからPDFを落として、英語で名前や住所・メールなど書くだけです。

github.com

こういうの手書きがいいの…?とか思って自分は手書きしたのをPDF化して送りましたが、今考えると普通にPDFを編集しても問題ない気が(^^;

まだプルリクはマージされてないのですが、「ありがとう!Tシャツ送るからサイズ教えて」みたいになって、贈ってくれました。大した修正したわけではないのだけど(^^;;;

なお、マルチバイトの問題はライブラリ側だけではなく、サーバサイド側でも若干問題があるようですので、やはり暫くはv2を使うのが無難そうです。

Javaのライブラリ、コードみてると、結構気になるところがあります(^^;;というかぶっちゃけ雑な気がw
コツコツ触るか、いっそ自分でライブラリ作りたいなーと。

*1:CLA = Contributor License Agreement、CCLA = Company Contributor Licensing Agreement

Apache HttpComponents Clientを使ってみた

開発の振り返りみたいなことしてたら、記事として書いてなかったものがあったので追加メモ。

とある連携処理で、とあるWebサービスを呼ぶ部分があり、自分でURL構築したりするのも何だよなぁ、Javaの世界なら何かしらあるだろー、と調べたら案の定たくさんありました(^^;

何を使えばいいのかなぁと探したのですが、最終的には「Apache HttpComponents Client」がイメージにもあっていたので選びました。

最初

を見つけたのですが、トップページに「End of life」ってあって…(^^;わかりやすい

で、今は

に置き換わってます、とのこと。

サンプルは連携で呼び出すWebサービスを利用して確認したのですが、ここでは載せられないので「お天気Webサービス(Livedoor Weather Web Service / LWWS)」でサンプル書いてみました。

pom.xmlの設定

Maven前提ですが…(^^;以下追加します。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.2.5</version>
</dependency>

で、ビルドすればOKです。

呼出しサンプル

データ取得は思ってたより簡単で、以下のように書くだけでデータが取れました。
開発での実装は残念ながら戻り値がJSONではなく(マジかー)、以下のサンプルも中途半端ですが…(^^;あとは良しなに処理すれば、という感じです。

//Livedoor Weather Web Serviceでデータ取得するサンプル

//URI情報構築
URIBuilder builder = new URIBuilder();
builder.setScheme("http")
       .setHost("weather.livedoor.com/")
       .setPath("forecast/webservice/json/v1")
       .setParameter("city", "130010");

try {
    URI uri = builder.build();
    HttpGet httpGet = new HttpGet(uri);
    HttpClient client = new DefaultHttpClient();
    HttpResponse weatherResponse = client.execute(httpGet);
    //あとは良しなに…
} catch (URISyntaxException | ClientProtocolException ex) {
    //例外処理
} catch (IOException ioEx) {
    //例外処理
}

HttpResponseインスタンスの値をみると、以下のようにヘッダー情報がみえました。

f:id:kikutaro777:20130604215338j:plain

一応、FiddlerでブラウザからURL叩いた場合をみると

f:id:kikutaro777:20130604215352j:plain

同じっぽいのでちゃんと取れてるはず(確認が適当でごめんなさい…)

Webサーバーはnginxなんだー、ほーほー。

FiddlerはJSONも普通に確認できるので

f:id:kikutaro777:20130604215405j:plain

なんかこれをみて上記サンプルの実装を続ける意欲がなくなって止めました(-_-:

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