バージョン:Rome
REST データ連携

Scripted REST APIs

記事 (1/28)

Scripted REST API の目標

このモジュールでは、次のことを学習します。

  • スクリプト化された REST API を作成する

    • クエリパラメーターを定義する
    • API ドキュメントを作成する
    • 要求ヘッダーを追加する
    • 応答と要求のタイプを設定する
    • リソースの定義 (GET、POST、PUT、PATCH、DELETE)
  • Scripted REST API リソースを作成する

    • パスパラメーターを含むパスを指定する
    • クエリパラメーターの関連性を追加する
    • 要求オブジェクトと応答オブジェクトを使用したリソーススクリプトを記述する
    • 標準エラーオブジェクトを返す
    • カスタムエラーオブジェクトを作成して返す
  • Scripted REST API バージョニングを有効にする

    • デフォルトバージョンを設定する
    • 新しい API バージョンを作成する
    • REST API Explorer でバージョンをテストする
  • [Web API の使用率] ダッシュボードに API 測定基準を表示する

重要:このモジュールは、REST API Explorer を含む受信 REST データ連携に関する知識があることを前提としています。

記事 (2/28)

この学習モジュールについて

重要:この学習モジュールの内容は、Quebec ServiceNow リリース用に最後に更新されたもので、Rome リリースでは更新されていません。Rome リリースとこの学習モジュールのコンテンツとの間に違いが見られる場合があります。

Global アプリケーションは、Scripted REST API と Scripted REST API リソース作成の基になる概念とプロセスを紹介し、デモンストレーションするために、この学習モジュール全体で使用されます。受講者は Global アプリケーションを構築しません。

演習では、NeedIt アプリケーションを開発します。

演習は、次の 3 つの方法で示されます。

  • ナビゲーションペインの [演習] アイコン。
  • ページ上部の [演習] アイコンと「演習」という単語。
  • ページタイトルの「演習」または「課題」という単語。

ナビゲーションとページタイトルに、強調表示された演習ページのアイコンと演習プリフィックスが表示された、演習ページの上部。

NeedIt アプリケーションを使用すると、ユーザーは複数の部門からのサービスを要求できます。ソースコントロールを使用して、この学習モジュールに必要なすべての NeedIt アプリケーションファイルから始めます。

演習 (3/28)

演習:「Scripted REST APIs」モジュールのためにリポジトリをフォークしてアプリケーションをインポートする

ServiceNow は GitHub を使用して、開発者サイトの学習コンテンツをコピーして使用するアプリケーションリポジトリを提供します。リポジトリには、アプリケーションファイルの固定セットであるタグが含まれているため、部分的に構築されたアプリケーションを使用して作業を開始できます。ServiceNow が提供するリポジトリを個人開発者インスタンス (PDI) にコピーしてインポートすることで、モジュール内の実践的な演習に必要なすべてのファイルを取得できます。

注意:ServiceNow が開発者プログラムの学習コンテンツで GitHub を使用する方法の詳細と、リポジトリをフォークしてアプリケーションをインポートする方法に関するビデオを見るには、『GitHub ガイド』を参照してください。

この演習では、次のことを行います。

  1. ServiceNow リポジトリを GitHub アカウントにフォークします。
  2. リポジトリのフォークから PDI にアプリケーションをインポートします。

重要:リポジトリを既にフォークしてインポートしている場合は、次の演習に進み、タグから分岐を作成して、アプリケーションファイルを PDI にロードできます。モジュールを完了するには、NeedIt アプリケーションファイルが必要です。

リポジトリのフォーク

演習のこのセクションでは、開発者サイトの学習コンテンツで使用するアプリケーションリポジトリのパーソナルフォークを作成します。

  1. Web ブラウザーで、github.com を開きます。

  2. GitHub アカウントをお持ちの場合は、サインインします。お持ちでない場合は、新しいアカウントにサインアップします。

  3. サインインしたら、NeedIt リポジトリを開きます。

  4. [フォーク] ボタン (GitHub の [フォーク] ボタン) をクリックして、GitHub アカウントにリポジトリのコピーを作成します。

  5. 既にリポジトリをフォークしている場合は、ダイアログが表示されます。リポジトリを既にフォークしている場合は、次の演習に進みます。

    リポジトリは以前にフォークされている

  6. GitHub アカウントが複数の組織に属している場合は、GitHub でフォークを作成する場所を指定します。[Fork devtraining-application-release] ダイアログで、<お使いの GitHub ユーザー名> リンクを選択します。リポジトリのプライベートフォークを作成します。GitHub はリポジトリフォークのページを自動的にロードします。

    GitHub ユーザーが複数の組織に属している場合、GitHub はフォーク先を尋ねます。GitHub ユーザー名を選択します。

  7. リポジトリのフォークの URL が次のようになっているかを検証します:<お使いの GitHub ユーザー名>/devtraining-application-release

    フォークしたコピーは自動的にロードされます。

  8. フォークしたリポジトリの URL をコピーします。

    1. [コード] ボタンをクリックします。

    2. URL に ServiceNow ではなく GitHub ユーザー名が含まれていることを確認します。

    3. HTTPS が選択されていることを確認します。選択されていない場合は、[クローン] フライアウトで [HTTPS] タブを選択します。

    4. [クリップボードにコピー] ボタン ([クリップボードにコピー] ボタン) をクリックします。

      フォークしたリポジトリの URL をコピーする

      注意:次のセクションでは、コピーした URL を使用して、フォークしたリポジトリへの接続を設定します。

フォークしたリポジトリからアプリケーションをインポートします。

演習のこのセクションでは、アプリケーションリポジトリを ServiceNow にインポートします。プロセスの一環として、まず GitHub アカウントの資格情報レコードを作成してから、Studio を使用してアプリケーションリポジトリを PDI にインポートします。

  1. 管理者ユーザーとして PDI にログインします。PDI がない場合は、ServiceNow 開発者サイトを開いて Rome PDI を入手してください。

    注意:PDI の入手方法については、『個人開発者インスタンス (PDI) ガイド』を参照してください。

  2. GitHub 接続の資格情報レコードを作成します。

    重要:資格情報レコードを作成する必要があるのは 1 回だけです。別の演習で資格情報レコードを既に作成している場合は、この手順をスキップしてください。

    1. Application Navigator を使用して、[接続および資格情報] > [資格情報] を開きます。

    2. [新規] ボタンをクリックします。

    3. [作成する資格情報のタイプは?] リストで、[基本認証資格情報] リンクをクリックします。

    4. 資格情報レコードを設定します。

        名前 GitHub 資格情報 (GitHub Credentials) - <お使いの github.com ユーザー名>
        ユーザー名 <お使いの github.com ユーザー名>
        パスワード <お使いの github.com 個人アクセストークン>

      基本認証資格情報の新しいレコードフォーム。

      重要:GitHub では、ServiceNow などの他のプラットフォームからリポジトリにアクセスするには、個人アクセストークンが必要です。認証時には、パスワードの代わりに個人用アクセストークンが使用されます。GitHub パーソナルアクセストークンを作成する方法については、『GitHub ガイド』の「GitHub への認証」セクションを参照してください。

    5. [送信] ボタンをクリックします。

  3. Application Navigator を使用して [システムアプリケーション] > [Studio] を開きます。

    Studio アプリケーションを開きます。

  4. 新しいブラウザータブで Studio が開きます。

  5. [アプリケーションを選択] ダイアログで、[ソースコントロールからインポート] ボタンをクリックします。

    [ソースコントロールからインポート] ボタンをクリックします。

  6. [アプリケーションのインポート] ダイアログで、分岐したリポジトリへの接続を設定します。

      URL <リポジトリのフォークドバージョン用にコピーしたURL>
      資格情報 GitHub 資格情報 (GitHub Credentials) - <お使いの github.com ユーザー名>
      分岐 メイン (main)

    注意[分岐] の値を [メイン (main)] に変更すると、「デフォルトの命名規則を使用することを強くお勧めします」という情報メッセージが表示されます。[分岐] フィールドの値はリポジトリに存在する必要があります。開発者サイトのトレーニングリポジトリにはすべて [メイン (main)] 分岐があり、デフォルト値の代わりに使用する必要があります。

    github.com からコピーした URL を使用して、GitHub にフォークしたリポジトリへの接続を構成します。

  7. [インポート] ボタンをクリックします。

  8. アプリケーションのインポートが完了したら、[アプリケーションの選択] ボタンをクリックします。

    有効なリポジトリが存在する必要があります。

    注意:接続に失敗した場合は、フォークしたリポジトリ URL ではなく ServiceNow のリポジトリ URL を [URL] フィールドに入力しているか、あるいは GitHub アカウントで 2 要素認証を有効にしている可能性があります。接続のトラブルシューティング方法については、 「GitHub 問題のトラブルシューティング」を参照してください。

  9. [アプリケーションを選択] ダイアログで、Studio で編集するために、アプリケーションをクリックして開きます。

    重要:タグから分岐を正常に作成しないと、次の演習で Studio にアプリケーションファイルが表示されません。

