Scripted REST API の例 - スクリプトサンプル

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:9分
  • これらの例は、Scripted REST API のさまざまなリソーススクリプトを作成する方法を示しています。

    クエリパラメーター GET の例

    この例では、要求からクエリパラメーター値を取得する方法を示しています。

    /**
     * GET - Sample Request API - Query Params
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        var uri = request.uri;
        var url = request.url;
        var queryParams = request.queryParams;
        var customHeader = request.getHeader('X-Custom');
    
        return {
            "uri": uri,
            "url": url,
            "queryParams": queryParams,
            "customHeader": customHeader
        };
    
    })(request, response);

    パスパラメーター GET の例

    この例では、要求からパスパラメーター値を取得する方法を示しています。

    /**
     * GET - Sample Request API - Path Params
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        var uri = request.uri;
        var url = request.url;
        var path = request.pathParams;
    
        return {
            "uri": uri,
            "url": url,
            "path_params": path,
            "path.id": path.id
        };
    })(request, response);
    

    スクリプトインクルード GET の例

    この例は、スクリプトインクルードを使用して応答を提供する方法を示しています。スクリプトインクルードを使用すると、共通のコードを再利用し、REST サービススクリプトの読みやすさを維持できます。

    /**
     * GET - Sample Request API - Script Include
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        var responseObj = global.SampleDataUtil.getSampleJSON();
        return responseObj;
    })(request, response);

    文字列 POST の例

    この例では、文字列本文を含む POST メッセージを解析し、要求に基づいて応答を送信する方法を示しています。

    /**
     *  POST - Sample Request API - dataString
     *  sample usage:
     *  var requestBody = request.body;
     *  var requestString = requestBody.dataString;
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        var requestBody = request.body;
        var requestString = requestBody.dataString;
        return {"requestString": requestString};
    })(request, response);

    バイナリ POST の例

    この例では、バイナリ本文を含む POST メッセージを解析し、要求に基づいて応答を送信する方法を示しています。

    /**
     * POST - Sample Request API - Body
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        var body = request.body.data;
        //do any additional processing on the request body, such as inserting a new record.
        return {
            "body.id": body.id
        };
    })(request, response);

    許容範囲外エラーの例

    この例は、許容範囲外エラーで応答する方法を示しています。このエラータイプは、要求の Accept ヘッダー値が Web サービスでサポートされていない場合に使用します。

    /**
     * Sample Not Acceptable Error Sample
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        response.setError(new sn_ws_err.NotAcceptableError('sample error message'));
    })(request, response);

    「要求が正しくありません」エラーの例

    この例は、「要求が正しくありません」エラーで応答する方法を示しています。このエラータイプを使用して、要求構文の誤りを示します。

    /**
     * Bad Request Error Sample
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        response.setError(new sn_ws_err.BadRequestError('sample error message'));
    })(request, response);

    競合エラーの例

    この例は、競合エラーで応答する方法を示しています。同じレコードに対する複数の更新など、競合する複数の要求がある場合はこのエラータイプを使用します。

    /**
     * Error Response: Conflict Error Sample
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        response.setError(new sn_ws_err.ConflictError('sample error message'));
    })(request, response);

    「見つかりません」エラーの例

    この例は、「見つかりません」エラーで応答する方法を示しています。要求されたリソースが存在しないか利用できない場合は、このエラータイプを使用します。

    /**
     * Error Response: Not Found Error Sample
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        response.setError(new sn_ws_err.NotFoundError('sample error message'));
    })(request, response);

    サポートされていないメディアタイプのエラーの例

    この例は、サポートされていないメディアタイプのエラーで応答する方法を示しています。このエラータイプを使用して、要求のコンテンツタイプがサポートされていないことを示します。

    /**
     * Error Response: Unsupported Media Type Error Sample
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        response.setError(new sn_ws_err.UnsupportedMediaTypeError('sample error message'));
    })(request, response);

    サービスエラーの例

    この例は、一般的なサービスエラーで応答する方法を示しています。ServiceError オブジェクトを使用すると、ステータスコード、メッセージ、およびエラーの詳細を定義できます。事前定義されたエラータイプがニーズを満たさない場合は、ServiceError を使用します。

    /**
     * Error Response: Custom Error Sample
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
        var myError = new sn_ws_err.ServiceError();
        myError.setStatus(418);
        myError.setMessage("I am a Teapot");
        myError.setDetail("Here are the details about this error");
        response.setError(myError);
    })(request, response);
    

    スクリプト化済み REST リソーススクリプトの例

    このサンプル REST API リソーススクリプトは、要求本文の name および id の値を解析し、それらの値を応答で返します。
    /**
     * POST - Sample Request API - Body
     */
    (function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) {
    var body = request.body.data,
    id0,name0,id1,name1;
    name0 = body[0].name; // 'user0'
    id0 = body[0].id; // '1234'
    name1 = body[1].name; // 'user1'
    id1 = body[1].id; // '5678'
    
    return {
    "id": id0,
    "name": name0,
    "id1": id1,
    "name1": name1
    };
    })(request, response);

    要求

    API は、XML 要求と JSON 要求の両方を受け入れることができます。
    表 : 1. 要求
    JSON 要求 XML 要求
    POST /api/sn_demo_api/v1/example/body HTTP/1.1
    Content-Type: application/json
    Accept: application/json
    Host: <instance>.service-now.com
    Connection: close
    Content-Length: 91
    
    [   
      { "name": "user0",
        "id": 1234
      },
      {
        "name": "user1",
        "id": 5678
      }
    ]
    POST /api/sn_demo_api/v1/example/body HTTP/1.1
    Content-Type: application/xml
    Accept: application/json
    Host: <instance>.service-now.com
    Connection: close
    Content-Length: 152
    
    <request><entry>
          <name>user0</name>
          <id>1234</id>
       </entry>
       <entry>
          <name>user1</name>
          <id>5678</id>
       </entry>
    </request>

    応答

    どちらの要求も Accept ヘッダー値として application/json を指定します。要求のコンテンツタイプが XML の場合でも、両方の応答に JSON 形式が使用されます。
    HTTP/1.1 200 OK
    Content-Type: application/json;charset=UTF-8
    Transfer-Encoding: chunked
    Date: Tue, 04 Aug 2015 15:20:44 GMT
    Server: ServiceNow
    Connection: close
    Set-Cookie: BIGipServerpool_<Instance>=880838154.47166.0000; path=/
    
    {"result":{"id":1234,"id1":5678,"name":"user0","name1":"user1"}}