コンテンツへスキップ
← ブログに戻る

この記事のモジュール: ツールボックス

サービスキーで SAP CPI の HTTPS iFlow をテストし、その呼び出しをトレースする

Process Integration Runtime のサービスキーの OAuth クライアント資格情報で SAP CPI の HTTPS エンドポイントを呼び出し、作成されたメッセージを見つけて、ステップごとにトレースします。

サービスキーで SAP CPI の HTTPS iFlow をテストし、その呼び出しをトレースする

HTTPS センダーを持つ iFlow は、デプロイは簡単なのに、呼び出すのは意外と面倒です。正しいエンドポイント、正しいサービスキーから取得したトークン、ときには CSRF トークンが必要で、そのうえ呼び出しで作られたメッセージをモニターで探さなければなりません。

この記事では、SAP Cloud Integration(SAP CPI)でのこの一連の流れをすべてたどります。必要なもの、トークンの取得とエンドポイントの呼び出し方、作成されたメッセージの見つけ方、そしてそのトレースの仕方です。

必要なもの

  • HTTPS センダーチャネルを持つデプロイ済みの iFlow。その Address(たとえば /orders/create)がエンドポイントの一部になります。
  • エンドポイントの URL:ランタイムのホストの後に /http とアドレスを続けたものです。モニターの Manage Integration Content で、デプロイ済みの iFlow について確認できます。
  • サービスプラン integration-flow で、メッセージの送信を許可するロールを持つ Process Integration Runtime のサービスインスタンスと、クライアント ID とクライアントシークレットを含むそのインスタンスのサービスキー。
  • iFlow が受け付けるテストペイロード。

トークンを取得してエンドポイントを呼び出す

サービスキーには、呼び出しに必要なものがそろっています。クライアント ID とシークレット、トークンサービスの URL、ランタイムのホストです。

{
  "oauth": {
    "clientid": "<client id>",
    "clientsecret": "<secret>",
    "url": "https://<subaccount>.it-cpi<nn>-rt.cfapps.<region>.hana.ondemand.com",
    "tokenurl": "https://<subaccount>.authentication.<region>.hana.ondemand.com/oauth/token"
  }
}

クライアントシークレットはパスワードと同じように扱ってください。キーを共有ファイル、チケット、チャットに載せないようにします。

エンドポイントを呼び出して応答を読む

呼び出しには 2 つのリクエストが必要です。まず client credentials グラントでトークンを取得し、次にそのトークンで実際の呼び出しを行います。

# 1. Get an access token with the client credentials of the service key
curl -X POST "<tokenurl>" \
     -u "<clientid>:<clientsecret>" \
     -d "grant_type=client_credentials"

# 2. Call the iFlow's HTTPS endpoint with the token
curl -i -X POST "<url>/http/orders/create" \
     -H "Authorization: Bearer <access_token>" \
     -H "Content-Type: application/json" \
     -d @order.json

# The response headers include SAP_MessageProcessingLogID: the Message ID of this call.
  • 401:トークンがない、期限切れ、または別のサブアカウントのものです。
  • 403:サービスキーのロールでメッセージを送信できないか、HTTPS センダーが CSRF トークンを要求しています。テスト用のエンドポイントなら、チャネルで CSRF 保護をオフにするか、先にトークンを取得します。
  • 404:アドレスが間違っているか、iFlow がデプロイされていません。
  • 500:iFlow が失敗しました。どこで失敗したかはメッセージ処理ログでわかります。

ステータスが何であれ、レスポンス header SAP_MessageProcessingLogID がその呼び出しの Message ID を示すので、それを使ってメッセージを開けます。Message ID でメッセージを探すを参照してください。

HTTP Runner でブラウザーから実行する

