스크립팅된 REST API 예제 - 스크립트 샘플

  • 릴리스 버전: Xanadu
  • 업데이트 날짜 2024년 08월 01일
  • 읽기9분
  • 이 예제에서는 스크립팅된 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);

    허용되지 않는 오류 예

    이 예제에서는 허용되지 않는 오류로 응답하는 방법을 보여 줍니다. 수락 헤더 값이 웹 서비스에서 지원되지 않는 경우 이 오류 유형을 사용합니다.

    /**
     * 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);

    지원되지 않는 미디어 유형 오류 예시

    이 예제에서는 지원되지 않는 미디어 유형 오류로 응답하는 방법을 보여 줍니다. 이 오류 유형을 사용하여 요청의 Content-Type이 지원되지 않음을 나타냅니다.

    /**
     * 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 and 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>

    응답

    두 요청 모두 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"}}