演習 (4/28)

演習:「Scripted REST APIs」モジュールの分岐を作成する

この演習では、「Scripted REST APIs」モジュール (モジュールで使用するアプリケーションファイルを含む) 用に NeedIt アプリケーションの分岐を作成します。

注意:この演習を開始する前に、「 演習:「Scripted REST APIs」モジュールのためにリポジトリをフォークしてアプリケーションをインポートする」で説明したように、NeedIt リポジトリをフォークしてインポートしておく必要があります。

  1. 前回の演習で NeedIt アプリケーションを Studio で開いていない場合は、ここで開きます。

    1. ServiceNow ブラウザーのメインウィンドウで、Application Navigator を使用して [システムアプリケーション] > [Studio] を開きます。
    2. [アプリケーションを選択] ダイアログで、NeedIt アプリケーションをクリックします。
  2. Studio で、[ソースコントロール] メニューを開き、[分岐を作成] メニューアイテムを選択します。

    [ソースコントロール] メニューおよび [分岐を作成 (Create Branch)] メニューアイテムを開きます。

  3. 分岐を構成します。

      分岐名 ScriptedWebServices
      タグから作成 LoadForScriptedWebServicesModule
  4. [分岐を作成] ボタンをクリックします。

  5. [閉じる] ボタンをクリックします。

  6. タグに含まれているアプリケーションファイルをロードするには、(Studio ではなく) ServiceNow ブラウザーのメインタブに戻り、ブラウザーの再ロードボタンをクリックしてページを更新します。

    注意:分岐の作成に失敗した場合は、フォークしたリポジトリ URL ではなく ServiceNow のリポジトリ URL を [URL] フィールドに入力しているか、あるいは GitHub アカウントで 2 要素認証を有効にしている可能性があります。GitHub 接続問題のトラブルシューティング方法については、『GitHub ガイド』の「GitHub 問題のトラブルシューティング」セクションを参照してください。

記事 (5/28)

スクリプト化 Web サービスとは

Web サービスにより、アプリケーションはネットワーク経由で他のソフトウェアアプリケーションに接続し、プロバイダー (サーバー) とクライアント (コンシューマー) の間で情報を交換することができます。

Web サービスコンシューマー (クライアント) が Web サービスプロバイダー (サーバー) に情報を要求します。Web サービスプロバイダーが要求を処理し、ステータスコードと応答本文を返します。応答本文が返されると、Web サービスコンシューマーは応答本文から情報を抽出し、抽出されたデータに対してアクションを実行します。

ServiceNow は API を提供します。これにより、開発者がサードパーティアプリケーションの ServiceNow や他の ServiceNow インスタンスから情報を簡単に要求できるようになります。多くの場合、ServiceNow API は、開発者がデータ連携のために必要とするメソッドを提供します。その他の場合は、カスタム API が必要です。スクリプト化された REST サービスを使用すると、開発者は Now Platform で独自の API を作成できます。

ServiceNow は Web サービス用の API を提供します。開発者は、スクリプト化された (カスタム) API を作成できます。

記事 (6/28)

Scripted REST APIs の作成

Studio でアプリケーションにファイルを追加する手順は、ファイルタイプに関係なく同じです。

  1. [アプリケーションファイルを作成] リンクをクリックします。
  2. 新しいファイルタイプ (この場合は、Scripted REST API) を選択します。
  3. 新しいファイルを構成します。

ServiceNow ブラウザーのメインウィンドウを使用して Scripted REST API を作成するには、Application Navigator を使用して [システム Web サービス] > [スクリプト化された Web サービス] > [Scripted REST APIs] を開きます。[新規] ボタンをクリックします。

スクリプト化された REST サービスレコードを構成します。

名前と API ID のフィールドに値を入力します

  • 名前:Web サービス名。
  • API ID:API が呼び出されたときに API パスの一部として使用されます。ServiceNow は、[名前] フィールドの値に基づいて、このフィールドのデフォルト値を構築します。開発者はデフォルト値を変更できます。スペースを使用せず、アンダースコア (_) 以外の特殊文字は使用しないでください。

スクリプト化された REST サービスの構成を続行するには、[送信] ボタンをクリックします。

Scripted REST APIs はアクションを実行しません。これらは、リソースを含むコンテナーです。リソースは、サードパーティアプリケーションが呼び出すアクションです。

記事 (7/28)

セキュリティ、コンテンツネゴシエーション、ドキュメント

[セキュリティ][コンテンツネゴシエーション][ドキュメント] の各セクションは、Scripted REST API を初めて保存した後に使用可能になります。

セキュリティ

Scripted REST API は、ユーザーがアクセス制御チェックに合格することを要求する場合があります。要求を行うユーザーは、少なくとも 1 つのアクセス制御を満たしている必要があります。選択したすべてのアクセス制御を満たす必要はありません。デフォルトのアクセス制御である [スクリプト化された REST の外部デフォルト (Scripted REST External Default)] は、すべての新しい Scripted REST APIs に適用されます。開発者は、デフォルトを削除したり、任意のアクセス制御を追加したりすることができます。[ロック解除] ボタンをクリックして、[デフォルト ACL] フィールドの値を変更します。

[デフォルト ACL] フィールドには、スクリプト化された REST の外部デフォルトアクセス制御が含まれています。

Scripted REST APIs のアクセス制御のアクセス制御タイプは REST_Endpoint です。

デフォルトのアクセス制御は、snc_external ロールを持つすべてのユーザーに対して Scripted REST API へのアクセスを拒否します。

デフォルトのアクセス制御は、要求者がロール snc_external を持っていないことを確認します。

コンテンツネゴシエーション

[コンテンツネゴシエーション] セクションでは、サポートされている要求と応答の形式を定義します。要求と応答のデフォルトでは、次のものが許可されます。

  • application/json
  • application/xml
  • text/xml

サポートされている形式のリストを変更するには、[デフォルトでサポートされる要求フォーマットを上書き] オプションまたは [デフォルトでサポートされる応答フォーマットを上書き] オプションをクリックします。

デフォルトでは 3 つの形式がサポートされています。

ドキュメント

[ドキュメント] セクションを使用して、Scripted REST API ドキュメントにユーザーを誘導します。REST API Explorer で API を選択すると、[簡単な説明] フィールドの値がフォームの上部に表示されます。ユーザーは、REST API Explorer のメニューからドキュメントリンクにアクセスします。

API にドキュメントを追加します

開発者向けのヒント:他の開発者が API の目的を理解できるように、API の機能についてわかりやすい説明を [簡単な説明] フィールドに入力します。

記事 (8/28)

要求ヘッダーとクエリパラメーター

要求ヘッダー

REST 要求ヘッダーには、HTTP(S) インタラクションを定義するパラメーター (メタデータ) が含まれています。一般的に使用される REST ヘッダーは次のとおりです。

  • 認証
  • 承認
  • Content-Type

HTTP ヘッダーフィールドのリストを参照してください。

[要求ヘッダー] 関連リストで、[新規] ボタンをクリックし、 API に要求ヘッダーを追加します。

関連リストにある [新規] ボタンをクリックしてヘッダーを追加します

  • ヘッダー名:HTTP ヘッダーフィールドの名前。
  • API 定義:ヘッダーが含まれる API。
  • 簡単な説明:ヘッダーで渡す情報の説明。
  • サンプル値:ヘッダーの使用方法を示すために渡されるデータのサンプル。

要求ヘッダーは、リソースで定義することもできます。

クエリパラメーター

