REST APIs
REST(REpresentational State Transfer)는 웹상의 컴퓨터 시스템 간에 표준을 제공하여 서로 보다 쉽게 통신할 수 있게 지원하는 단순한 상태 비저장 아키텍처입니다.
Now Platform 는 기본적으로 활성 상태인 다양한 REST API를 제공합니다. 이러한 API는 애플리케이션 내의 다양한 ServiceNow 기능과 상호 작용할 수 있는 기능을 제공합니다. 이러한 기능에는 기존 테이블(Table API)에서 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업을 수행하고, MetricBase 데이터베이스에 데이터를 삽입하고, 정보를 검색하고, MetricBase 데이터베이스(MetricBase 시계열 API 등)에 대해 변환을 실행하는 기능이 포함됩니다.
사용 가능한 REST API 목록은 REST API 참조를 참조하세요.
https://<instancename>.service-now.com/syslog_transaction_list.do?sysparm_query=sys_created_onONToday%40javascript%3Ags.beginningOfToday()%40javascript%3Ags.endOfToday()%5Etype%3Drest
REST URI 형식 및 사용 가능한 매개변수
ServiceNow REST API는 표준 REST API 프로토콜을 따릅니다. 또한 "사용자 지정" URI 및 쿼리 매개 변수를 제공하여 이전 버전과의 호환성을 보장하고 긴 결과 목록 페이지 매김과 같은 추가 기능을 제공합니다. 다음 섹션에서는 모두 선택 사항인 이러한 사용자 지정 매개 변수의 이면에 있는 기능에 대해 설명합니다.
REST API 버전 관리
ServiceNow REST API URI에는 /api/now/v1/table/{tableName}과 같은 버전 번호가 포함될 수 있습니다. 버전 번호는 URI가 액세스하는 엔드포인트 버전을 식별합니다. URI에 버전 번호를 지정하면 REST API에 대한 향후 업데이트가 통합에 부정적인 영향을 미치지 않도록 할 수 있습니다.
URI에 버전 번호를 지정하지 않은 URI(예: /api/now/table/{tableName})는 인스턴스 버전의 최신 REST 엔드포인트를 사용합니다.
지원되는 HTTP 요청 메서드
- 임포트
- 삭제
- HEAD
- 패치
- 게시
- 넣기
이러한 방법에 대한 자세한 내용은 RFC-2616 Hypertext Transfer Protocol 문서를 참조하십시오.
- GET 메서드 대신 HEAD 메서드를 사용하여 응답 본문이 없는 응답을 반환할 수 있습니다.
- POST, PUT 및 PATCH 작업에서 여러 레코드를 전달할 수 없습니다. 이렇게 하면 첫 번째 레코드만 처리되고 나머지는 무시됩니다.
- 데이터베이스 뷰는 읽기 전용이므로 POST, PUT 및 PATCH를 사용하여 데이터베이스 뷰에 레코드를 삽입하거나 업데이트할 수 없습니다.
데이터 형식 헤더
REST API에는 요청 본문 또는 응답 본문이 Accept 포함된 요청에 대한 적절한 데이터 형식을 위해 요청 Content-Type 헤더가 필요합니다. POST, PUT, PATCH 및 DELETE 작업을 수행하려면 두 헤더를 모두 제공해야 합니다. GET 및 HEAD 작업에는 Accept 헤더만 필요합니다. 필수 헤더를 제공하지 않으면 400 잘못된 요청 오류가 발생합니다.
대부분의 ServiceNow REST API에서 이러한 요청 헤더는 다음 값을 지원합니다.
- 수락: application/json, application/xml
- 콘텐츠 유형: application/json, application/xml
각 엔드포인트에서 지원하는 특정 값 목록은 REST API 참조를 참조하세요.
기타 헤더
모든 요청에는 인증에 사용할 사용자 자격 증명을 지정하는 인증 헤더가 포함될 수 있습니다.
헤더를 설정하여 GET 또는 POST와 X-http-method-override 같은 HTTP 메서드를 재정의할 수도 있습니다.
특수 데이터 처리
다음은 REST API 내의 몇 가지 데이터 처리 뉘앙스에 대해 설명합니다.
- 데이터 필드를 지우는 방법: 선택 필드를 제외하고 매개 변수에 빈 값을 전달하여 데이터베이스의 값을 지울 수 있습니다. 예를 들어
{"short description":""}을 전송하면 지정된 레코드에 대한 필드가 short_description 지워집니다. - 통화 필드 처리 방법: 반환된 통화 값은 사용자의 로캘에 따라 현지 통화로 변환됩니다. 데이터를 삽입할 때 변환이 수행되지 않습니다. 이 동작은
통화또는가격유형의 필드에 적용됩니다.예를 들어 영국 로캘의 사용자가 통화 값이 USD인 레코드를 쿼리하는 경우 반환된 값은 GBP로 변환됩니다. 그러나 이 사용자가 통화 필드 값이 GBP인 새 기록을 추가하면 값이 USD로 변환되지 않고 GBP로 저장됩니다. 이 GBP 값은 미국 로캘에서 사용자가 쿼리하는 경우 USD로 표시됩니다.
- UI 데이터 표시와 REST 엔드포인트에 전달된 값: UI는 조작된 데이터인 데이터베이스 표시 값을 표시합니다. REST 엔드포인트는 기본적으로 실제 값을 삽입하고 업데이트하며, 이 값은 표시 값과 다를 수 있습니다. sysparm_input_display_value 요청 파라미터를 true로 설정하여 REST 엔드포인트가 전달된 값을 표시 값으로 처리하도록 강제할 수 있습니다.
사용자 지정 쿼리 매개변수
REST API는 ServiceNow 사용 가능한 여러 API에서 다음 쿼리 매개변수를 사용하여 API 전체에서 일관된 동작을 제공합니다. 이러한 매개변수를 사용하여 큰 기록 세트를 페이지 매김하고, 결과를 필터링하고, 단일 쿼리에서 반환되는 기록 수를 제한할 수 있습니다.
| sysparm_limit | 반환할 최대 기록 수입니다. 이 기록 수를 초과하는 요청의 경우 sysparm_offset 매개변수를 사용하여 기록 검색을 페이지 매김합니다. 이 제한은 ACL 평가 전에 적용됩니다. 액세스할 수 있는 기록을 포함하여 반환되는 기록이 없으면 액세스할 수 있는 기록이 먼저 반환되도록 기록 순서를 다시 정렬합니다. 주: 이례적으로 큰 sysparm_limit 값은 시스템 성능에 영향을 미칠 수 있습니다. 데이터 유형: 숫자 기본값: 10000 |
| sysparm_fields | 응답에 반환할 쉼표로 구분된 필드 목록입니다. 데이터 유형: 문자열 |
| sysparm_input_display_value | 표시 값 또는 실제 값을 사용하여 필드 값을 설정할지 여부를 나타내는 플래그입니다. 다양한 유형의 필드에 따라 엔드포인트는 전달된 표시 값을 조작하여 데이터베이스에 적절한 값을 저장할 수 있습니다. 예를 들어 참조 필드의 표시 이름을 보내면 엔드포인트는 해당 값에 대한 sys_id를 데이터베이스에 저장합니다. 날짜 및 시간 필드의 경우 이 매개변수가 true이면 현재 사용자의 시간대에 따라 날짜 및 시간 값이 조정됩니다. false인 경우 GMT 시간대를 사용하여 날짜 및 시간 값이 삽입됩니다. 유효한 값은 다음과 같습니다.
데이터 유형: 부울 기본값: false – 실제 값인 데이터 검색(GET 메서드)에서 반환되는 데이터 유형과 일치합니다. 주: 암호화된 필드의 값을 설정하려면 이 매개변수를 true로 설정해야 합니다. 이 매개변수가 true로 설정되지 않으면 암호화된 필드에 제출된 값이 저장되지 않습니다. 또한 요청하는 사용자는 요청을 제출하기 전에 적절한 암호화 컨텍스트를 가지고 있어야 합니다. 암호화된 필드는 적절한 암호화 컨텍스트 없는 사용자에 대해 숨겨집니다. 필드 암호화에 대한 자세한 내용은 을 참조하십시오 Column Level Encryption. |
| sysparm_offset | 기록 검색을 시작할 시작 기록 인덱스입니다. 이 값을 사용하여 기록 검색을 페이지 매김합니다. 이 기능을 사용하면 기록 수와 관계없이 관리 가능한 작은 청크로 모든 기록을 검색할 수 있습니다. 예를 들어 이 엔드포인트를 처음 호출할 때 sysparm_offset이 "0"으로 설정됩니다. 사용 가능한 모든 기록을 간단히 살펴보려면 모든 기록이 끝날 때까지 데이터 유형: 숫자 기본값: 0 |
| sysparm_query | 결과 집합을 필터링하는 데 사용되는 인코딩된 쿼리입니다. UI 필터를 사용하여 올바르게 인코딩된 쿼리를 얻을 수 있습니다. 구문은 sysparm_query=<col_name><operator><value>입니다.
모든 매개변수는 대/소문자를 구분합니다. 쿼리에는 sysparm_query=<col_name><operator><value>[<operator><col_name><operator><value>]와 같은 항목이 두 개 이상 포함될 수 있습니다. 예:
인코딩된 쿼리는 기능별 순서도 지원합니다. 특정 필드를 기반으로 응답을 정렬하려면 sysparm_query의 구문:
예: 이 쿼리는 모든 활성 기록을 필터링하고 결과를 숫자별로 오름차순으로 정렬한 다음 범주별로 내림차순으로 정렬합니다. 잘못된 필드 이름을 지정하는 등 쿼리의 일부가 잘못된 경우 인스턴스는 잘못된 부분을 무시합니다. 그런 다음 쿼리의 유효한 부분만 사용하여 행을 반환합니다. glide.invalid_query.returns_no_rows 속성을 사용하여 이 동작을 제어할 수 있습니다. 잘못된 쿼리에 행을 반환하지 않으려면 이 속성을 true로 설정합니다. 주: glide.invalid_query.returns_no_rows 속성은 목록, 스크립트(GlideRecord.query()) 및 웹 서비스 API 등 인스턴스 전체에서 모든 쿼리 동작을 제어합니다. 데이터 유형: 문자열 |
| sysparm_view | 데이터를 렌더링할 UI 뷰입니다. 응답에서 반환된 필드를 결정합니다. 유효한 값은 다음과 같습니다.
sysparm_fields 매개변수도 지정하는 경우 이 매개변수가 우선 적용됩니다. 데이터 유형: 문자열 |
REST API 요청의 닷워킹
이러한 매개변수를 지원하는 REST API에 대한 요청에서 또는 sysparm_fields 매개변수를 sysparm_query 지정할 때 닷워킹을 사용할 수 있습니다.
sysparm_query의 닷워킹
매개변수에 sysparm_query 닷워킹을 입력하여 관련 기록 값을 사용하여 쿼리를 필터링할 수 있습니다. 예를 들어 인시던트 회사에 특정 종목 코드 값이 있는 모든 인시던트 기록을 검색할 수 있습니다.
https://<인스턴스>.service-now.com/api/now/table/incident?sysparm_query=company.stock_symbol=NYX
sysparm_fields에서 닷워킹
매개변수의 sysparm_fields 닷워킹을 사용하여 여러 테이블의 필드 값을 볼 수 있습니다. 예를 들어 역할 이름뿐만 아니라 특정 역할을 가진 각 사용자의 이름, Sys_id및 부서를 검색할 수 있습니다.
요청은 사용자와 역할 간의 다대다 관계를 정의하는 사용자 역할 [sys_user_has_role] 테이블에서 실행됩니다. 응답에는 사용자 [sys_user] 및 역할 [sys_user_role] 테이블의 필드 값이 포함됩니다.
https://<인스턴스>.service-now.com/api/now/table/sys_user_has_role?sysparm_fields=role%2Crole.name%2Cuser%2Cuser.name%2Cuser.sys_id%2Cuser.department&sysparm_query=role%3D3d43716d0f6002003a2d47bce1050e0d%5EORrole%3Dac73b52d0f6002003a2d47bce1050eec&sysparm_display_value=true
{
"result": [
{
"user.name": "Fred Johnson",
"user.sys_id": "f5a3716d0f6002003a2d47bce1050ed4",
"role.name": "support",
"user.department": {
"display_value": "Accounting",
"link": "https://<instance>.service-now.com/api/now/table/cmn_department/5b3b13530f58c2003a2d47bce1050e96"
},
"role": {
"display_value": "support",
"link": "https://<instance>.service-now.com/api/now/table/sys_user_role/3d43716d0f6002003a2d47bce1050e0d"
},
"user": {
"display_value": "Fred Johnson",
"link": "https://<instance>.service-now.com/api/now/table/sys_user/f5a3716d0f6002003a2d47bce1050ed4"
}
},
{
"user.name": "Fred Johnson",
"user.sys_id": "f5a3716d0f6002003a2d47bce1050ed4",
"role.name": "asset_mgmt",
"user.department": {
"display_value": "Accounting",
"link": "https://<instance>.service-now.com/api/now/table/cmn_department/5b3b13530f58c2003a2d47bce1050e96"
},
"role": {
"display_value": "asset_mgmt",
"link": "https://<instance>.service-now.com/api/now/table/sys_user_role/ac73b52d0f6002003a2d47bce1050eec"
},
"user": {
"display_value": "Fred Johnson",
"link": "https://<instance>.service-now.com/api/now/table/sys_user/f5a3716d0f6002003a2d47bce1050ed4"
}
}
]
}
REST API HTTP 응답 코드
REST 엔드포인트에 대한 호출은 HTTP 응답 코드를 반환합니다. 이러한 응답 코드를 사용하여 REST API가 제대로 실행되었는지 확인할 수 있습니다. 그렇지 않은 경우 엔드포인트는 오류 응답 코드를 반환합니다. 오류 응답의 정보를 사용하여 호출 형식과 관련된 문제를 해결합니다. 엔드포인트가 반환할 수 있는 표준 응답 코드 목록은 을 참조하십시오 REST API HTTP 응답 코드. 특정 ServiceNow REST API에서 반환되는 응답 코드 목록은 REST API 참조를 참조하세요.
REST API 보안
기본적으로 ServiceNow REST API는 기본 인증 또는 OAuth를 사용하여 REST API/엔드포인트에 대한 사용자 액세스 권한을 부여합니다. 다단계 인증을 사용하여 REST API에 액세스하도록 인스턴스를 구성할 수도 있습니다.
REST 엔드포인트 호출에서 지정하는 사용자 ID는 대화식 사용자와 동일한 방식으로 액세스 제어의 대상이 됩니다. 각 요청에는 사용자 이름 및 암호와 같은 적절한 인증 정보가 필요합니다. 각 엔드포인트 요청에 엔드포인트에 액세스할 수 있는 충분한 자격 증명이 있는 Authorization 헤더가 포함되어 있는지 확인합니다.
ServiceNow REST API는 기존 세션에 바인딩할 수 있는 쿠키도 지원합니다.
인증서를 사용하여 API를 호출하고 상호 인증에 대한 정보를 얻으려면 인증서 기반 인증을 참조하세요.
IP, 역할, 그룹 및 API REST API Auth Scope범위 제한과 같은 필터 기준이 있는 REST API 액세스 정책은 . REST API 액세스 정책에 대한 자세한 내용은 REST API 액세스 정책을 참조하세요.
신뢰할 수 있는 외부 네트워크에서 REST API 액세스 정책을 사용하여 전역 REST API 수준에서, 그리고 기본 REST 인증 수준에서 들어오는 요청을 차단하는 단일 정책을 만들 수 있습니다.
REST API 역할
사용자 인증 외에도 각 REST 엔드포인트는 엔드포인트에 액세스하는 데 필요한 역할에 대해 서로 다른 요구 사항을 가질 수 있습니다. 일부는 관리자 역할이 필요하고 다른 일부는 API 특정 역할이 필요합니다. 역할 요구 사항은 REST API/엔드포인트와 연결된 ACL(접근 제어 목록)에 지정됩니다. 각 REST API/엔드포인트의 유효한 역할에 대한 자세한 내용은 REST API 참조 를 참조하거나 System Security> ACL(접근 제어)을 통해 인스턴스 내에서 API/엔드포인트에 연결된 ACL을 찾습니다.
REST API ACL
REST API ACL은 필요한 역할 및 사용자가 REST API 또는 엔드포인트에 액세스하기 위해 충족해야 하는 조건과 ServiceNow 같은 기준을 정의합니다. 전체 REST API(예: Table API 및 Attachment API ACL) 또는 개별 엔드포인트(예: PUT 메서드에만 적용되는 MetricBase clotho_rest_put ACL)에 대해 단일 ACL을 정의할 수 있습니다.
기본 시스템에서 다음 ServiceNow REST API ACL을 사용할 수 있지만 기본적으로 비활성화되어 있습니다. 다른 ServiceNow 모든 REST API ACL은 기본적으로 활성화됩니다.
- 테이블 API
- 집계 API
- 임포트 세트 API
- 첨부 파일 API
ACL에 대한 자세한 내용은 접근 제어 목록 규칙을 참조하세요.
REST API 테이블 접근
기본적으로 기본 시스템 테이블, 전역 테이블 및 범위 지정 테이블을 포함한 모든 테이블은 웹 서비스를 통해 액세스할 수 있습니다. 웹 서비스를 통해 테이블에 액세스하려면 기본 인증 및 ACL과 같은 웹 서비스 보안 요구 사항을 충족해야 합니다. ACL로 인해 호출 엔터티에 권한이 없는 필드는 REST 쿼리 응답에서 반환되지 않습니다.
인증 또는 권한 부여 없이 테이블에 대한 액세스를 허용하려면 활성 상태의 공용 페이지 [sys_public] 테이블에 테이블 이름을 추가합니다. REST 인터페이스는 연결된 테이블에 정의된 모든 ACL을 계속 적용합니다. ACL 적용이 바람직한 동작이 아닌 경우 테이블에서 ACL을 비활성화해야 합니다. 그러나 API를 공개하면 공개 액세스가 인스턴스의 데이터를 업데이트할 수 있으므로 공개하지 않는 것이 좋습니다.
테이블 애플리케이션 액세스 설정의 웹 서비스를 통해 이 테이블에 대한 액세스 허용 확인란을 사용하여 테이블에 대한 직접 웹 서비스 액세스를 제어할 수도 있습니다. 테이블과 웹 서비스 상호작용을 활성화하려면 이 확인란을 선택해야 합니다.
인바운드 REST에 대한 다단계 인증
사용자 계정에 다단계 인증이 활성화된 경우, 해당 사용자로 REST 요청을 할 때 기본 인증 자격 증명과 함께 MFA 토큰을 제출해야 합니다.
REST 요청과 함께 MFA 토큰을 전송하려면 기본 인증 username:password 문자열의 사용자 암호 끝에 토큰을 추가합니다(예: joe.employee:password62161147). base64 인코딩을 사용하여 MFA 토큰을 포함한 전체 문자열을 인코딩한 다음, Authorization 헤더에 인코딩된 문자열을 보냅니다.
다단계 인증 REST 응답
MFA 인증 요청에 대한 응답은 제공된 자격 증명 및 MFA 토큰의 유효성에 따라 달라집니다.
| 결과 | 설명 |
|---|---|
| 기본 인증 자격 증명 및 MFA 토큰이 유효합니다. | 사용자가 인증되고 세션이 생성됩니다. 요청은 정상적으로 처리됩니다. |
| 기본 인증 자격 증명은 유효하지만 MFA 토큰이 잘못되었거나 없습니다. | 응답에서 오류 401을 반환합니다. 응답에는 값이 invalid인 X-MFA_TOKEN 헤더가 포함됩니다. |
| 기본 인증 자격 증명이 잘못되었습니다. | 응답에서 오류 401을 반환합니다. X-MFA_TOKEN 헤더는 응답에 포함되지 않습니다. |
REST API CORS 지원
REST API는 교차 출처 자원 공유(CORS) 보안을 지원합니다. CORS 지원을 통해 각 REST API에 액세스할 수 있는 도메인을 정의할 수 있습니다. 도메인에 대한 CORS 규칙을 정의하면 해당 도메인의 교차 오리진 요청을 허용할 수 있습니다. CORS 규칙이 없는 도메인에서 교차 원본 요청을 수행할 수 없습니다.
다른 도메인의 특정 API/엔드포인트, HTTP 메서드 및 헤더에 대한 액세스만 허용하도록 CORS를 구성할 수 있습니다. 예를 들어 특정 도메인에서 Table API에 대한 요청을 제한하여 GET 작업만 허용할 수 있습니다.
인스턴스에 정의된 CORS 규칙을 보려면 .
속성을 false로 설정하여 glide.rest.cors.enabled 인스턴스에 대한 CORS 지원을 비활성화할 수 있습니다. false인 경우 수신 REST 요청에 대해 CORS 평가가 수행되지 않습니다. 이 속성은 기본적으로 true 입니다.
REST API 탐색기
REST API 탐색기는 ServiceNow 인스턴스의 정보를 사용하여 REST 요청을 빌드하고 전송하는 데 사용할 수 있는 엔드포인트, 메서드 및 변수 목록을 제공하는 도구입니다.
요청을 빌드한 후 REST API 탐색기는 요청을 시작하는 데 사용할 수 있는 여러 프로그래밍 언어로 된 코드 샘플과 자세한 요청 및 응답 정보를 제공합니다.
REST API 탐색기에 액세스하려면 인스턴스에서 . REST API 탐색기에 액세스하려면 rest_api_explorer 역할이 있어야 합니다. 자세한 내용은 REST API 탐색기 사용을 참조하세요.
Automated Test Framework 지원
Automated Test Framework(ATF)는 인바운드 REST 테스트 단계를 지원합니다. 사용자가 만든 사용자 지정 인바운드 REST API에 대한 자동화된 테스트를 만들 수 있습니다. 사용자 지정 REST API에 대한 테스트를 만들면 업그레이드 테스트가 간소화되고 REST API에 대한 수정 사항이 이전 버전과 호환되는지 확인할 수 있습니다.
REST 클라이언트 애플리케이션 예제
REST 웹 서비스를 사용한 통합을 시연하기 위해 몇 가지 예제 REST 클라이언트 애플리케이션 및 소스 코드를 사용할 수 있습니다. 예제 REST 클라이언트 애플리케이션은 ServiceNow NodeJS 또는 iOS 애플리케이션과 같은 외부 애플리케이션에서 REST API를 사용하는 방법을 보여줍니다.
예제는 오픈 소스이며 커뮤니티에서 사용할 수 있습니다. 이러한 예제 애플리케이션을 사용하여 REST 기능에 익숙해지거나 사용자 고유의 REST 클라이언트 애플리케이션을 작성하기 위한 시작점으로 사용할 수 있습니다.
rest_api_explorer 역할을 가진 사용자는 다음으로 이동하여 사용 가능한 클라이언트 애플리케이션 목록에 액세스할 수 있습니다. .
애플리케이션 목록을 볼 때 애플리케이션을 클릭하여 GitHub에서 호스팅되는 소스 코드 및 추가 설명서를 확인합니다.
개발자 교육
에서 ServiceNow® 개발자 사이트인바운드 REST 통합 및 아웃바운드 REST 통합에 대한 교육을 받을 수 있습니다.
추가 정보
REST API 섹션의 나머지 부분에는 REST API를 ServiceNow 사용한 특정 구현을 설명하는 "방법" 항목이 포함되어 있으며 REST API에서 ServiceNow 사용하는 다양한 데이터 요소를 설명하는 참조 정보를 제공합니다.