はじめに
この記事は SAP Advent Calendar 2021 の12月17日分の記事として執筆しています。
皆様、SAP Integration Suite で遊んでおられますでしょうか。
実行したのは良いけども、Web から 実行結果のステータスを確認するのが面倒くさいとお嘆きの貴方のため
今回は日本全国で1億人を超える方々が大好きな bash を使って、SAP Integration Suite を触りたいと思います。
また、以前投稿したSAP Integration Suite でかんたんな WebAPI を作ってみた
の続き記事となります。
必要なもの
今回の bash では、以下2つを使用します。
事前のインストールをお願いします。
- curl
- jq
また 以下の環境で作成しています。
MacBook-Pro:git hiroakiueda$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin19)
Copyright (C) 2007 Free Software Foundation, Inc.
事前準備
まずは対象の SAP Integration Suite を準備してください。
準備の仕方は、コチラをご覧ください。
参照: SAP Integration Suite でかんたんな WebAPI を作ってみた
SAP Integration Suite で WebAPI の作成と実行は出来ましたね?
ここからは、前回記事で実行したWebAPI の実行ステータスを bash から確認しましょう。
使用するAPI の紹介
では、実行ステータスを確認するためのAPI を紹介します。
今回は、Message Processing Logs
を使用したいと思います。
API の 詳細は SAP API Business Hub をご参照ください。
ServiceKey の発行
SAP API Business Hub にて提供されているAPI 呼び出しに必要な認証情報を準備していきます。
以前と同じく、 Process Integration Runtime を作成するのですが、 SAP API Business Hub のAPIを呼ぶためには
インスタンス作成時の 指定Plan の設定が異なることを注意してください。
作成した ServiceKey の情報を確認します。
赤枠で囲った箇所は、後ほど使用します。
Bash の作成
それではAPI の呼び出しに必要な ServiceKey とURL が揃ったので、 Bash のスクリプト作成に入ります。
#!/bin/bash
# config
cpi_token_url='<ここに ServiceKey の tokenurl>?grant_type=client_credentials'
cpi_client_id='<ここに ServiceKey の clientid>'
cpi_client_sec='<ここに ServiceKey の clientseqret>'
# get access token
res_acctoken=$(curl -X POST $cpi_token_url \
-d "client_id=${cpi_client_id}&client_secret=${cpi_client_sec}"
)
if echo $res_acctoken | grep -q 'access_token'; then
cpi_oauth_token=$(echo $res_acctoken | jq -j '.access_token')
else
echo $res_acctoken | jq -r '.error + " error:\n" + .error_description'
exit 1
fi
# call MessageProcessingLogs
logurl='<ここに ServiceKey の url>/api/v1/MessageProcessingLogs?$format=json'
res_log=$(curl --location --request GET $logurl \
--header "Authorization: Bearer $cpi_oauth_token"
)
echo $res_log | jq .
bashの詳細
Access Token 取得
API は OAuth2 の認可制御化で呼び出しが可能です。
認可制御のためには、 Access Token の取得が必要です。
Access Token を使用することで、認可された API の実行が出来るようになります。
# get access token
res_acctoken=$(curl -X POST $cpi_token_url \
-d "client_id=${cpi_client_id}&client_secret=${cpi_client_sec}"
)
ここでは、SAP BTP Cockpit で作成した情報を用いて、Access Token をサーバから取得しています。
Access Token の取り出し
Access Token の取得通信は、Json 形式でAccess Token を受け取るので、jq を使用して切り出します。
if echo $res_acctoken | grep -q 'access_token'; then
cpi_oauth_token=$(echo $res_acctoken | jq -j '.access_token')
else
echo $res_acctoken | jq -r '.error + " error:\n" + .error_description'
exit 1
fi
API の呼び出し
先程取得してきた Access Token を使用して、本命のAPI を呼び出します。
SAP API Business Hub を利用した API 呼び出しでは、Bearer認証で Token を渡します。
# call MessageProcessingLogs
logurl='<ここに ServiceKey の url>/api/v1/MessageProcessingLogs?$format=json'
res_log=$(curl --location --request GET $logurl \
--header "Authorization: Bearer $cpi_oauth_token"
)
APIは、SAP API Business Hub を見ていただけばわかるのですが、OData でのリクエストが可能です。
諸条件を指定する場合は、URLEncode済 の文字列を logurl へ指定する必要があります。
最後に
今回は実行ログを取得する仕組みを紹介いたしました。
今後の拡張として 取得結果を slack などのツールへ投稿する等のな使い方が出来ます。
皆様の次の構想を広げるお手伝いが出来ればと思います。