クエリパラメーターは、API を使用する開発者が API 要求 URL で渡すことができる情報を制御します。[クエリパラメーター] 関連リストで、[新規] ボタンをクリックして、パラメーターを作成します。

クエリパラメーターを API に追加します

  • クエリパラメーター名:パラメーターの名前。慣例により、クエリパラメーターは小文字で、スペースの代わりにアンダースコアが使用されます。ベースライン ServiceNow の Scripted REST APIs の多くのクエリパラメーターは、文字列 sysparm_ で始まります。
  • API 定義:クエリが含まれる API。
  • 簡単な説明:クエリで渡す情報の説明。
  • サンプル値:クエリの使用方法を示すために渡されるデータのサンプル。

クエリパラメーターを構成した後、[クエリパラメーター] 関連リストで [必須] の値を設定します。デフォルト値は false です。クエリパラメーターが必須の場合は、この値を true に設定します。

必須のクエリパラメーターの場合は、[必須] の値を true に設定します

クエリパラメーターは、リソースで定義することもできます。

演習 (9/28)

演習:NeedIt アプリの REST サービスを作成する

この演習では、サードパーティアプリケーションが NeedIt アプリケーションのデータとやり取りできるように、スクリプト化された Web サービスを作成します。

Scripted REST API の作成 - NeedIt API

  1. Studio で編集する NeedIt アプリケーションを開きます。
    1. ServiceNow ブラウザーのメインウィンドウで、Application Navigator を使用して [システムアプリケーション] > [Studio] を開きます。
    2. [アプリケーションを選択] ダイアログで、NeedIt アプリケーションをクリックします。
  2. Scripted REST API を作成します。
    1. Studio で [アプリケーションファイルを作成] リンクをクリックします。
    2. [フィルター...] フィールドで、「REST」を入力するか、左ペインのカテゴリから [受信データ連携 (Inbound Integrations)] を選択します。
    3. 中央ペインからファイルタイプとして Scripted REST API を選択し、[作成] ボタンをクリックします。
  3. Scripted REST API の構成:
      名前 NeedIt API
      API ID (この値は、自動的に入力されます)
  4. [送信] ボタンをクリックします。

セキュリティとコンテンツネゴシエーション

  1. [セキュリティ] セクション (タブ) までスクロールします。ServiceNow がデフォルトの ACL をレコードに追加しました。デフォルトのままにしておきます。
  2. [コンテンツネゴシエーション] セクション (タブ) に切り替えて、デフォルト設定を変更します。
      デフォルトでサポートされる要求形式を上書き 選択済み (オン)
      デフォルトでサポートされる要求形式 application/json
  3. [更新] ボタンをクリックします。

ドキュメント

  1. NeedIt API を文書化する UI ページを作成します。

    1. Studio で [アプリケーションファイルを作成] リンクをクリックします。
    2. [フィルター...] フィールドにテキスト UI を入力するか、左ペインのカテゴリから [フォームと UI (Forms & UI)] を選択します。
    3. 中央ペインからファイルタイプとして [UI ページ] を選択し、[作成] ボタンをクリックします。
  2. UI ページを構成します。

      名前 needit_api_documentation
      カテゴリ 一般
      説明 NeedIt アプリ API のドキュメント
  3. 次の HTML をクリップボードにコピーします。

    <h1 style="color: #5e9ca0;"><span style="color: #000080;">NeedIt Scripted API</span></h1> The NeedIt Scripted API provides methods for interacting with data from the NeedIt application including: <ul> <li>GET ni_getinfo: Get aggregate (count) information for records for a specific user from the NeedIt table. レコードは要求タイプ別にグループ化されます。応答には、ユーザーの NeedIt レコードの合計数 (整数)、各要求タイプの NeedIt レコードの数 (オブジェクトのアレイ)、ユーザー情報 (オブジェクト) が含まれます。</li> </ul>
  4. [HTML] フィールドで、コピーした HTML を jelly タグの間に貼り付けます。

    HTML を jelly タグの間に貼り付けます

  5. [送信] ボタンをクリックします。

  6. [エンドポイント] フィールドの値を右クリックし、メニューから URL をコピーするメニューアイテムを選択します。メニューアイテム名はブラウザーによって異なります。

  7. Studio で [NeedIt API] タブに戻ります。レコードを閉じてしまった場合は、アプリケーションエクスプローラーを使用して [受信データ連携 (Inbound Integrations)] > [Scripted REST APIs] > [NeedIt API] を開きます。

  8. [ドキュメント] セクション (タブ) を構成します。

      簡単な説明 NeedIt アプリケーションレコードのデータへのアクセスを提供します。
      ドキュメントリンク <前のステップでコピーしたエンドポイントにペースト>
  9. [更新] ボタンをクリックします。

クエリパラメーター

  1. [クエリパラメーター] 関連リストまでスクロールし、[新規] ボタンをクリックします。
  2. クエリの構成:
      クエリパラメーター名 ni_query
      簡単な説明 特定の NeedIt レコードを検索するためのエンコードクエリ
      サンプル値 active=true
  3. [送信] ボタンをクリックします。

記事 (10/28)

Scripted REST API のリソース

REST API は REST リソースの集合です。REST リソースは、少なくとも 1 つの URI を持つ一意のデータ表現です。リソースは通常、レコード、レコードへの変更、レコードに基づく計算などの関連情報のセットです。HTTP メソッドは、各リソースを定義します。

  • GET
  • POST
  • PUT
  • PATCH
  • DELETE

リソースの作成

Scripted REST API レコードで、 [リソース] 関連リストを開きます。[新規] ボタンをクリックして、リソースを構成します。

名前を追加し、HTTP メソッドを選択して、相対パスを設定します。

  • 名前:リソースの名前。慣例により、リソース名は小文字で、スペースの代わりにアンダースコア (_) が使用されます。
  • HTTP メソッドGETPUTPOSTPATCHDELETE のいずれかを選択します。
  • 相対パス:URI の一意の部分を指定します。相対パスは、Scripted REST API で定義されたベース API パスに追加されます。パスパラメーターを { } で囲みます。ユーザーは、サービスの URL にパスパラメーターの値を渡します。

[リソースパス] フィールドは、新しいレコードが初めて保存された後に表示されます。リソースパスは、相対パスにリンクされたベース API パスです。

[リソースパス] フィールドは、 API のパスを示します

記事 (11/28)

リソースセキュリティ、コンテンツ、ドキュメント

リソースは、Scripted REST API から継承された設定をオーバーライドできます。

セキュリティ

デフォルトでは、リソースには認証が必要です。認証を無効にするには、[認証が必要] オプションの選択を解除 (オフ) します。アクセス制御チェックを無効にするには、[ACL 承認が必要] オプションの選択を解除 (オフ) します。

ベースラインの場合、リソースには認証とアクセス制御が必要です。

開発者向けのヒント:複数のアクセス制御がリストされている場合、要求するユーザーは少なくとも 1 つのアクセス制御を満たす必要があります。すべてを満たす必要はありません。

コンテンツネゴシエーション

リソース要求形式は Scripted REST API から継承され、上書きすることはできません。許可される応答形式を変更するには、[サポートされる応答形式を上書き] オプションを選択し、[サポートされる応答形式] フィールドに形式をリストします。

開発者はリソースに要求形式を設定することはできませんが、応答形式を設定することはできます。

ドキュメント

[簡単な説明] フィールドの値は、リソースを選択すると REST API Explorer に表示されます。このフィールドを使用して、リソースを使用する開発者に役立つ情報を提供します。

[簡単な説明] フィールドを使用してリソースを文書化します

記事 (12/28)

リソース要求ヘッダーとクエリパラメーターの関連付け

要求ヘッダーとクエリパラメーターは、Scripted REST API で定義され、リソース定義内のリソースに関連付けられます。

要求ヘッダーの関連付け

要求ヘッダーを関連付けるには、[要求ヘッダーの関連性] 関連リストまでスクロールします。[新規] ボタンをクリックします。[API 要求ヘッダー] フィールドの [検索] ボタンを使用して、リソースに関連付ける要求ヘッダーを選択します。

リストから要求ヘッダーを選択します。

[スクリプト化された REST ヘッダー] ウィンドウ[新規] ボタンをクリックし、新しい要求ヘッダーを作成します。

クエリパラメーターの関連付け

