Bulk API 2.0のJavaクライアントを作った #salesforce

Winter '18にて、Bulk API 2.0が正式リリースされました。

Bulk API 2.0 (正式リリース)

あんまり話題になっていないような気がするので、簡単にまとめてみます。

Bulk API 2.0とは

新機能については上記ページでも言及されていますが、主観で重要そうだなと思うところをピックアップします。

一番大きな違いはSOAPからRESTになったことですね。そのため、使う側からするとほぼ別物として見た方がよさそうです。

v1.0 v2.0
API SOAP(XML)ベース REST(JSON,CSV)ベース
結果の評価・後処理 結果(Request)はID, Success, Created, Errorの4項目しかないため、RequestとResultを行番号やIDで突き合わせて行なう 結果取得APIレスポンスの中に要求した各項目も含めて返ってくるため、突き合わせが不要
バッチのローテーション CSVが10,000行あるいは10,000,000 文字を超えたら 自分で 面倒を見る 最大 150MB (base64 エンコード後) までは 自動で 分割される
処理されなかったジョブデータ 結果CSVから自分で評価して抜き出す 専用のAPIがある

また、アップロードするデータが20,000 文字以下の場合、ジョブの作成とアップロードをマルチパート要求で1回でできるので、 (大半のケースで)SalesforceAPI消費が1.0よりも少なくて済むと思います(多分)。

Javaクライント

APISOAPからRESTに変わったことで、「APIのドキュメントは公開するから好きなHTTPクライアントで実装してね」という方針になったのかどうかは分かりませんが、ネットで探してもあまり利用例が見当たりません。

ということで、試してみました(言語はJavaです)。

とは言え、Bulk API 2.0では、一般的なREST APIJSONCSVをやり取りするだけなので、呼び出し方さえ間違えなければさくっと動いてくれました*1

で、色々と試行錯誤した結果、薄いクライアントライブラリ(ラッパー)ができあがったので、公開してみます。

github.com

(使用例はリポジトリのREADMEにあります)

  • ドキュメントとして公開されているものについては、一通りのAPIとオプション(リクエストパラメータの種類)をカバーしています。
  • HTTPクライアントにはOkHttpを使っています。
  • JSONエンコーダ・デコーダはJacksonを使いました。OkHttpのWikiでは、Moshiというライブラリが紹介されていましたが…(はじめて知りました)

*1:エラーレスポンスのフォーマットがドキュメントに見当たらなかったり、日本語版のドキュメントでレスポンスパラメータ名が間違っていたりはありましたが…w