SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

database.comの世界

Javaからdatabase.comへアクセスする、その中身を具体的に見てみよう

005

前回、サンプルのテンプレートを使用して、Javaからdatabase.comへアクセスする方法について紹介しました。今回は、database.comへのアクセス方法について、もうすこしその中身がどうなっているのかを整理していきたいと思います。ここではJavaを前提に説明しますが、基本的には他の言語でも同じことが言えるはずです。

 

database.comへのアクセスの流れ

 まずは、接続の際に最初の処理となる認証部分です。前回も説明しましたが、database.comへアクセスするにはOAuth認証を行います。処理の流れとしては、以下のようになります。

 1.OAuth認証を行う

 2.REST APIへアクセスする(以降は、これの繰り返し)

 また、REST APIにアクセスする際には、OAuth認証時に連携される、

 ・インスタンスURL
 ・アクセストークン

 という情報が必要になります。

 インスタンスURLは、REST APIへアクセスする際に使用するURLです。またアクセストークンも、HTTPヘッダーに設定されて送信されることで、クライアントが認証を受けたことを判断します。

database.comへの接続の流れ
 database.comへの接続の流れ

Javaテンプレートのソースから見た流れ

 上記で記載したdatabase.comへのアクセス処理のフローを、前回使用したJavaテンプレートでは、どのように処理しているかを整理しましょう。まずは、ブラウザから「http://localhost:5000」と入力するところから開始します。

テンプレートアプリケーションのOAuth認証の流れ
 テンプレートアプリケーションのOAuth認証の流れ

 ①web.xmlの定義により、localhost:5000に対するすべてのURLアクセスは、AuthFilterを実行するように定義されています。

フィルタの定義(web.xml)
 フィルタの定義(web.xml)

 ②AuthFilterは、OAuth認証を行っていない場合は、ログインエンドポイントに設定されたURLへリダイレクトします。
 ③ブラウザにdatabase.comのログイン画面が表示されます。
 ④ログイン情報を入力し、ユーザー認証を行います。
 ⑤ユーザー認証がOKの場合は、コールバックURL(http://localhost:5000)へリダイレクトされます。
 ⑥上記の①の時と同じようにAuthFilterが実行されますが、OAuth認証がされている状態なので処理はスルーされ、home.jspが表示されます。

 続いて、テンプレートアプリケーションのREST APIアクセスの流れは以下のようになっています。

テンプレートアプリケーションのREST APIアクセスの流れ
テンプレートアプリケーションのREST APIアクセスの流れ

 ①home.jsp内のボタンが押され、その情報が連携されてきます。AuthFilterはOAuth認証済みのため、処理はここでもスルーされます。

 ②Formのsubmit処理を行うRESTHelperがコールされます。このクラスでは、APIへコールする際のURLの組み立てやデータの設定を行い、要求の送信とレスポンスの受信を行います。

 このクラスでは、APIへはデータを取得するケースではGET形式、データを更新するケースではPOST形式で送信し、そのためのURLを作成します。

   String requestURL = httpClientFactory.getInstanceURL()
     + "/services/data/" + VERSION + "/query?"
     + URLEncodedUtils.format(qparams, "UTF-8");

   String createURL = httpClientFactory.getInstanceURL()
     + "/services/data/" + VERSION + "/subjects/" + resource + "/";

 URLの構成としては、

 ・インスタンスURL
 ・/services/data
 ・使用するAPIのバージョン

 クエリーを記述する場合は、APIバージョンの後ろに、

 ・/query?
 ・SOQL文

 データを更新する場合は、APIバージョンの後ろに、

 ・/subjects/
 ・リソース名

 を記述することになります。

 たとえば、

https://nal.salesforce.com/services/data/v24.0/query?
Select t.Id From teacher__c t

https://nal.salesforce.com/services/data/v24.0/sobjects/teacher__c/

 という感じになります。
 POST形式の場合には、以下のように画面から入力されたJSON形式のデータをセットします。

   httppost.setEntity(new StringEntity(recordDescription,
     "application/json", null));

 また、データ送受信の場合には、HTTPClientFactoryが保持しているセッション情報を使用して、データの送受信を行います。受信したらgetStatusCode()でステータスを確認し、エラーの有無をチェックしています。

HttpGet httpget = new HttpGet(requestURL);
HttpResponse response = httpClientFactory.getHttpClient().execute(
  httpget);

if (response.getStatusLine().getStatusCode() != 200)
 throw new Exception(EntityUtils.toString(response.getEntity()));

 ③RESTHelperからHTTP通信のために、HTTPClientFactoryがコールされます。
 REST APIとの通信は、シンプルなHTTPクライアントからのアクセスになります。

httpClient = new DefaultHttpClient();
httpClient.addRequestInterceptor(new HttpRequestInterceptor() {

 またインスタンスURLの取得や、

SecurityContext sc = ForceSecurityContextHolder.get();
return sc.getEndPoint().substring(0, sc.getEndPoint().indexOf("/services"));

 アクセストークンをヘッダー情報にセットするなどの処理を行います。

  request.setHeader("Authorization",
    "OAuth " + sc.getSessionId());

 どちらの情報もREST APIへアクセスする際には重要な情報で、ForceSecurityContextHolderから提供されます。

 インスタンスURLは、以下のようになります。

SecurityContext sc = ForceSecurityContextHolder.get();
return sc.getEndPoint().substring(0, sc.getEndPoint().indexOf("/services"));

 アクセストークンは、以下のようになります。

final SecurityContext sc = ForceSecurityContextHolder.get();
request.setHeader("Authorization",
     "OAuth " + sc.getSessionId());

 ④HTTPClientFactoryを通して、REST APIへ要求が送信されます。
 ⑤正常にレスポンスが受信されると、RESTHelperを通してdumpresponse.jspへ結果が表示されます。

 以上が、前回利用したテンプレートアプリケーションのREST API処理の中身です。

 ***

Database.comは、無料で本番と変わらない環境での開発が可能です。他のクラウドサービスでは、起動していると課金されてしまうものもありますので、この点を考えると活用しないのは損な気がします。本記事を読んで気になった方がいらっしゃれば、是非アカウントを取得し、みなさんもいろいろ試してみて下さい。

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
database.comの世界連載記事一覧

もっと読む

この記事の著者

海野 幸成(ウミノ ユキナリ)

福島県出身、千葉県在住のO型。ブレインハーツ所属。興味がないことには、ほんとに無頓着。好きな食べ物は味噌汁、なす漬け、そば。最近の悩みは「寝ても夢をみなくなってきたこと」

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/4640 2013/03/15 00:00

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング