Skip To Content

ArcGIS REST API를 통한 스크립팅

ArcGIS REST API에 대한 요청만을 통해 ArcGIS Enterprise를 관리할 수 있습니다. 서버 또는 포털을 통해 관리 작업을 수행하는 경우에도 API에 대한 호출은 백엔드에서 이루어집니다. ArcGIS Enterprise를 관리하는 스크립트를 작성하려면 URL을 생성하고, HTTP 요청을 만들고, HTTP 응답을 구문 분석할 수 있게 해주는 스크립팅 언어를 선택해야 합니다. 이 도움말 시스템의 예시에서는 Python을 사용합니다.

API를 사용하기 위해 스크립트를 실행하는 머신에 Esri 소프트웨어를 설치할 필요는 없습니다. 필요한 것은 포털에 대한 HTTP 요청을 만들 수 있는 환경뿐입니다.

시작하기

ArcGIS REST API를 사용하려면 수행할 작업에 대한 HTTP 요청을 생성하고 해당 작업의 필수 매개변수를 포함시킵니다. ArcGIS REST API와 상호작용할 수 있는 일련의 디렉터리를 살펴보며 관리 작업과 해당 필수 매개변수에 익숙해질 수 있습니다. ArcGIS Enterprise REST API는 두 개의 포털과 두 개의 서버 디렉터리를 통해 노출됩니다.

ArcGIS REST API 사용

포털 및 서버 디렉터리는 기관의 ArcGIS REST API 리소스에 대한 인터랙티브 뷰를 제공합니다. 이러한 디렉터리를 사용하면 기관의 관리 스크립트를 작성하는 방법을 이해할 수 있습니다.

포털 디렉터리 URL의 형식은 다음과 같습니다.

서버 디렉터리 URL의 형식은 다음과 같습니다.

ArcGIS REST API에 익숙해지려면 디렉터리 중 하나를 사용하여 관리 작업을 수행하세요. 입력해야 하는 매개변수에 주의하고, 서버에 요청 시 브라우저의 주소 표시줄에서 URL을 확인하세요. 요청과 응답의 전체 본문을 볼 때 Fiddler 또는 Firebug와 같은 웹 개발자 도구가 유용할 수 있습니다. 이 정보는 Python 또는 다른 스크립팅 언어를 통해 고유한 관리 HTTP 요청을 생성하려고 할 때 중요합니다.

스크립트에서 토큰 생성 및 사용

포털, 서버 또는 해당 디렉터리를 통해 기관을 관리할 때는 적절한 권한이 있는 계정의 사용자 이름과 비밀번호를 제공해야 합니다. 동일한 개념이 스크립트를 작성할 때도 적용됩니다. 그러나 스크립트를 사용하여 기관을 관리할 때 인증이 수행되는 방법을 이해해야 합니다.

기관이 빌트인 계정 및 토큰 인증을 사용하도록 구성된 경우 포털 및 서버 디렉터리에 사용하는 것과 동일한 관리 계정과 URL을 스크립트에 사용할 수 있습니다. 기관이 기관별 로그인과 웹 계층 인증을 사용하도록 구성된 경우 스크립트에서 Web Adaptor를 우회하도록 하는 것을 권장합니다. Portal for ArcGIS를 설치한 후 생성된 초기 관리자 계정을 사용하여 포털에 접근하거나 ArcGIS Server를 설치한 후 생성된 기본 사이트 관리자 계정을 사용하여 서버에 접근합니다.

어떤 경우든 사용자에게 토큰이 반환됩니다. 토큰은 사용자가 특정 유형의 작업을 수행하도록 인증된 포털 또는 서버와 통신하는, 문자로 구성된 특수 문자열입니다. 만드는 모든 웹 서비스 요청에 이 토큰을 포함시켜야 합니다.

다음 Python 함수에서는 포털 토큰을 요청합니다. 포털의 URL, 사용자 이름, 비밀번호는 인수로 제공됩니다.

def generateToken(username, password, portalUrl):
    '''Retrieves a token to be used with API requests.'''
    data = urllib.parse.urlencode({'username' : username,
                                   'password' : password,
                                   'client' : 'referer',
                                   'referer': portalUrl,
                                   'expiration': 60,
                                   'f' : 'json'}).encode('utf-8')
    response = urllib.request.urlopen(portalUrl + '/sharing/rest/generateToken',
                                      data).read().decode('utf-8')
    try:
        jsonResponse = json.loads(response)
        if 'token' in jsonResponse:
            return jsonResponse['token']
        elif 'error' in jsonResponse:
            print(jsonResponse['error']['message'])
            for detail in jsonResponse['error']['details']:
                print(detail)
    except ValueError as e:
        print('An unspecified error occurred.')
        print(e)

다음 Python 함수에서는 서버 토큰을 요청합니다. 서버의 URL, 사용자 이름, 비밀번호는 인수로 제공됩니다.

def generateToken(username, password, serverUrl):
    '''Retrieves a token to be used with API requests.'''
    data = urllib.parse.urlencode({'username' : username,
                                   'password' : password,
                                   'client' : 'referer',
                                   'referer': serverUrl,
                                   'expiration': 60,
                                   'f' : 'json'}).encode('utf-8')
    response = urllib.request.urlopen(serverUrl + '/tokens/generateToken',
                                      data).read().decode('utf-8')
    try:
        jsonResponse = json.loads(response)
        if 'token' in jsonResponse:
            return jsonResponse['token']
        elif 'error' in jsonResponse:
            print(jsonResponse['error']['message'])
            print(jsonResponse['error']['details'])
    except ValueError as e:
        print('An unspecified error occurred.')
        print(e)

토큰은 영원히 지속되지 않습니다. 즉, 토큰은 악의적인 사용자가 훔쳐서 무기한으로 사용할 수 없도록 사용 기간이 만료되도록 설계되어 있습니다. 일반적으로 스크립트를 실행할 때마다 새 토큰을 요청해야 합니다(단. 요청할 때마다는 아님). 일부 예외적인 경우 스크립트 실행이 끝나기 전에 토큰이 만료될 수 있습니다. 요청에 만료된 토큰이 포함된 경우 서버의 응답에 토큰이 만료되었음을 나타내는 오류가 포함됩니다. 이 경우 토큰을 새로 고치고 스크립트를 계속 실행합니다.

요청 및 응답 작업

웹 서비스 요청을 만들려면 수행할 작업의 URL과 해당 작업의 필수 매개변수를 공식화해야 합니다. 필수 매개변수 중 하나는 앞에서 생성한 것과 같은 토큰입니다.

모든 관리 작업은 웹 서비스 응답을 생성합니다. 이 응답은 일반적으로 JSON(JavaScript Object Notation) 형식으로 요청합니다. Python과 같은 스크립팅 언어에는 JSON 응답을 분석하거나 읽을 수 있는 라이브러리가 포함되어 있습니다. 때때로 요청의 성공 여부를 확인하기 위한 HTTP 상태 코드만 얻고 싶은 경우도 있습니다(예시: 정상을 의미하는 코드 200). 어떤 경우에는 추가로 구문 분석을 수행하고 확인하려는 데이터(예시: 로그 메시지)가 응답에 포함될 수 있습니다.