この記事のモジュール: Integration Flow Helper
Postman や OpenAPI から SAP CPI の HTTP レシーバーへ
OpenAPI や Swagger の仕様、Postman のリクエストを SAP CPI の HTTP レシーバーに変換する方法:アドレス、パスとクエリのパラメーター、リクエスト header、式を使った JSON ボディ。

SAP CPI から接続する REST API の多くには、OpenAPI や Swagger のファイル、Postman コレクション、またはその両方が付いています。HTTP レシーバーアダプターに必要なものはすべてそこにあります。サーバー、パス、パラメーター、header、ボディの形です。やるべきことは、各要素を 1 文字も落とさずに正しい欄に移すことです。
この記事では、OpenAPI の操作と Postman のリクエストを HTTP レシーバーに 1 ステップずつ対応させ、最初の呼び出しが失敗する原因になりやすい細かな点を挙げます。
HTTP レシーバーに必要なもの
- Address:操作の完全な URL。Simple 式を含められ、たとえばパスパラメーターに
${property.orderId}を使えます。 - Query:
?を除いたクエリ文字列。例:notify=true。 - Method:GET、POST、PUT、PATCH、DELETE。
- Authentication:なし、Basic、Client Certificate、OAuth2 Client Credentials など。認証情報は tenant に保存し、チャネルには決して書きません。
- Request Headers:API に送るメッセージ header の名前を
|で区切って並べます。 - ボディ:アダプターに届いた時点のメッセージボディです。通常は Content Modifier かマッピングで組み立てます。
OpenAPI や Swagger の操作の読み方
注文の出荷を作成する、次の OpenAPI 3 の操作を例にします。
openapi: 3.0.3
servers:
- url: https://api.example.com/v1
paths:
/orders/{orderId}/shipments:
post:
parameters:
- { name: orderId, in: path, required: true, schema: { type: string } }
- { name: notify, in: query, schema: { type: boolean } }
- { name: X-Request-Id, in: header, schema: { type: string } }
requestBody:
content:
application/json:
schema:
type: object
properties:
carrier: { type: string }
trackingNumber: { type: string }- Address:サーバーの URL とパスをつなげます。Swagger 2.0 では、サーバーは
schemes、host、basePathに分かれています。 {orderId}のようなパスパラメーター:それぞれを式に置き換えます。例:${property.orderId}。- クエリパラメーター(
in: query):Query 欄に入れます。 - header パラメーター(
in: header):Content Modifier でメッセージ header として設定し、その名前を Request Headers に並べます。 - リクエストボディ:
requestBodyのスキーマに従って、Content Modifier で JSON を組み立てます。 - セキュリティスキーム:対応する認証情報を tenant に作成し、Authentication で選択します。
結果:Content Modifier とチャネル
この操作の場合、アダプターの手前の Content Modifier と HTTP レシーバーチャネルは次のようになります。
Content Modifier
Header Content-Type application/json
Header X-Request-Id ${property.requestId}
Body {
"carrier": "${property.carrier}",
"trackingNumber": "${property.trackingNumber}"
}
HTTP receiver
Address https://api.example.com/v1/orders/${property.orderId}/shipments
Query notify=true
Method POST
Request Headers Content-Type|X-Request-IdContent Modifier は header Content-Type を application/json に設定し、header X-Request-Id と JSON ボディを設定します。値はフローの前のほうで設定した exchange property から取ります。Request Headers には API が受け取るべき 2 つの header だけを並べているので、それ以外の header はすべて tenant にとどまります。
Postman のリクエストから
Postman のリクエストにも同じ情報が、別の場所に入っています。
- URL は多くの場合
{{baseUrl}}のような Postman 変数で始まります。SAP CPI では同じ{{…}}構文が外部化パラメーターを表し、デプロイ時に設定します。テスト環境と本番環境で変わるベース URL を置くのにぴったりの場所です。 - パス変数(
:orderId)とクエリパラメーターは、先ほどと同じく Address 欄と Query 欄に入れます。 - Headers タブは、Content Modifier の header と、Request Headers に並べるその名前になります。
- raw の JSON ボディは Content Modifier のボディになり、テスト用の値はそれぞれ式に置き換えます。
- Authorization タブから、どの認証を設定すべきかがわかります。Postman のトークンを iFlow にコピーせず、認証情報は tenant に保存してください。
最初の呼び出しが失敗する細かな原因
- Request Headers に
*を指定すると、内部用のものも含めてすべてのメッセージ header が API に送られます。API が必要とする header だけを並べてください。 Content-Typeheader がない、または誤っている:多くの API はapplication/jsonのない JSON ボディを拒否します。- URL 内の値は URL セーフである必要があります。スペースやスラッシュを含む ID は、アドレスに入れる前にエンコードが必要です。
- エラーレスポンス:Throw Exception on Failure をオフにするとフローは続行し、
${header.CamelHttpResponseCode}にステータスコードが入るので、Router でエラーを処理できます。 - ほとんどの API では JSON ボディの項目名は大文字と小文字を区別します。記憶に頼らず、スキーマからコピーしてください。
REST API ではなく OData サービスを呼び出す場合は、OData レシーバーの記事を参照してください。アドレスとボディで使う式については、SAP CPI の Camel Simple 式を参照してください。
Kitegra でできること
ブラウザー拡張機能 Kitegra が API 仕様の扱いを引き受けます。JSON または YAML の OpenAPI や Swagger のファイル、または Postman コレクションを渡すと、SAP Integration Suite のデザイナーで、その仕様にある URL、パス、クエリパラメーター、リクエスト header、JSON ボディの例を候補表示します。
仕様はブラウザーの中にとどまります。Kitegra が API 仕様を保存することはありません。拡張機能が iFlow の内容を保存、デプロイ、編集することはありません。tenant が変更されるのは、名前の付いた 4 つの操作のいずれかをクリックしたときだけで、これらの操作はオフにすることもできます。
自分の iFlow の HTTPS エンドポイントを同じように呼び出す方法は、サービスキーで HTTPS iFlow をテストするを参照してください。
Kitegra アカウントがなくても、モジュールごとに 5 つの iFlow で使えます。Free プランは 50、Starter は 100、Pro は 300 まで対応します。チームプランではメンバー全員が Pro を使え、Startup Team はモジュールごとに 300 の iFlow、Growth Team と Scale Team は上限なしです。Kitegra のローンチ期間中は、Free プランを含め、サインインしているすべての人がすべてのツールを使えます。プランを比較する。
次の iFlow で試してみましょう
Kitegra が SAP Integration Suite のデザイナーで何をするのかを読むか、Kitegra のほかの Chrome 拡張機能と並べて確認できます。
よくある質問
SAP CPI は OpenAPI ファイルを HTTP レシーバーにインポートできますか?
HTTP レシーバーチャネルは、アドレス、クエリ、メソッド、認証、リクエスト header と、欄ごとに設定します。各欄に何を入れるかは仕様が教えてくれ、ボディは Content Modifier かマッピングで組み立てます。
HTTP レシーバーのアドレスにパスパラメーターを入れるにはどうすればよいですか?
パラメーターを式に置き換えます。例:https://api.example.com/v1/orders/${property.orderId}/shipments。
API にカスタム header を送るにはどうすればよいですか?
Content Modifier でメッセージ header として設定し、HTTP レシーバーの Request Headers にその名前を追加します。複数の名前は | で区切ります。
Request Headers に * を使うべきですか?
API がすべてのメッセージ header を受け取る必要がある場合だけです。必要な header を並べれば、内部用の header を送らずに済みます。
{{baseUrl}} のような Postman 変数は SAP CPI では何になりますか?
外部化パラメーターがよい対応先です。同じ {{…}} 構文を使い、デプロイ時に設定するので、テスト環境と本番環境で別の URL を使えます。
呼び出しの後に HTTP ステータスコードを読むにはどうすればよいですか?
Throw Exception on Failure をオフにして ${header.CamelHttpResponseCode} を読みます。たとえば Router の条件で使います。