外部RESTサービスとの統合
アプリケーションから非ADF RESTエンドポイントへのRESTアウトバウンド・コールを実行できます。 このトピックでは、Oracle PaaSサービスにデプロイされた外部RESTエンドポイント(Oracle Java Cloud Service - SaaS Extensionなど)をコールする様々な方法を示します。
この例では、JCS-SaaS Extensionとアプリケーションが同じOracle Identity Domainにあり、関連付けられていることを前提としています。 これは、ユーザー・アイデンティティが同期しており、SAMLベースのユーザー・アイデンティティ伝播を許可する信頼が有効になっていることを意味します。
この例では、外部のADF以外のトラブル・チケット・アプリケーションを作成し、それをJCS-SaaS Extensionにデプロイしたとします。 ここで、そのリソースをコールします。 このトピックの内容は次のとおりです:
-
IDを渡すことによる特定のアカウントのトラブル・チケットの取得。
-
例外処理。
-
HTTPレスポンス・ヘッダーの要素へのアクセス。
トラブル・チケットの取得
まず、JCS-SaaS Extensionの非ADF RESTエンドポイントから、アカウントのトラブル・チケットを取得します。
エンドポイントを登録します:
-
アプリケーション・コンポーザの共通設定で、「Webサービス」をクリックします。
-
「Webサービス参照の作成」アイコンをクリックします。
-
REST、OKの順に選択します。
-
この参照の変数名を入力します。 たとえば、GetTicketForAccountです。
-
統合するRESTエンドポイントのURLを入力します。 この場合、次のようになります。
https://jcs-cakp.java.us2.oraclecloudapps.com/invokeTicket/troubleTicketApi/account/##AccountId##
-
セキュリティのために、Secure Socket Layer (SSL)認証スキームを介したSecurity Assertion Markup Language (SAML)を使用します。 「SAML over SSLを使用したユーザー・アイデンティティの伝播」を選択します。
-
次に、リソースに対してメソッドを選択および構成します。 リソース操作(GET、POSTなど)および関連するペイロード書式タイプ(JSON/XML)を登録できます。登録された操作のみがGroovy式ビルダーに表示されます。 この例では、GETメソッドを構成します。 (新しいチケットの作成を有効にするには、同じエンドポイント登録の一部としてPOSTメソッドを構成できます。)
フィールド
値
メソッド名
GET
書式
JSON
要求ペイロード
スキーマURL
応答ペイロード
コード・サンプル
コード・サンプル
{ "accountHolder": "abc@xyz.com", "requester": "Test1", "assignee": "Auto Assigned User-1", "share": true, "subject": "New keyboard", "description": "New keyboard request", "status": "New", "type": "Task", "priority": "Urgent", "tags": "New" }
エンドポイントを登録した後、Groovyスクリプトでエンドポイントを参照して、特定のアカウントのトラブル・チケットを取得できます。
Groovyスクリプトは次のようになります:
def conn = adf.webServices.GetTicketForAccount
try{
// Provide Account Id for which user wants to retrieve trouble ticket
def tickets = conn.GET("6637911")
println("Headers:"+conn.responseHTTPHeaders)
println("Status:"+conn.statusCode)
println("Output:"+tickets)
}catch(Exception e){
println("Headers:"+conn.responseHTTPHeaders)
println("Status:"+conn.statusCode)
println("Error:"+e)
}
例外処理
次のコールでは、同じ非ADF RESTエンドポイントからトラブル・チケットを取得しようとします。 ただし、この例では、認証スキームは基本認証になり、間違った資格証明が提供されます。 次の例では、未承認リクエストの場合のRESTエンドポイントの動作を説明します。
今回はエンドポイントを少し違って登録します。 この例では、Basic認証を使用します:
-
アプリケーション・コンポーザの共通設定で、「Webサービス」をクリックします。
-
「Webサービス参照の作成」アイコンをクリックします。
-
REST、OKの順に選択します。
-
この参照の変数名を入力します。 たとえば、TroubleTicketBasicAuthです。
-
統合するRESTエンドポイントのURLを入力します。 この場合、次のようになります。
https://jcs-cakp.java.us2.oraclecloudapps.com/invoke/troubleTicketApi/tickets
-
セキュリティのために、Basic認証を使用します。 「基本認証を使用して起動」を選択します。
-
「資格証明キー」フィールドで、webサービスへのアクセスに使用できる秘密キーの名前を指定します。 このキー名は、ユーザー名とパスワードとともに資格証明ストアに格納されます。
この例の目的のため、正しくない資格証明を入力してください。
-
次に、リソースに対してメソッドを選択および構成します。 リソース操作(GET、POSTなど)および関連するペイロード書式タイプ(JSON/XML)を登録できます。登録された操作のみがGroovy式ビルダーに表示されます。 この例では、GETメソッドを構成します。
フィールド
値
メソッド名
GET
書式
JSON
要求ペイロード
スキーマURL
応答ペイロード
コード・サンプル
コード・サンプル
{ "requester": "Mehul", "share": true, "subject": "Request for new monitor at my desk", "description": "Require bigger screen monitor", "status": "New", "type": "Task", "priority": "High", "tags": "Exchange" }
エンドポイントを登録した後、Groovyスクリプトのエンドポイントを参照して、間違った資格証明を持つ問題のあるチケットを取得できます。
Groovyスクリプトは次のようになります:
def conn = adf.webServices.TroubleTicketBasicAuth
try{
def tickets = conn.GET()
println("Headers:"+conn.responseHTTPHeaders)
println("Status:"+conn.statusCode)
println("Trouble Tickets:"+tickets)
}catch(Exception e){
println("Headers:"+conn.responseHTTPHeaders)
println("Status:"+conn.statusCode)
println("Error:"+e)
}
接続が間違った資格証明を使用して作成されたため、レスポンスには401エラーが表示されます。 呼出しが失敗した場合、例外ヘッダーおよびペイロードを取得してエラーの原因を検査できることが重要です。 これは、groovyがエラー・ペイロードを取得する機能も示しています。
HTTPレスポンス・ヘッダーの要素へのアクセス
最後に、同じ非ADF RESTエンドポイントからトラブル・チケットを取得します。 この最後の例では、認証スキームが基本認証になり、正しい資格証明が提供されます。 次の例では、HTTPレスポンス・ヘッダーを取得する方法を説明します。
前の例で使用したエンドポイントを変更します。
-
アプリケーション・コンポーザの共通設定で、「Webサービス」をクリックします。
-
TroubleTicketBasicAuth接続を編集します。
-
「資格証明キー」フィールドで、このコールの正しい資格証明を指定します。
-
「保存」をクリックします。
エンドポイントを変更した後、Groovyスクリプトでエンドポイントを参照し、正しい資格証明を使用してHTTPレスポンス・ヘッダーで問題のあるチケットを取得できます。
Groovyスクリプトは次のようになります:
def conn = adf.webServices.TroubleTicketBasicAuth
try{
def tickets = conn.GET()
println("Headers:"+conn.responseHTTPHeaders)
println("Status:"+conn.statusCode)
println("Content-Type:"+conn.responseHTTPHeaders['Content-Type'])
println("Trouble Tickets:"+tickets)
}catch(Exception e){
println("Headers:"+conn.responseHTTPHeaders)
println("Status:"+conn.statusCode)
println("Error:"+e)
}