Google Tasks API Client Libraryを1.3.0にバージョンアップした場合の変更点
Google Tasks APIにはJavaのクライアントライブラリが用意されています。クライアントライブラリ(google-api-services-tasks)のバージョンを1.2.2から1.3.0に上げたときの変更点をまとめておきます。
基本的には一部のメソッドが非推奨になっただけで、後方互換性は確保されています。1.3で非推奨になったメソッドは1.4で削除されるようです。とはいえ@deprecatedの嵐はちときつかった...。
<dependency> <groupId>com.google.apis</groupId> <artifactId>google-api-services-tasks</artifactId> - <version>v1-1.2.2-beta</version> + <version>v1-1.3.0-beta</version> </dependency>
依存しているライブラリもバージョンが上がります。
公開フィールドへの直接アクセスが非推奨になり、アクセッサメソッドが用意されるようになりました。タスクの操作は tasks() メソッドを使用します。
- Tasks tasks = tasksService.tasks.list(tasklistID).execute(); + Tasks tasks = tasksService.tasks().list(tasklistID).execute();
タスクリストの操作は tasklists() メソッドを使用します。
TaskList taskList = new TaskList(); taskList.setId(asString("id")); taskList.setTitle(asString("title")); - Patch patch = tasksService.tasklists.patch(asString("id"), taskList); + Patch patch = tasksService.tasklists().patch(asString("id"), taskList); TaskList patched = patch.execute();
サービスクラスの生成は Builder クラスを利用するスタイルに変更されました。OAuthトークンを設定するには Builder#setHttpRequestInitializer() でリソースを設定します。
GoogleAccessProtectedResource resource = new GoogleAccessProtectedResource( token.getAccessToken(), /* 中略 */, token.getRefreshToken()); Tasks tasksService; - tasksService = new Tasks( - NetHttpTransportLocator.get(), - resource, - JacksonFactoryLocator.get()); + tasksService = Tasks.builder(NetHttpTransportLocator.get(), JacksonFactoryLocator.get()) + .setHttpRequestInitializer(resource) + .build();
GoogleAccessProtectedResource()コンストラクタで、リフレッシュトークンにnullを指定できるようになりました。以前はnullを指定するとぬるぽが出ていました。これでリフレッシュトークンがもらえないケースでも動くようになった・・・と思います*1。
リクエストパラメータの設定は JsonHttpRequestInitializer インタフェースにまとめられました。userIp パラメータを設定するには TasksRequest#setUserIp() メソッドを使用します。
Tasks tasksService; - tasksService = new Tasks( - NetHttpTransportLocator.get(), - resource, - JacksonFactoryLocator.get()); - tasksService.setUserIp(request.getRemoteAddr()); + JsonHttpRequestInitializer requestInitializer = new JsonHttpRequestInitializer() + { + @Override + public void initialize(JsonHttpRequest jsonHttpRequest) throws IOException + { + TasksRequest tasksRequest = (TasksRequest) jsonHttpRequest; + tasksRequest.setUserIp(request.getRemoteAddr()); + } + }; + tasksService = Tasks.builder(NetHttpTransportLocator.get(), JacksonFactoryLocator.get()) + .setHttpRequestInitializer(resource) + .setJsonHttpRequestInitializer(requestInitializer) + .build();
JsonFactory を設定するメソッドが用意されました。以下は新しいJSONオブジェクトを生成する例です。
GenericJson json = new GenericJson(); - json.jsonFactory = JacksonFactoryLocator.get(); + json.setFactory(JacksonFactoryLocator.get());
JavaVMのデフォルトエンコーディングにより GenericJson#toString() の結果が文字化けするバグが修正されました。これ以外にもデフォルトエンコーディングに依存する部分が修正されています。App Engineで安心して利用できるようになりました。
現時点で認識している変更点は以上です。