BoxはDropbox的なストレージサービスで、Businessプラン以上は容量無制限だったり
文書の暗号化が標準サポートだったりする、エンプラ向けなサービスになります。
ということで、今回はBoxのAPI(ContentAPI)の使い方を説明していきます!
SalesforceからBox APIを叩くサンプルを作っていきます。
1. アプリケーションの設定
OAuth2.0を利用するので、twitterやfacebook等のようにアプリケーションを設定します。developersのサイトでログインします。
boxアカウント持っている場合は、MyAppsからログインして
持っていない場合はSignUpで無料の開発者用のアカウントを作成する必要があります。
ログイン後、初めてアプリケーションを作成する場合は以下の画面が表示されるので、
そのまま「はじめに」をクリックします。(これ日本語訳が…)
アプリケーション名を設定して、「アプリケーションの作成」をクリックします。
ラジオボタンは「Boxコンテンツ」のままでOK。
完了すると以下の画面になるので、そのまま「アプリケーションの構成」をクリックします。
そうすると、アプリケーションの詳細画面が表示されます。
色々と設定できるのですが、大事なところはOAuth2パラメータの部分になります。
BoxのAPIの認証はOAuth2.0のAuthorization Code Grantになるので
redirect_uriを設定し、client_id、client_secretをメモっておきます。
redirect_uriに関しては必須項目になりますがURI形式であればOKなので
https://localhostとかを入力して「アプリケーションの保存」で設定を保存します。
2. Salesforceの設定
ApexのSDKもあるみたいですが(dhoechst/ApexBox)、今回はNamed Credentialを使って叩いてみます。OAuth danceをイチから実装しなくて良いから楽なんですよねー。
ということで、以下のように認証プロバイダを設定します。
- 承認エンドポイントURL → https://app.box.com/api/oauth2/authorize
- トークンエンドポイントURL → https://app.box.com/api/oauth2/token
- コンシューマ鍵と、コンシューマの秘密 → それぞれ1のアプリ作成時にメモったclient_id, client_secret
発行された「コールバックURL」はBoxのアプリケーションのredirect_uriにセットしておきます。
Named Credentialは以下のように設定。
- URL → https://api.box.com
- 認証プロバイダ → さっき作ったやつ
- ID種別 → 「ユーザ」or「指定ユーザ」
- 認証プロトコル → OAuth2.0
今回は設定が楽な「指定ユーザ」の方で進めてます。
保存時に認証フローを開始にチェックをつけて、「保存」ボタンを押下すると
OAuth2.0のフローが始まるので適切なアカウントで認証/認可します。
3. Apexからコールアウトしてみる
設定が完了したら、以下のApexコードを叩きます。(ルートフォルダ情報の取得)HttpRequest req = new HttpRequest();
req.setEndpoint('callout:Box/2.0/folders/0');
req.setMethod('GET');
Http http = new Http();
HTTPResponse res = http.send(req);
System.debug(res.getBody());
いい感じにJSONが返って来てたら成功です!
{
"type": "folder",
"id": "0",
"sequence_id": null,
"etag": null,
"name": "すべてのファイル",
"created_at": null,
"modified_at": null,
"description": "",
"size": 507455166,
...
}
補足1. BoxのContentAPIの認証方式について
前述のようにOAuth2.0 Authorization Code Grant一択になりますMobileやJavaScriptなどのフロントエンドのアプリ向けにはImplicit Grant必須だと思うんですが
何故か対応しておらず、MobileのSDKはclient_secretを
アプリ側にベタに設定しちゃうような作りになっているんですが大丈夫なんですかね…。
CORSも一応対応しているようなので、なおさらImplicit Grantに対応してても良い気がします。
補足2. 開発者用トークンについて
Boxのアプリケーションの設定画面でOAuth2パラメータのセクションで「開発者トークン」を発行できます。
こちらを利用すると、OAuth2.0のフローを踏まずに
その開発者のユーザコンテキストでaccess_tokenを発行することができます。
ちょうどtwitterにも開発者のアカウントの
永続的なaccess_tokenを発行できる機能がありますがアレと同じです。
APIの動きを確認したいときはかなり便利ですが
有効期限付きなので、期限が切れたら都度再発行する必要があります。
補足3. アプリケーションの削除について
Boxのアプリケーションは削除できないっぽいです。削除ボタンが見つからないし、以下のようなサポートへの問い合わせが…。
https://support.box.com/hc/communities/public/questions/200268938-As-a-developer-Remove-delete-application-