クエリパラメーターを関連付けるには、[クエリパラメーターの関連性] 関連リストまでスクロールします。[新規] ボタンをクリックします。[API クエリパラメーター] フィールドの [検索] ボタンを使用して、リソースに関連付けるクエリパラメーターを選択します。

リソースに追加するクエリパラメータを選択します

[スクリプト化された REST クエリパラメーター] ウィンドウで [新規] ボタンをクリックし、新しいクエリパラメーターを作成します。

演習 (13/28)

演習:ni_getinfo リソースを作成する

この演習では、NeedIt API のスクリプト化された Web サービスで GET リソースを作成します。このリソースはユーザーとエンコードクエリに渡されます。

GET リソースの作成

  1. 前の演習で開いていない場合は、Studio で NeedIt アプリケーションを編集用に開きます。
    1. ServiceNow ブラウザーのメインウィンドウで、Application Navigator を使用して [システムアプリケーション] > [Studio] を開きます。
    2. [アプリケーションを選択] ダイアログで、NeedIt アプリケーションをクリックします。
  2. 前の演習で開いていない場合は、アプリケーションエクスプローラーを使用して [受信データ連携 (Inbound Integrations)] > [Scripted REST APIs] > [NeedIt API] を開きます。
  3. [リソース] 関連リストに切り替え、[新規] ボタンをクリックします。
  4. リソースの構成:
      名前 no_getinfo
      HTTP メソッド GET
      相対パス /nigetinfo/{user_name}
  5. [送信] ボタンをクリックします。

クエリパラメーターの関連性

  1. [クエリパラメーターの関連性] 関連リストまでスクロールし、[新規] ボタンをクリックします。
  2. API クエリパラメーターの関連性の構成:
      API クエリパラメーター ni_query
  3. [送信] ボタンをクリックします。
  4. Studio で [ni_getinfo スクリプト化された REST リソース (ni_getinfo Scripted REST Resource)] タブに戻ります。
  5. [他のアクション] メニュー ([他のアクション] メニューは、フォームヘッダーにあります。) をクリックして、[フォームの再ロード] メニューアイテムを選択します。
  6. [クエリパラメーターの関連性] 関連リストまでスクロールします。ni_query クエリパラメーターをリソースに関連付ける必要があります。
  7. ni_query パラメーターを必須にします。
    1. [クエリパラメーターの関連性] 関連リストにある ni_query クエリパラメーターの [必須] 列で <値> をダブルクリックします。
    2. [必須] の値を [true] に設定します。
    3. [保存 (Enter)] ボタン (保存ボタンは [必須] フィールドダイアログにあります。) をクリックします。
  8. [更新] ボタンをクリックします。

ドキュメント

  1. [ドキュメント] セクション (タブ) までスクロールします。
  2. [ドキュメント] セクション (タブ) を構成します。
      簡単な説明 ユーザーのアクティブな NeedIt レコードを検索します。[必要なもの] でグループ化します。
  3. [更新] ボタンをクリックします。

記事 (14/28)

リソーススクリプト

リソーススクリプトは、応答オブジェクトのプロパティを作成して設定するサーバーサイド JavaScript です。応答オブジェクトは、リソースを呼び出したアプリケーションに返されます。

リソースの [スクリプト] フィールドには、スクリプトテンプレートが含まれています。自己呼び出し型関数式または即時呼び出し型関数式と呼ばれるテンプレートの process 関数は、リソースにアクセスすると自動的に呼び出されます。process 関数に渡される要求および応答オブジェクトは、自動的に作成されます。

リソーススクリプトのプロセス関数は自己呼び出しです。

開発者は、テンプレートのコメントの後にサーバーサイド JavaScript を追加します。

記事 (15/28)

リソーススクリプト - RESTAPIRequest

RESTAPIRequest API を使用すると、開発者は要求からデータにアクセスできます。request オブジェクトは RESTAPIRequest クラスから自動的にインスタンス化され、Scripted REST API スクリプトの process 関数に渡されます。

要求オブジェクトのプロパティは次のとおりです。

  • body
  • pathParams
  • queryParams
  • queryString
  • URI
  • URL
  • headers
  • getHeader()
  • getSupportedResponseContentTypes()

本文

body オブジェクトは、要求本文へのアクセスを提供します。

//get instance of RESTAPIRequestBody var requestBody = request.body;

pathParams

pathParams オブジェクトを使用すると、要求 URL で渡されたパスパラメーターにスクリプトでアクセスできます。使用可能なパスパラメーターは、スクリプト化された REST サービスのリソースによって決まります。デモサービスからの userinfo リソースの URL は次のとおりです。

https://<instance>/api/<namespace>/demo_service/userinfo/{user_id} 

パスパラメーターは、サービスが呼び出されたときに渡されます。

パスパラメーターは、サービスが呼び出されたときに渡されます。

//get pathParams object var pathparams = request.pathParams; //get user_id property value from pathparams object var userID = pathparams.user_id;

サンプルスクリプトが実行された後の pathparams.user_id プロパティの値は、URL で渡された値と同じです。

URL の user_id の値は、request.pathParams.user_id プロパティの pathparams.user_id プロパティと同じです。

queryParams

queryParams オブジェクトを使用すると、Web サービス要求からクエリパラメーターにスクリプトでアクセスできます。デモサービスのクエリパラメーターは demo_query です。デモサービスの URL は次のとおりです。

https://<instance_rest_endpoint>/?demo_query=active%3Dtrue 

demo_query パラメーター値は、サービスが呼び出されたときに渡されます。

デモクエリ値は実行時に渡されます。

//get queryParams object var queryparams = request.queryParams; //value of myQueryParam is active=true var myQueryParam = queryparams.demo_query;

サンプルスクリプトが実行された後の myQueryParam 変数の値は active=true です。

myQueryParam の値は active=true です

queryString

queryString 文字列は、エンドポイント URI に追加されるクエリ全体を含みます。デモサービスの URL は次のとおりです。

https://<instance>/api/<namespace>/demo_service/userinfo/5137153cc611227c000bbd1bd8cd2005d?demo_query=active%3Dtrue 

クエリ文字列は URL の一部です。

クエリ文字列全体は ?demo_query=active%3Dtrue です

//get the query string //value of query is demo_query=active%3Dtrue var query = request.queryString;

サンプルスクリプトが実行された後の query 変数の値は demo_query=active%3Dtrue です。

demo_query=active%3Dtrue

URI

uri 文字列は、ドメイン情報を除いた要求 URI を含みます。デモサービスからの userinfo リソースの URL は次のとおりです。

https://<instance>/api/<namespace>/demo_service/userinfo/{user_id} 

URI にはクエリパラメーターが含まれていません。

URI にはクエリパラメーターが含まれていません

//get the uri string //value of query is /api/<namespace>/demo_service/userinfo/5137153cc611227c000bbd1bd8cd2005d var query = request.uri;

サンプルスクリプトが実行された後の query 変数の値は /api/187049/demo_service/userinfo/5137153cc611227c000bbd1bd8cd2005d です。

query の値は /api/187049/demo_service/userinfo/5137153cc611227c000bbd1bd8cd2005d です

URL

url 文字列には要求 URL 全体が含まれています。

//get the url string //returns https://instance/api/<namespace>/demo_service/userinfo/5137153cc611227c000bbd1bd8cd2005d var query = request.url;

スクリプトの実行後の query 変数の値は URL 全体です。

query 変数には要求の URL 全体が含まれています。

headers

headers オブジェクトには、要求のすべての headers プロパティ値のペアが含まれています。

デモサービスには From ヘッダーがあります。

REST API Explorer の要求ヘッダーに追加されたデモサービスの From ヘッダー。

//get the headers from the request var headers = request.headers; //get the value of the Accept property var acceptHeader = headers.accept;

request.headers オブジェクトのプロパティは、API ごとに異なる場合があります。デモサービス API の request.headers プロパティには、accept、from、content-type が含まれます。API で大文字を使用して定義されている場合でも、すべての request.headers プロパティ名は小文字であることに注意してください。request.headers プロパティをログに記録するために使用されるスクリプトは、データタイプもログに記録しました。すべてのプロパティが文字列であることに注意してください。

request.headers プロパティは API によって異なります。

getHeader()

getHeader メソッドは、Web サービス要求から特定のヘッダーの値を含む文字列を返します。

From ヘッダーは API で定義されます。