Kitegra の Toolbox には、iFlow のエンドポイント用の HTTP Runner があります。拡張機能のポップアップの「ツール」ビューから開きます。

  • 「新しいコレクション」と「新しいリクエスト」で、GET、POST、PUT、PATCH、DELETE、HEAD のリクエストをまとめたコレクションを作れます。クエリパラメーター、ヘッダー、JSON・XML・テキストの本文やファイルも使えます。
  • {{variables}} と環境(dev、test、prod):「新しい環境」で追加するか、「環境なし」で送信します。「シークレット」にした変数の値はこのブラウザーに残ります。
  • 認証:「コレクションから」「なし」「Basic」「Bearer トークン」「OAuth2 クライアント資格情報(サービスキー)」。最後のものでは「サービスキー(Process Integration Runtime)」の JSON を貼り付けると、トークンが自動で取得されます。client secret を含むキーが必要で、証明書ベースのキーには対応していません。
  • 「テスト」で応答を確認し(「ステータスが一致」「本文に含む」「JSONPath が一致」「XPath が一致」)、「抽出」で応答の値を変数に保存し、「コレクションを実行」でコレクション全体を順に送信します。
  • 「インポート」→「Postman コレクション」で、Postman や OpenAPI から HTTP レシーバーへで紹介しているように Postman のコレクションを取り込めます。「データセット」タブの「各ペイロードを送信」は、テストペイロード生成のデータセットのペイロードを1件ずつ送ります。

「送信」をクリックするまで何も送られず、SAP の Cookie が送られることもありません。Runner が呼び出すのは *.hana.ondemand.com 配下のホストだけです。呼び出し後、「モニターで開く」で SAP_MessageProcessingLogID からメッセージをログビューアーで開けます。エンドポイントからデザイナーのホストを推測できない場合は、環境で「モニターで開く」用のテナント(デザイナーのホスト)を設定します。

呼び出しをトレースする

  1. デザイナーで iFlow を開き、「Kitegra ツール」ボタンから「メッセージ」を開いて、「Trace: オフ」をオンに切り替えます。
  2. Runner で「送信」をクリックするか、curl でエンドポイントを呼び出します。
  3. メッセージが TRACE マーク付きで「メッセージ」パネルに表示されます。「図に表示」を選びます。
  4. 色の付いたステップをクリックすると、その前のボディ、header、exchange property が表示されます。

トレースのパネルについては、メッセージをステップごとにトレースするで詳しく説明しています。

Kitegra でできること

Kitegra では、サービスキー、認証値、シークレット変数はブラウザーの中にとどまります。サインインすると、Runner のコレクションと環境は、認証値とシークレット変数をすべて取り除いたうえで Kitegra アカウントと同期されます。Runner は無料の Toolbox の一部で、トレースとログビューアーは Message Monitor に属します。

Helper、Message Monitor、iFlow Inspector、iFlow Docs は、それぞれ使用した iFlow の数をカウントします。Kitegra アカウントなしではモジュールごとに 5 つ、Free プランでは 50、Starter では 100、Pro では 300 で、Business は上限なしです。Toolbox とワークスペースの追加機能は無料です。プランを比較する。

次の iFlow で試してみましょう

Kitegra が SAP Integration Suite のデザイナーに何を加えるのかを読むか、Kitegra のほかの Chrome 拡張機能と並べて確認できます。

よくある質問

SAP CPI の HTTPS エンドポイントを OAuth で呼び出すにはどうすればよいですか?

サービスキーのトークン URL から client credentials グラントでトークンを取得し、Authorization: Bearer の header とそのトークンを付けてエンドポイントを呼び出します。

どのサービスキーが必要ですか?

サービスプラン integration-flow で、メッセージの送信を許可するロールを持つ Process Integration Runtime インスタンスのサービスキーです。

HTTPS iFlow から 403 が返るのはなぜですか?

たいていは、キーのロールでメッセージを送信できないか、HTTPS センダーが CSRF トークンを要求しているためです。

呼び出しで作られたメッセージはどうやって見つけますか?

レスポンス header の SAP_MessageProcessingLogID を読みます。それがその呼び出しの Message ID です。

HTTP Runner はサービスキーをどこに保存しますか?

ブラウザーの中です。同期されるコレクションに、認証値やシークレット変数が含まれることはありません。

HTTP Runner は無料ですか?

はい。Toolbox の一部なので、プランの iFlow 数にはカウントされません。

デザイナーを離れずに iFlow を操作

Kitegra を Chrome または Microsoft Edge に追加しましょう。アカウント不要で無料で始められます。