Skip To Content

Écriture de scripts avec l’ArcGIS REST API

L’administration d’ArcGIS Enterprise peut s’effectuer exclusivement par l’intermédiaire de demandes adressées à ArcGIS REST API. Lorsque vous exécutez des tâches administratives par l’intermédiaire de votre serveur ou portail, les appels adressés à l’API le sont en arrière-plan. Pour écrire des scripts qui administrent ArcGIS Enterprise, vous devez choisir un langage de script permettant de créer des URL, d’élaborer des demandes HTTP et d’analyser les réponses HTTP. Les exemples utilisés dans ce système d’aide font appel au langage Python.

L’utilisation de l’API ne nécessite aucun logiciel Esri sur la machine à partir de laquelle vous exécutez le script. Vous avez simplement besoin d'un environnement dans lequel il est possible d'adresser des requêtes HTTP à votre portail.

Prise en main

Pour utiliser l’ArcGIS REST API, vous devez créer une requête HTTP pour l’opération que vous souhaitez effectuer et inclure les paramètres requis pour cette opération. Vous pouvez vous familiariser avec les opérations d’administration disponibles et leurs paramètres requis en naviguant parmi les répertoires permettant d’interagir avec l’ArcGIS REST API. Les API REST d’ArcGIS Enterprise sont présentées dans deux répertoires de portail et deux répertoires de serveur.

Utiliser les ArcGIS REST API

Les répertoires de portail et de serveur offrent des vues interactives des ressources ArcGIS REST API pour votre organisation. Ces répertoires peuvent vous aider à comprendre comment rédiger des scripts d’administration pour votre organisation.

Le format des URL permettant d’accéder aux répertoires du portail est le suivant :

Le format des URL permettant d’accéder aux répertoires du serveur est le suivant :

Pour vous familiariser avec ArcGIS REST API, utilisez l’un des répertoires pour effectuer une tâche administrative. Prenez note des paramètres que vous êtes invité à saisir et examinez l'URL indiquée dans la barre d'adresse du navigateur lorsque vous effectuez la demande auprès du serveur. Les outils de développement Web, tels que Fiddler ou Firebug, peuvent se révéler utiles pour visualiser tout le contenu de la demande et de la réponse. Ces informations s’avèrent précieuses lorsque vous tentez de créer vos propres demandes HTTP d’administration à l’aide de Python ou d’un autre langage de script.

Générer et utiliser un jeton dans des scripts

Si vous administrez votre organisation par l’intermédiaire du portail, du serveur ou de leurs répertoires respectifs, vous devez indiquer le nom d’utilisateur et le mot de passe d’un compte avec les privilèges appropriés. Le même concept est d'application lors de l'écriture de scripts. Toutefois, vous devez comprendre le processus d’authentification lorsque vous utilisez des scripts pour administrer votre organisation.

Si votre organisation est configurée pour utiliser des comptes intégrés et l’authentification à base de jetons, vous pouvez utiliser les mêmes comptes administratifs et URL pour vos scripts que ceux des répertoires du portail et du serveur. Si votre organisation est configurée avec des identifiants de connexion d’organisation et une authentification au niveau du Web, il est recommandé de faire en sorte que vos scripts ignorent le Web Adaptor. Utilisez le compte d’administrateur initial créé après l’installation de Portal for ArcGIS pour accéder au portail ou utilisez le compte administrateur principal du site créé après l’installation d’ArcGIS Server pour accéder au serveur.

Dans les deux cas, vous recevez un jeton constitué d’une chaîne de caractères spécifique indiquant au portail auprès duquel vous vous êtes authentifié qu'il doit exécuter certains types d'opérations. Vous devez inclure ce jeton dans les demandes de service Web adressées au portail.

La fonction Python ci-dessous demande un jeton de portail. L’URL du portail, le nom d’utilisateur et le mot de passe sont fournis comme arguments.

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)

La fonction Python ci-dessous demande un jeton de serveur. L’URL du serveur, le nom d’utilisateur et le mot de passe sont fournis comme arguments.

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)

La durée du jeton est limitée pour éviter qu'il ne soit volé ou utilisé indéfiniment par un utilisateur malintentionné. Habituellement, vous devez demander un nouveau jeton à chaque exécution de votre script (mais pas chaque fois que vous effectuez une demande). Dans certains cas exceptionnels, les jetons peuvent expirer avant la fin de l’exécution de votre script. Si votre requête comprend un jeton qui a expiré, la réponse du serveur est accompagnée d'une erreur qui vous le signale. Dans ce cas, actualisez votre jeton et poursuivez l’exécution de votre script.

Utilisation de demandes et de réponses

Pour effectuer une demande de service Web, vous devez formuler l'URL pour l'action à réaliser, ainsi que les paramètres requis qui lui sont associés. L’un des paramètres requis est un jeton semblable à celui généré ci-dessus.

Toutes les tâches administratives génèrent une réponse de service Web, laquelle fait généralement l'objet d'une demande au format JSON (JavaScript Object Notation). Les langages de script tels que Python contiennent des bibliothèques capables d’analyser, ou de lire, une réponse JSON. Dans certains cas, vous souhaitez simplement obtenir le code d’état HTTP afin de déterminer si votre demande a abouti (le code 200, par exemple, signifie une réussite). Parfois, il se peut que la réponse comporte des données, telles que des messages de consignation, que vous souhaitez soumettre à une analyse plus approfondie.