【ServiceNow】RESTメッセージを使ってAPIにリクエストを送る


前提

OS:macOS Big Sur 11.5.2
ブラウザ:Google Chrome
バージョン:Rome

PDIの作成や日本語化は済ませてある状態での記事です。仕事でRESTメッセージを使うことになったので記事にします。

kwn1125.hatenablog.com


目標

スケジュールジョブを実行し、RESTメッセージで定義した関数を呼び出しAPIにリクエストを送る。今回はGETとPOSTのリクエストで試したいと思います。

RESTメッセージ

docs.servicenow.com

アプリケーションナビゲーターの
システム Web サービス > REST メッセージ
をクリックします。
「新規」をクリックして必要な情報を入力したら「送信」をクリックします。
今回APIhttpbin.org を使います。



RESTメッセージ関数

作成したRESTメッセージのレコードを開くと、関連リストの「REST メッセージ関数」に「Default GET」が自動生成されています。



名前変えてエンドポイントもGET用に変更します。
REST APIならGETとPOSTでエンドポイントは変わらないと思いますが、今回はhttpbinを使うので変更します。



「HTTP要求」タブからヘッダーやパラメーターをセットできます。今回はスクリプトでパラメーターの値をセットしたいので ${variable} の形式で設定します。



新しく関数を作るには、RESTメッセージのレコードを開いて関連リストの「REST メッセージ関数」の「新規」をクリックして作成します。今回はGETに加えてPOSTも試したいので新規作成します。



POSTリクエストのボディは「HTTP要求」タブの「コンテンツ」に入力します。ここもスクリプトでセットしたいので ${variable} の形式で設定します。



スケジュールジョブからRESTメッセージ関数を実行

スケジュールジョブからRESTメッセージ関数で定義した関数を実行し、レスポンスボディをログに出力し、成功を確認できました。

スクリプトを実行するスケジュールジョブは、アプリケーションナビゲーターの
システムスケジューラ > Scheduled Jobs
をクリックし、「新規」→「選択したスクリプトを自動実行」で作れます。

GETリクエス
コード

var r = new sn_ws.RESTMessageV2('テスト', 'GETリクエスト');
r.setStringParameterNoEscape('value1', 'test1');
var response = r.execute();
var responseBody = response.getBody();
gs.info('responseBody : ' + responseBody);

ログ

responseBody : {
"args": {
"param1": "test1"
},
"headers": {
"Host": "httpbin.org",
"User-Agent": "Jakarta Commons-HttpClient/3.1",
"X-Amzn-Trace-Id": "Root=1-61f143d9-659d2fbf42f9db30492dc5a1",
"X-Snc-Integration-Source": "7ac77dbfdb7ba3000ae3ac44d49619e6"
},
"origin": "149.96.6.8",
"url": "https://httpbin.org/get?param1=test1"
}


POSTリクエス
コード

var body = {
    param1: "test1"
};

var r = new sn_ws.RESTMessageV2('テスト', 'POSTリクエスト');
r.setStringParameterNoEscape('body', JSON.stringify(body));
var response = r.execute();
var responseBody = response.getBody();
gs.info('responseBody : ' + responseBody);

ログ

responseBody : {
"args": {},
"data": "{\"param1\":\"test1\"}",
"files": {},
"form": {},
"headers": {
"Content-Length": "18",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "Jakarta Commons-HttpClient/3.1",
"X-Amzn-Trace-Id": "Root=1-61f14723-1f0c7d5042d45f1c76358146",
"X-Snc-Integration-Source": "7ac77dbfdb7ba3000ae3ac44d49619e6"
},
"json": {
"param1": "test1"
},
"origin": "149.96.6.8",
"url": "https://httpbin.org/post"
}