//get the headers from the request var headers = request.headers; //get the value of the from header var fromHeader = headers.getHeader('from');

スクリプトの実行後、変数 fromHeader の値は Abel Tuter になります。

From ヘッダープロパティの値は Abel Tuter です。

開発者向けのヒント:API で大文字を使用して定義されている場合でも、ヘッダープロパティの名前は小文字になります。

getSupportedResponseContentTypes()

getSupportedResponseContentTypes() メソッドは、各文字列が application/json などのコンテンツタイプである文字列値のアレイを返します。

var contentTypes = []; contentTypes = request.getSupportedResponseContentTypes(); for(i=0;i<contentTypes.length;i++){ gs.info("content type [" + i + "] = " + contentTypes[i]); }

contentTypes アレイには、デモサービス用の要素が 1 つあります。

The contentTypes[0] の値は application/json です。

記事 (16/28)

リソーススクリプト - RESTAPIRequestBody

RESTAPIRequestBody API を使用すると、開発者は Scripted REST API 要求の本文コンテンツにアクセスできます。request.body オブジェクトは自動的にインスタンス化されます。

request.body オブジェクトのプロパティを確認するには、リソースの [スクリプト] フィールドに「request.body」と入力します。

プロパティが自動的に表示されます。キーボードの上下矢印キーを使用して、強調表示されたプロパティの説明を確認します。

プロパティリストにカーソルを合わせると、プロパティの説明が表示されます

プロパティリストのアイコンは、プロパティのデータタイプを示します。

  • O:オブジェクト
  • S:文字列
  • F:関数

RESTAPIRequestBody API には次のものが含まれます。

  • data:単一のオブジェクトまたはオブジェクトのアレイとしての要求本文の内容。
  • dataStream:ストリームとしての要求本文の内容。
  • dataString:文字列としての要求本文の内容。
  • hasNext():要求本文に別のエントリが含まれている場合は true を返します。
  • nextEntry():要求本文からスクリプトオブジェクトとして 1 つのエントリを取得します。

RESTAPIRequestBody API ドキュメントのサンプル要求本文を参照してください

記事 (17/28)

リソーススクリプト - RESTAPIResponse

RESTAPIResponse API を使用すると、開発者は Scripted REST API 要求に対する応答を作成できます。response オブジェクトは自動的にインスタンス化されます。

RESTAPIResponse API には次のものが含まれます。

  • getStreamWriter():この応答の ResponseStreamWriter。このオブジェクトを使用して、応答ストリームに直接書き込みます。
  • setBody():応答本文を JavaScript オブジェクトとして作成します。本文の内容は、要求で渡される Accept ヘッダーの値に応じて、JSON または XML に自動的にシリアル化されます。
  • setContentType()application/json などの値を Web サービスの応答の Content-Type ヘッダーに割り当てます。
  • setError():エラーが返されたときの応答エラーオブジェクトのプロパティを設定します。
  • setHeader():REST サービス応答のヘッダーに値を割り当てます。
  • setHeaders():Web サービス応答のヘッダーを設定します。
  • setLocation():Web サービス応答の場所ヘッダーに値を割り当てます。このヘッダーの詳細については、『W3 場所ヘッダードキュメント (W3 Location header documentation)』を参照してください。
  • setStatus():成功を示す 200 など、応答で送信するステータスコードを設定します。

RESTAPIResponse API ドキュメントには API のメソッドのサンプルスクリプトが含まれています。

開発者向けのヒントRESTAPIResponse API を使用せずに、Scripted REST API 応答ストリームに直接書き込むには、RESTAPIResponseStream API を使用します。

記事 (18/28)

リソーススクリプトのサンプル

ServiceNow は、既存のテーブルと列のデータに関する集計統計を計算するために使用する集計 API を提供しています。このモジュールで示すユースケースでは、次の 3 つの集計が必要です。

  • user_id問い合わせユーザーであるインシデントテーブルレコード。
  • user_id要求元である変更要求テーブルレコード。
  • user_idオープン者である問題テーブルレコード。

Scripted REST API は、集計 API を 3 回呼び出す代わりに、集計を実行して、単一の response オブジェクトに集計を返します。

