Skip To Content

ArcGIS REST API を使用したスクリプトの作成

ArcGIS Enterprise は、ArcGIS REST API へのリクエストのみを通じて管理できます。 サーバーかポータルから管理タスクを実行する場合でも、API の呼び出しがバック エンドで行われます。 ArcGIS Enterprise を管理するスクリプトを記述するには、URL の構築、HTTP リクエストの送信、HTTP 応答の解析を行うことができるスクリプト言語を選択する必要があります。 (このヘルプ システムのコード例は Python を使用しています)。

API を使用するために、スクリプトを実行するコンピューターに Esri ソフトウェアをインストールする必要はありません。 必要となるのは、ポータルに HTTP リクエストを送信できる環境だけです。

はじめに

ArcGIS REST API を使用するには、実行する操作の HTTP リクエストを作成し、その操作に必要なパラメーターを含めます。 ArcGIS REST API を操作できる一連のディレクトリを参照することで、管理操作と必須パラメーターを把握できます。 ArcGIS Enterprise REST API は 2 つのポータルと 2 つのサーバー ディレクトリを通じて公開されます。

ArcGIS REST API の使用

ポータルとサーバー ディレクトリには、組織の ArcGIS REST API リソースのインタラクティブなビューが用意されています。 これらのディレクトリを使用することで、組織の管理スクリプトの記述方法を理解できます。

ポータル ディレクトリの URL の形式は次のとおりです。

サーバー ディレクトリの URL の形式は次のとおりです。

ArcGIS REST API に関する知識を得るには、いずれかのディレクトリを使用して管理タスクを実行します。 サーバーにリクエストを送信する際は、入力する必要があるパラメーターに注意し、ブラウザーのアドレス バーで URL を確認してください。 リクエストの全文や応答を確認するには、Fiddler や Firebug などの Web 開発者ツールが役に立ちます。 Python や別のスクリプト言語を使用してユーザー独自の管理 HTTP リクエストを構築するときは、この情報は価値があります。

トークンの生成とスクリプトでの使用

ポータル、サーバー、またはこれらの対応するディレクトリを通じて組織を管理する場合は、適切な権限があるアカウントのユーザー名とパスワードを入力する必要があります。 スクリプトを記述する場合も同じ概念が適用されます。 ただし、スクリプトを使用して組織を管理する場合、どのように認証が発生するのかについて理解しておく必要があります。

組み込みアカウントとトークン認証を使用するように組織を構成すると、ポータルとサーバー ディレクトリで使用するのと同じ管理アカウントと URL を用いてスクリプトを使用できます。 組織で組織固有のログインと Web 層認証を構成する場合、スクリプトで Web Adaptor をバイパスすることをおすすめします。 Portal for ArcGIS のインストール後に作成した初期管理者アカウントを使用してポータルにアクセスするか、ArcGIS Server のインストール後に作成したプライマリ サイト管理者アカウントを使用してサーバーにアクセスします。

いずれの場合もトークンが返されます。トークンは、特定のタイプのアクションの実行が許可されたポータルまたはサーバーと通信するための、特殊な文字列です。 送信する Web サービス リクエストにこのトークンを含める必要があります。

次の 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)

トークンは無期限に有効ではなく、タイム アウトするように設計されています。したがって、悪意のあるユーザーにより盗まれて無期限に使用されることはありません。 通常は、スクリプトを実行するたびに (リクエストを送信するたびにではなく)、新しいトークンをリクエストする必要があります。 例外的に、スクリプトの実行が終了する前に、トークンの有効期限が切れる場合があります。 有効期限が切れたトークンがリクエストに含まれている場合、サーバーからの応答には、トークンの有効期限が切れていることを示すエラーが含まれます。 これが発生した場合、トークンを更新してから、引き続きスクリプトを実行してください。

リクエストと応答の操作

Web サービス リクエストを送信するには、実行するアクションの URL とそのアクションに必要なパラメーターを作成する必要があります。 必要なパラメーターの 1 つは、上記のように生成されたトークンです。

すべての管理アクションでは Web サービス応答が生成されます。通常、これは JavaScript Object Notation (JSON) 形式でリクエストされます。 Python などのスクリプト言語には、JSON 応答を解析または読み取ることができるライブラリがあります。 リクエストが正常に処理されたかどうかを確認するために、単に HTTP ステータス コードを取得したい場合があります (たとえば、コード 200 は OK を意味します)。 また、応答には、さらに解析と検証を行う必要があると思わせるログ メッセージなどのデータが含まれる場合もあります。