Winter '18にて、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回でできるので、 (大半のケースで)SalesforceのAPI消費が1.0よりも少なくて済むと思います(多分)。
Javaクライント
APIがSOAPからRESTに変わったことで、「APIのドキュメントは公開するから好きなHTTPクライアントで実装してね」という方針になったのかどうかは分かりませんが、ネットで探してもあまり利用例が見当たりません。
ということで、試してみました(言語はJavaです)。
とは言え、Bulk API 2.0では、一般的なREST APIでJSONやCSVをやり取りするだけなので、呼び出し方さえ間違えなければさくっと動いてくれました*1。
で、色々と試行錯誤した結果、薄いクライアントライブラリ(ラッパー)ができあがったので、公開してみます。
(使用例はリポジトリのREADMEにあります)
- ドキュメントとして公開されているものについては、一通りのAPIとオプション(リクエストパラメータの種類)をカバーしています。
- HTTPクライアントにはOkHttpを使っています。
- JSONエンコーダ・デコーダはJacksonを使いました。OkHttpのWikiでは、Moshiというライブラリが紹介されていましたが…(はじめて知りました)
*1:エラーレスポンスのフォーマットがドキュメントに見当たらなかったり、日本語版のドキュメントでレスポンスパラメータ名が間違っていたりはありましたが…w