【ServiceNow】Scripted REST APIを使う

# 目的
「Scripted REST API」機能の使い方を簡単にメモする。

# 手順
1. システムWebサービス > スクリプト利用Webサービス > Scripted REST APIs > 新規　を押下する。

2. [名前]と[API ID]を入力して、保存する。
※[API ID]は、[名前]の入力値に応じて自動で補完される
![WS-000000 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/e2e5c6a8-8408-1505-5ccc-a26429c62006.jpeg)

3. RESTサービスレコードができる。
![WS-000001 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/da74bf31-15af-52f3-02c7-aab1938f5217.jpeg)
中央には3つのセクションがあり、追加設定もできる。
    * セキュリティ：デフォルトACLの設定
    * コンテンツネゴシエーション：APIリクエスト/レスポンスのサポートフォーマットの定義
    * ドキュメント：APIの説明など

4. 関連リスト「リソース」の 新規 を押下する。
5. RESTリソースレコードが開く。
![WS-000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/4f0bba57-9501-1c5e-7285-f157f210bf02.jpeg)
    主な項目は以下。
    | 項目 | 説明 |
    |:-:|:-:|
    | 名前  | RESTリソースの名前  |
    |  HTTPメソッド |  処理内容に応じてGETやPOST等を選択 |
    |  相対パス | 処理内容に応じて相対パスを設定可  |
    | スクリプト  |  処理内容を定義 |

6. 処理内容に応じて各種項目を設定して、保存する。
▼処理例　
電話番号をクエリパラメータに含めてGETリクエストすると、アカウントおよび連絡先テーブルの電話番号に合致するレコードの名前部分が返却されるAPIを作ってみる。
![WS-000011 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/0ccc2b8f-57f4-aa8f-a129-7b29a8e9d9f0.jpeg)
・任意の[名前]を設定
・HTTPメソッドはGET
・相対パスはとりあえず/namesとした
・スクリプトは以下
    ```js:
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
    
        //クエリパラメータ[phone]の取得
        var queryParams = request.queryParams;
        var phoneQueryVal = queryParams.phone;
    
        //初期化
        var bodyArray = [];
        var body = {};
    
        //アカウントテーブルからの取得
        var Acc_GR = new GlideRecord("customer_account");
        Acc_GR.addQuery('phone', phoneQueryVal);
        Acc_GR.query();
        while (Acc_GR.next()) {
            body = {};
            body.table = "customer_account";
            body.name = Acc_GR.getValue("name");
            bodyArray.push(body);
        }
    
        //連絡先テーブルからの取得
        var Con_GR = new GlideRecord("customer_contact");
        Con_GR.addQuery('phone', phoneQueryVal);
        Con_GR.query();
        while (Con_GR.next()) {
            body = {};
            body.table = "customer_contact";
            body.name = Con_GR.getValue("first_name") + Con_GR.getValue("last_name");
            bodyArray.push(body);
        }
    
        //返却
        response.setBody(bodyArray);
    
    })(request, response);
    ```
7. 試してみる
・RESTリソースの詳細画面下部に関連リンクがあるので、そこからREST API Explorerへアクセスできる。
![WS-000006.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/2f9316d2-8051-fb4e-2d20-857b3ce34c51.jpeg)
・遷移後、クエリパラメータを設定する。
![WS-000007 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/c7c597c7-3781-836f-0381-1002260dbcd4.jpeg)
・クエリパラメータ入力後、送信ボタンを押下する。
![WS-000008 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/9a8bdb52-922d-c10e-e865-439a711517b6.jpeg)
・送信の結果、200 OK で取得に成功。
![WS-000009 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/48230a80-b1c5-ce62-d83e-94161eaf9910.jpeg)
・アカウントで1件、連絡先で2件ヒット。
![WS-000012.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/506dd6fe-745e-776d-0b6c-456cdea44dd2.jpeg)
・実際のアカウント、連絡先テーブルの状態と合致している。
![WS-000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/e202c85a-c49e-c100-2aa3-e04ba458b656.jpeg)
![WS-000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251204/131c3073-2d17-0dde-d7cb-3bb66815c39f.jpeg)

# 参考
・RESTAPIRequest - Scoped, Global | ServiceNow Developers
　https://developer.servicenow.com/dev.do#!/reference/api/tokyo/server/sn_ws-namespace/c_RESTAPIRequest?navFilter=RESTAPI

・RESTAPIRequestBody - Scoped, Global | ServiceNow Developers
　https://developer.servicenow.com/dev.do#!/reference/api/tokyo/server/sn_ws-namespace/c_RESTAPIRequestBody?navFilter=RESTAPI

・RESTAPIResponse - Scoped, Global | ServiceNow Developers
　https://developer.servicenow.com/dev.do#!/reference/api/tokyo/server/sn_ws-namespace/c_RESTAPIResponse?navFilter=RESTAPI

・ServiceNow - Scripted REST APIの作成 - Qiita
　https://qiita.com/htshozawa/items/4d32e77bb4fd20358695

・ServiceNowにWebhookでデータ連携 - Qiita
　https://qiita.com/sota-suzuki/items/499fa09d8e88761671ae