Scripted REST APIs は、必要なすべての情報を 1 回の API 呼び出しで提供することで、API に対する不要な往復処理を回避できます。

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) { // implement resource here // Get value from the user_id path parameter passed in the URL var requestUser = request.pathParams.user_id; // Get value of the demo_query query parameter passed in the URL var requestDemoQuery = request.queryParams.demo_query; // Query the sys_user table to get the user record for the user passed in // the user_id path parameter var requestUserName = new GlideRecord('sys_user'); requestUserName.get(requestUser); // Aggregation 1: Incident table // Get the count of Incident table records where the user from the user_id path // parameter is the Caller. var userIncidentCount = new GlideAggregate('incident'); userIncidentCount.addAggregate('COUNT'); userIncidentCount.addQuery('caller_id',requestUser); userIncidentCount.addEncodedQuery(requestDemoQuery); userIncidentCount.query(); var incidents = 0; if (userIncidentCount.next()) { incidents = userIncidentCount.getAggregate('COUNT'); } // Aggregation 2: Change request table // Get the count of Change request table records where the user from the user_id path // parameter is the Requested by. var userChangeCount = new GlideAggregate('change_request'); userChangeCount.addAggregate('COUNT'); userChangeCount.addQuery('requested_by',requestUser); userChangeCount.addEncodedQuery(requestDemoQuery); userChangeCount.query(); var changes = 0; if (userChangeCount.next()) { changes = userChangeCount.getAggregate('COUNT'); } // Aggregation 3: Problem table // Get the count of Problem table records where the user from the user_id path // parameter is the Opened by. var userProblemCount = new GlideAggregate('problem'); userProblemCount.addAggregate('COUNT'); userProblemCount.addQuery('opened_by',requestUser); userProblemCount.addEncodedQuery(requestDemoQuery); userProblemCount.query(); var problems = 0; if (userProblemCount.next()) { problems = userProblemCount.getAggregate('COUNT'); } //Create a body object. Add property value pairs to the body. var body = {}; body.numInc = incidents; body.numChg = changes; body.numPrb = problems; body.user = {"User name": requestUserName.user_name, "User ID": requestUser}; // Send the response object, which is returned to the requestor, to the body object. response.setBody(body); })(request, response);

応答本文には、インシデント、変更、問題の数に加えて、ユーザー名ユーザー ID が含まれています。

応答本文は、4 つのプロパティを持つオブジェクトです。

リソーススクリプトについて覚えておくべきポイント

  • process 関数は自己呼び出し型です。
  • request オブジェクトと response オブジェクトは自動的にインスタンス化されます。
  • Scripted REST APIs にはアクセス制御が適用されます。API の認証を介して要求を行うユーザーは、要求された情報にアクセスできる必要があります。

演習 (19/28)

演習:ni_getinfo リソースにスクリプトを追加する

この演習では、ni_getinfo リソースにスクリプトを追加します。このスクリプトは、パスパラメーターで渡されたユーザーのアクティブな NeedIt 要求の数を検出します。response オブジェクトは次の要素で構成されます。

  • ユーザーのアクティブな NeedIt レコードの数 (整数)
  • 要求タイプ (オブジェクトのアレイ) 別のユーザーのアクティブな NeedIt レコードの数
  • ユーザー (オブジェクト) の名前sys_id

REST API Explorer を使用して ni_getinfo リソースをテストします。

準備

  1. ServiceNow ブラウザーのメインウィンドウ (Studio ではない) で、Application Navigator を使用して [NeedIt] > [開く] を開きます。
  2. その時点でリストにない場合は、[要求先] 列と [要求タイプ] 列を追加します。
    1. [リストをカスタマイズ] アイコン ([リストをカスタマイズ] アイコンはリストのヘッダーの左側にあります。) をクリックします。
    2. [利用可能] スラッシュバケットで、[要求先] フィールドをダブルクリックして [選択済み] スラッシュバケットに移動します。
    3. [上に移動] ([移動] ボタンは、[選択済み] スラッシュバケットの右側にあります。) ボタンと [下に移動] ([移動] ボタンは、[選択済み] スラッシュバケットの右側にあります。) ボタンを使用して、選択した場所に [要求先] フィールドを配置します。
    4. [要求タイプ] フィールドを [選択済み] スラッシュバケットの任意の位置に追加します。
    5. [OK] ボタンをクリックします。
  3. Beth AnglinFred Luddy などのユーザーを選択します。要求タイプ (人事 施設法務) ごとに、選択したユーザーが要求先であるレコードが少なくとも 1 つあることを確認します。必要に応じて、既存のレコードを変更するか、新しいレコードを作成します。
  4. NeedIt レコードリストで、条件ビルダーを使用して、選択したユーザーおよび各要求タイプのアクティブなレコードの数を検索します。この例では Fred Luddy を検索します。必ず選択したユーザーを検索してください。
    選択したユーザーのアクティブな NeedIt レコードを検索します
  5. ユーザーが要求先であるアクティブな NeedIt レコードの数をメモします。

リソーススクリプト

  1. ni_getinfo リソースを Studio で編集用に開いていない場合は、アプリケーションエクスプローラーを使用して [受信データ連携 (Inbound Integrations)] > [スクリプト化された REST リソース] > [NeedIt API/ni_getInfo[GET]] を開きます。

  2. [スクリプト] フィールドの内容を次のスクリプトに置き換えます。

    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) { // implement resource here // Get value from the user_name path parameter passed in the URL var requestUser = request.pathParams.user_name; // Get value of the ni_query query parameter passed in the URL var requestNIQuery = request.queryParams.ni_query; // Query the sys_user table to get the user record for the user passed in // the user_id path parameter. var requestUserName = new GlideRecord('sys_user'); requestUserName.get('user_name',requestUser); // Get the count of active NeedIt table records where the user from the // user_name path parameter is the Requested for. エンコードクエリはクエリパラメーターの関連性からのものです。Group by category. var userNICount = new GlideAggregate('x_58872_needit_needit'); userNICount.addAggregate('COUNT'); userNICount.addQuery('u_requested_for',requestUserName.sys_id); userNICount.addEncodedQuery(requestNIQuery); userNICount.groupBy('u_request_type'); userNICount.query(); var needitRecs = 0; var niUserRecs = []; var needitRecsCount = 0; while (userNICount.next()) { needitRecs = userNICount.getAggregate('COUNT'); var reqType = userNICount.u_request_type.getDisplayValue(); niUserRecs.push({"requestType": reqType, "count": needitRecs}); needitRecsCount = parseInt(needitRecsCount) + parseInt(needitRecs); } //Create a body object. Add property value pairs to the body. var body = {}; body.totalUserNIRecs = needitRecsCount; body.catCounts = niUserRecs; body.user = {"User name": requestUserName.user_name, "User ID": requestUserName.sys_id}; // Send the response object, which is returned to the requestor, to the body object. response.setBody(body); })(request, response);
  3. スクリプトを読んで、何をするスクリプトかを理解します。

  4. [更新] ボタンをクリックします。

n_getinfo リソースのテスト

  1. ServiceNow ブラウザーのメインウィンドウ (Studio ではない) で、Application Navigator を使用して [システム Web サービス] > [REST] > [REST API Explorer] を開きます。

  2. REST API Explorer を構成して、NeedIt APIn_getinfo リソースをテストします。

      名前空間 x_58872_needit
      API 名 NeedIt API
      API バージョン 最新
  3. REST API Explorer でドキュメントを確認します。

    質問:テキスト「NeedIt アプリケーションレコードのデータへのアクセスを提供します」はどこで定義されましたか。?

    回答:このテキストは NeedIt API[ドキュメント] セクション (タブ) にある [簡単な説明] フィールドで定義されました。

    [簡単な説明] フィールドは NeedIt API のコンテンツセクションにあります。

    質問:テキスト「ni_getinfo - ユーザーのアクティブな NeedIt レコードを検索します。[必要なもの] でグループ化します。」はどこで定義されましたか?

    回答:そのメソッド名は REST API Explorer が挿入しました。このテキストは NeedIt API ni_getinfo リソースの [ドキュメント] セクション (タブ) にある [簡単な説明] フィールドで定義されました。

    [簡単な説明] フィールドは NeedIt API のコンテンツセクションにあります。

  4. API メニューを開き、[API ドキュメント] メニューアイテムを選択します。

    API メニューから API ドキュメントを開きます。

    質問:API ドキュメントはどこで定義されましたか?

    回答:API ドキュメントは UI ページとして定義され、NeedIt API[ドキュメント] セクション (タブ) にある [ドキュメントリンク] フィールドで参照されました。

    [簡単な説明] フィールドは NeedIt API のコンテンツセクションにあります。

  5. 要求を準備します。

      user_name <準備セクションのユーザーのユーザー名。たとえば、fred.luddy>
      ni_query active = true
  6. [要求ヘッダー] セクションまでスクロールします。

    1. 要求形式の選択リストを調べます。
    2. 応答形式の選択リストを調べます。

    質問[要求形式] フィールドで application/json が唯一の選択肢となるのはなぜですか?

    回答:受け入れ可能な要求形式は、NeedIt API[コンテンツネゴシエーション] セクションで設定されます。

  7. [送信] ボタンをクリックします。

REST API Explorer でのテストの確認

  1. [要求] セクションで、要求の形式を確認します。パスパラメーターとクエリパラメーターを特定できますか?

    パスパラメーターとクエリパラメーターは、要求で渡される URL の一部です。

  2. [応答] セクションまでスクロールし、ステータスコードヘッダーを確認します。ステータスコード200 OK である必要があります。

  3. 応答本文を確認します。次の例のようになります。ユーザーとカウントは異なる場合があります。

{ "result": { "totalUserNIRecs": 6, "catCounts": [ { "requestType": "Facilities", "count": "1" }, { "requestType": "Human Resources", "count": "2" }, { "requestType": "Legal", "count": "3" } ], "user": { "User name": "fred.luddy", "User ID": "5137153cc611227c000bbd1bd8cd2005" } } }

記事 (20/28)

Scripted REST API のエラーオブジェクト

API ユーザーが問題をデバッグできるようにするには、error オブジェクトを使用して、エラーに関する情報を API のコンシューマーに報告します。ServiceNow には、エラーに対する 2 つの戦略があります。

  • 事前定義された error オブジェクトを使用する
  • カスタム error オブジェクトを作成する

どちらの場合も、error オブジェクトsn_ws_err 名前空間からインスタンス化する必要があります。

事前定義されたエラーオブジェクト

事前定義された error オブジェクトは、標準の HTTP ステータスコードを使用してコンシューマーに情報を送信します。エラーメッセージを渡して、カスタムメッセージを送信します。

ステータスコード エラーオブジェクト 説明
400 BadRequestError 構文の誤りなど、要求のエラー
404 NotFoundError 要求されたリソースを利用できない
406 NotAcceptableError Accept ヘッダー値が許可されていない
409 ConflictError 要求に競合がある
415 UnsupportedMediaTypeError 要求されたメディアタイプがサポートされていない

たとえば、NotFoundError オブジェクトをコンシューマーに送信します。

(function run(request, response) { // resource is not available return new sn_ws_err.NotFoundError('The resource you requested is not part of the API.'); })(request,response);

開発者向けのヒントerror オブジェクトを含むメッセージの送信は必須ではありませんが、送信した方が API のユーザーにとっては便利です。

事前定義されたエラーは応答本文に返されます。

エラーオブジェクトは応答本文に渡されます。

カスタムエラーオブジェクト

ServiceError オブジェクトを使用して、カスタムエラーを定義します。ServiceError メソッドは次のとおりです。

メソッド 説明 デフォルト値
setStatus(number) エラーの HTTP ステータスコード 500
setMessage(string) 送信する短いエラーメッセージ 空白文字列
setDetail(string) 詳細なエラーメッセージ 空白文字列
(function run(request, response) { var myError = new sn_ws_err.ServiceError(); myError.setStatus(442); myError.setMessage('Invalid value in path parameter'); myError.setDetail('We recognized the path parameter you sent, but the value you requested does not exist in the database.'); return myError; })(request,response);

カスタムエラーは応答本文に返されます。

カスタムエラーオブジェクトは応答本文に返されます。

記事 (21/28)

API バージョン

デフォルトでは、API バージョニングは無効になっています。バージョニングを有効にすると、開発者は Web サービスコンシューマーからの既存の統合に影響を与えることなく変更をテストして展開できます。

バージョニングの有効化

バージョニングは API レベルで有効になっており、すべての API リソースに適用されます。バージョニングを有効にするには、Scripted REST API で [バージョニングの有効化] 関連リンクをクリックします。

バージョニングを有効化する関連リンクを使用します。

バージョニングが有効になっている場合、リソース URL にはバージョン番号が含まれます。バージョニングを有効にするときに既存のデータ連携の遮断を防ぐには、バージョン v1 をデフォルトにします。

バージョニングされていないリソースが引き続き機能するようにするには、v1 をデフォルトにします。

[リソース] リストには [API バージョン] 列が含まれ、バージョン番号がリソースパスに追加されます。

バージョニングにより、リソースパスに「v#」が追加されます。ここで「#」は数値を示します。

注意:バージョニングを有効にすると、無効にすることはできません。

新規バージョンの作成

API に新しいバージョンを追加するには、[新規バージョンを追加] 関連リンクをクリックします。

[新規バージョンを追加] ダイアログが開きます。

[新規バージョンを追加] ダイアログには、デフォルトのバージョンを選択するためのフィールドと、既存のバージョンをコピーするための選択リストがあります。

新しいバージョンをデフォルトにするには、[このバージョンをデフォルトにする] チェックボックスをオンにします。ほとんどの場合、開発が完了して新しいバージョンが完全にテストされるまで、新しいバージョンをデフォルトにすべきではありません。

既存のバージョンからリソースをコピーするには、[次のバージョンから既存のリソースをコピー] 選択リストで該当するバージョンを選択します。

リソースを編集するときは、編集するバージョンを選択します。

バージョンは、リソース名、リソースパス、Api バージョンフィールドに表示されます。

REST API Explorer でテストする場合は、API バージョンをテストするバージョンに設定します。

REST API Explorer でバージョンを選択します

開発者向けのヒント:カスタムの Scripted REST APIs のバージョン間の変更を文書化します。REST API Explorer のメニューからメソッド定義と完全なドキュメントアクセスを更新します。

バージョンを追加するときは、Scripted REST API ドキュメントを最新の状態に保ちます。

演習 (22/28)

演習:バージョニングを有効にする

この演習では、NeedIt API のバージョニングを有効にします。ユーザーから渡された user_name パスパラメーターが sys_user テーブルに見つからない場合に error オブジェクトを返す、新しいバージョンの ni_getinfo リソースを作成します。

バージョニングの有効化

  1. NeedIt API を編集用に開いていない場合は、Studio でアプリケーションエクスプローラーを使用して [受信データ連携 (Inbound Integrations)] > [Scripted REST APIs] > [NeedIt API] を開きます。
  2. バージョニングを有効にします。
    1. [バージョニングの有効化] 関連リンクをクリックします。
    2. [バージョニングの有効化] ダイアログで、[バージョン v1 をデフォルトにする] チェックボックスをオンにします。
    3. [OK] ボタンをクリックします。

新規バージョンの追加

  1. [新規バージョンを追加] 関連リンクをクリックします。
  2. 新しいバージョンを設定します。
      このバージョンをデフォルトにする 未選択 (オフ)
      次のバージョンから既存のリソースをコピー v1
  3. [OK] ボタンをクリックします。

新規バージョンの編集

  1. [リソース] 関連リストまでスクロールし、ni_getinfo(v2) のリンクをクリックします。
  2. [リソースパス] フィールドを確認し、[リソースパス] のバージョン番号をメモします。
  3. 要求でユーザーから渡された user_name パスパラメーターが sys_user テーブルに見つからない場合は、カスタム error オブジェクトを返すようにスクリプトを変更します。
    1. カスタムエラーロジックをコピーします。

      // If there is no user record for the user_name passed in the user_name path parameter, // return a custom error. Notice the error object is created from // sn_ws_err.ServiceError(); If no status value is set, the HTTP Status will // be 500. if(!requestUserName.user_name){ var apiError = new sn_ws_err.ServiceError(); apiError.setStatus(542); apiError.setMessage("User not found"); apiError.setDetail("No user record found for the user_name passed into the ni_info web service resource using the user_name path parameter."); response.setError(apiError); return; }
    2. カスタムエラーロジックをスクリプトの 15 行目に貼り付けます。行番号が多少異なる場合があります。erro オブジェクトロジックは、データベースからユーザーレコードを取得してから userNICount オブジェクトを作成するまでの間に入ります。

      データベースからユーザーレコードを取得してから GlideAggregate オブジェクトを作成するまでの間にエラーロジックを追加します。

    3. error オブジェクトロジックを調べて、何をするロジックかを理解します。

  4. [更新] ボタンをクリックします。

API ドキュメントの更新

  1. Studio でアプリケーションエクスプローラーを使用して、[フォームと UI (Forms&UI)] > [UI ページ] > [needit_api_documentation] を開きます。

  2. HTML にリストアイテムを追加します。

    <li>GET ni_getinfo(v2):v1 と同じ機能がすべて含まれていますが、要求が無効なユーザー名を渡した場合のカスタムエラーメッセージも含まれています。</li>

    HTML にリストアイテムを追加します。

  3. [更新] ボタンをクリックします。

ni_getinfo(v2) リソースのテスト

  1. Studio の ni_getinfo (v2) リソースレコードで、[REST API の探索] 関連リンクをクリックします。

  2. REST API Explorer が、名前空間API 名API バージョンリソースが選択された状態で開くことに注意します。

  3. API メニューを開き、[API ドキュメント] メニューアイテムを選択します。新しい v2 ドキュメントは API ドキュメントの一部ですか?

    API メニューから API ドキュメントを開きます。

  4. 要求を準備します。

      user_name <無効なユーザー名をパスします。たとえば、hello.world>
      ni_query active = true
  5. [送信] ボタンをクリックします。

  6. [応答] セクションまでスクロールし、ステータスコードを確認します。ステータスコード542 である必要があります。

  7. 応答本文を確認します。カスタム error オブジェクトが含まれている必要があります。

{ "error": { "detail": "No user record found for the user_name passed into the ni_info web service resource using the user_name path parameter.", "message": "User not found" }, "status": "failure" }

記事 (23/28)

API Analytics

[Web API の使用率] ダッシュボードには、API ごとに分析データが表示されます。開発者は以下を確認できます。

  • リソース別の API 使用率 (過去 30 日間)
  • メソッド別の API 使用率 (日次)
  • バージョン別の REST API 使用率 (日次)
  • API 使用率 (月次)

API のダッシュボードを表示するには、Application Navigator を使用して [Performance Analytics] > [ダッシュボード] を開きます。[すべて] を選択し、検索フィールドを使用して「Web API の使用率」を検索します。ダッシュボードを開き、選択リストから目的の API を選択します。

ダッシュボードモジュールを使用して、Web API の使用率のダッシュボードを検索します。

または、API レコードの [API Analytics] 関連リンクをクリックします。

API レコードの [API Analytics] 関連リンクをクリックします。

ダッシュボードを使用して API への要求を監視します。

API ダッシュボードには、一度に 1 つの API の分析が表示されます。

演習 (24/28)

演習:API ダッシュボード

この演習では、NeedIt API のダッシュボードを開いて確認します。

ダッシュボードを開く

  1. NeedIt API を編集用に開いていない場合は、Studio でアプリケーションエクスプローラーを使用して [受信データ連携 (Inbound Integrations)] > [Scripted REST APIs] > [NeedIt API] を開きます。
  2. [API Analytics] 関連リンクをクリックします。

ダッシュボードの確認

NeedIt API とそのリソースには多くのトラフィックがないため、ダッシュボードには多くのデータがありません。

次の点を判断できるかどうか確認してください。

  • 各リソースが呼び出された回数(ヒント:詳細については、ダッシュボードウィジェットのデータをクリックしてください)。
  • 最もビジー状態だったリソース:
    • 過去 30 日間
    • 今日
    • 月次
  • NeedIt API で最もビジーだった日はいつですか?
    NeedIt API のダッシュボードを確認します。
    NeedIt API のダッシュボードを確認します。

演習 (25/28)

演習:「Scripted REST APIs」での作業内容を保存する (オプション)

開発者は、GitHub のようなソースコントロールアプリケーションを使用して、個人開発者インスタンス (PDI) の外部で変更をコミット (完了した作業を保存) できます。アプリケーションに対する変更内容をコミットして、作業をソースコントロールに保存します。

この演習では、このモジュールで完了した作業を GitHub リポジトリに保存します。

注意:ServiceNow が開発者プログラムの学習コンテンツで GitHub を使用する方法の詳細と、作業を保存する方法に関するビデオを見るには、『GitHub ガイド』を参照してください。

変更をコミット (Commit Changes)

  1. NeedIt アプリケーションが Studio で開かれていない場合は、ここで開きます。

    1. ServiceNow ブラウザーのメインウィンドウで、Application Navigator を使用して [システムアプリケーション] > [Studio] を開きます。

    2. [アプリケーションを選択] ダイアログで、このアプリケーションをクリックします。

  2. [ソースコントロール] メニューを開き、[変更をコミット] メニューアイテムを選択します。

    [変更をコミット (Commit Changes)] メニューアイテムを選択

  3. コミットする更新を選択します。

    1. [<アプリケーション> のソースコントロールにコミットするファイルを選択] ダイアログで、[すべての Update Sets] を選択します。
    2. コミットするアプリケーションファイルを確認します。
    3. [続行] ボタンをクリックします。

    ソースコントロールにコミットするファイルを選択

  4. [NeedIt のソースコントロールにコミットするファイルを確認] ダイアログで、「Scripted REST APIs モジュール完了」などのコミットコメントを入力します。

  5. [コミットファイル] ボタンをクリックします。

    コミットメッセージを入力

  6. [変更をコミット] ダイアログが成功を報告したら、[閉じる] ボタンをクリックします。

    変更が正常にコミットされました

    注意:変更のコミットに失敗した場合は、フォークしたリポジトリ URL ではなく ServiceNow のリポジトリ URL を [URL] フィールドに入力している可能性があります。GitHub 接続問題のトラブルシューティング方法については、『GitHub ガイド』の 「GitHub 問題のトラブルシューティング」 セクションを参照してください。

記事 (26/28)

「Scripted REST APIs」の理解度チェック

ここでは、Scripted REST APIs についての理解度を確認できます。自分の進行状況を評価するには、次の質問が役立ちます。質問ごとに回答を決定し、質問の任意の場所をクリックして回答を表示します。

質問:正誤問題?Scripted REST APIs は Studio で作成できます。


回答:正解は正しいです。


質問[コンテンツネゴシエーション] セクションで構成されるものについて説明しているのは次のうちどれですか?複数の回答が正解の場合があります。

  1. 利用可能な認証方法。
  2. サポートされる要求形式。
  3. API で利用可能なレコード。
  4. サポートされる応答形式。
  5. Web サービスプロバイダーとコンシューマーの間の契約。


回答:正解は 24 です。開発者は [コンテンツネゴシエーション] セクションを使用して、要求と応答に使用できる形式を構成します。


質問:正誤問題?Scripted REST API のドキュメントは UI ページとして作成する必要があります。


回答:正解は誤りです。REST API のドキュメントは、URL でアクセス可能な場所であればどこでもホストできます。UI ページを使用すると、ServiceNow インスタンスのドキュメントを簡単に管理できます。


質問:スクリプト化された REST リソースを作成すると、次のどれが作成されますか?複数の回答が正解の場合があります。

  1. 応答本文
  2. 要求ヘッダー
  3. REST メソッド
  4. パスパラメーター
  5. クエリパラメータ


回答:正解は 34 です。

要求ヘッダーとクエリパラメーターをリソースに関連付けることができます。


質問:開発者が要求からデータにアクセスできるようにする API は次のうちどれですか?

  1. RESTAPIRequestBody
  2. RESTAPIRequestV2
  3. RESTRequest
  4. RESTRequestV2
  5. RESTAPIRequest


回答:正解は 5 です。


質問:リソーススクリプトに応答本文を作成するのは次のどのメソッドですか?

  1. setBody()
  2. setContent()
  3. setBodyContent()
  4. getBody()
  5. getContent()


回答:正解は 1 です。


質問:正誤問題?Scripted REST APIs を使用すると、開発者はカスタムエラーコードを作成できます。


回答:正解は正しいです。


質問:API のバージョニングの開始方法を説明する文は次のどれですか?

  1. [バージョニングの有効化] ボタンをクリックします。
  2. Scripted REST API レコードの [コピー] ボタンをクリックし、[バージョン] フィールドをインクリメントします。
  3. Scripted REST API レコードの [バージョニングの有効化] 構成オプションを選択します。
  4. [バージョニングの有効化] 関連リンクをクリックします。
  5. [新規バージョンを追加] 関連リンクをクリックします。


回答:正解は 5 です。バージョニングを有効にした後、[新規バージョンを追加] 関連リンクを使用してバージョンを作成します。


質問[Web API の使用率] ダッシュボードを開く方法を説明している文は次のどれですか?複数の回答が正解の場合があります。

  1. [REST] > [ダッシュボード] を開き、「Web API の使用率」を検索します。
  2. API レコードの [API Analytics] 関連リンクをクリックします。
  3. [Performance Analytics] > [ダッシュボード] を開き、「Web API の使用率」を検索します。
  4. リソースレコードの [API Analytics] ボタンをクリックします。
  5. [REST] > [API Analytics] を開きます。


回答:正解は 23 です。


記事 (27/28)

Scripted REST APIs モジュールのまとめ

コアコンセプト:

  • Scripted REST APIs を使用すると、開発者は他のアプリケーションが自分のアプリと情報を交換できるようにする API を作成できます。

  • Scripted REST APIs の定義:

    • クエリパラメータ
    • API ドキュメント
    • 要求ヘッダー
    • 応答と要求のタイプ
    • リソース
  • リソースは Scripted REST API で定義され、以下で構成されます。

    • HTTP メソッド (パスパラメーターを含む相対パス)
    • リソース パス
    • セキュリティ
    • 許可される応答形式タイプ
    • リソースドキュメント
    • 要求ヘッダーの関連性
    • クエリパラメーターの関連性
    • スクリプト
  • リソーススクリプト:

    • request オブジェクトと response オブジェクトは自動的にインスタンス化される
    • スクリプティングリソースの API は、[RESTAPIRequest][RESTAPIRequestBody][RESTAPIResponse]、および [RESTAPIResponseStream] である
    • process 関数は自己呼び出し型である
    • body オブジェクトを設定して、リソースを使用してアプリケーションにデータを返すことができる
    • 開発者は、ヘッダー、クエリパラメーター、およびパスパラメーターにアクセスできる
  • error オブジェクトは、Scripted REST API コンシューマーが問題の原因を特定するのに役立つ

    • すべての error オブジェクトは、sn_ws_err 名前空間に作成される
    • error オブジェクトは、事前定義またはカスタムにすることができる
    • error オブジェクトは応答本文に返され、HTTP ステータスコードが含まれている
  • API バージョニングにより、既存のデータ連携を遮断ことなく API を更新できる

    • デフォルトバージョンを設定する
    • API の各バージョンのドキュメントを作成する
    • バージョニングを有効にすると、無効にすることはできない
    • バージョン番号はリソースパスの一部である
  • 開発者は、[Web API の使用率] ダッシュボードを使用して、API の分析を表示できる

    • リソース別の API 使用率 (過去 30 日間)
    • メソッド別の API 使用率 (日次)
    • バージョン別の REST API 使用率 (日次)
    • API 使用率 (月次)
  • REST API Explorer またはサードパーティアプリケーション (Postman など) を使用して、Scripted REST APIs をテストします。

記事 (28/28)

「Scripted REST APIs」の完了後の参考資料

お疲れさまでした。「Scripted REST APIs」モジュールはこれで完了です。スクリプト化された REST への関心に基づいて、さらに次のことも学んでいただけます。

  • 受信 REST データ連携:この開発者サイト学習モジュールでは、REST API Explorer を使用して ServiceNow API への要求を構築し、テストします。
  • スクリプトのテクニカルベストプラクティス:この開発者サイトガイドでは、コードを読みやすくする、小さなモジュール式コンポーネントを作成する、データベースを操作するなど、スクリプティングに関するテクニカルベストプラクティスを提供します。
  • REST API リファレンス:この開発者サイトの製品ドキュメントは、Web サービスで使用される各 REST APIs に関するドキュメントです。