Ajouter la gestion des API

Cloud Endpoints Frameworks fournit des fonctionnalités de gestion des API comparables à celles fournies par le proxy Extensible Service Proxy (ESP) pour Cloud Endpoints. Endpoints Frameworks comprend une passerelle API intégrée qui intercepte toutes les requêtes et effectue les vérifications nécessaires (telles que l'authentification) avant de transmettre la requête au backend de l'API. Lorsque le backend répond, Endpoints Frameworks rassemble et consigne les données de télémétrie. Vous pouvez afficher les métriques de votre API sur la page Endpoints > Services de la console Google Cloud.

Les fonctionnalités de gestion des API disponibles dans Endpoints Frameworks comprennent :

Pour que votre API soit gérée par Endpoints, vous devez déployer un document OpenAPI décrivant votre API à l'aide de la version 2.0 de la spécification OpenAPI. Cette page explique comment générer et déployer un document OpenAPI permettant à Endpoints de gérer votre API.

Si vous n'ajoutez pas la gestion des API, votre API diffuse toujours les requêtes, mais elle n'apparaît pas sur la page Endpoints > Services de la console Google Cloud. De plus, les fonctionnalités fournies par Endpoints, telles que la journalisation, la surveillance et la définition de quotas, ne sont pas disponibles.

Pour ajouter la gestion des API à votre API, procédez comme suit :

  1. Configurez votre fichier pom.xml Maven ou build.gradle Gradle comme décrit dans la section Configurer les fichiers de build.

  2. Assurez-vous de définir l'ID du projet Google Cloud dans les fichiers de build.

    Maven

    Recherchez <endpoints.project.id>, puis remplacez YOUR_PROJECT_ID par l'ID de votre projet Google Cloud. Exemple :

    <endpoints.project.id>example-project-12345</endpoints.project.id>

    <endpoints.project.id>YOUR_PROJECT_ID</endpoints.project.id>

    Gradle

    1. Recherchez def projectId, puis remplacez YOUR_PROJECT_ID par l'ID de votre projet Google Cloud. Exemple :

      def projectId = 'example-project-12345'

    2. Assurez-vous que votre fichier build.gradle contient la tâche replaceProjectId, qui définit l'ID du projet dans les fichiers appengine-web.xml et web.xml.

      task replaceProjectId(type: Copy) {
          from 'src/main/webapp/WEB-INF/'
          include '*.xml'
          into "build/exploded-${archivesBaseName}/WEB-INF"
          expand(endpoints:[project:[id:projectId]])
          filteringCharset = 'UTF-8'
      }

  3. Dans le fichier web.xml de votre projet d'API, ajoutez la configuration du filtre de servlet de gestion des API :

    <!-- Add a filter that fetches the service config from service management. -->
    <filter>
        <filter-name>endpoints-api-configuration</filter-name>
        <filter-class>com.google.api.control.ServiceManagementConfigFilter</filter-class>
    </filter>
    
    <!-- Add a filter that performs Endpoints logging and monitoring. -->
    <filter>
        <filter-name>endpoints-api-controller</filter-name>
        <filter-class>com.google.api.control.extensions.appengine.GoogleAppEngineControlFilter</filter-class>
        <init-param>
            <param-name>endpoints.projectId</param-name>
            <param-value>${endpoints.project.id}</param-value>
        </init-param>
        <init-param>
            <param-name>endpoints.serviceName</param-name>
            <param-value>${endpoints.project.id}.appspot.com</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>endpoints-api-configuration</filter-name>
        <servlet-name>EndpointsServlet</servlet-name>
    </filter-mapping>
    
    <filter-mapping>
        <filter-name>endpoints-api-controller</filter-name>
        <servlet-name>EndpointsServlet</servlet-name>
    </filter-mapping>
  4. Modifiez la configuration de compilation de votre projet API :

    Maven

    1. Ajoutez les dépendances de gestion des API :

      <dependency>
        <groupId>com.google.endpoints</groupId>
        <artifactId>endpoints-management-control-appengine-all</artifactId>
        <version>1.0.14</version>
      </dependency>
    2. Incluez le plug-in que vous pouvez utiliser pour générer des bibliothèques clientes et le document OpenAPI openapi.json :

      <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>endpoints-framework-maven-plugin</artifactId>
        <version>2.1.0</version>
        <configuration>
          <!-- plugin configuration -->
          <hostname>${endpoints.project.id}.appspot.com</hostname>
        </configuration>
      </plugin>

    Gradle

    1. Ajoutez les dépendances de gestion des API :

      compile 'com.google.endpoints:endpoints-management-control-appengine:1.0.14'
      compile 'com.google.endpoints:endpoints-framework-auth:1.0.14'
    2. Déclarez la dépendance externe afin que le plug-in soit récupéré depuis Maven Central :

      classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:2.1.0'
    3. Utilisez le plug-in Endpoints Framework Gradle côté serveur, qui génère le document OpenAPI :

      apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
    4. Configurez le nom du service Endpoints :

      endpointsServer {
        // Endpoints Framework Plugin server-side configuration
        hostname = "${projectId}.appspot.com"
      }
  5. Après avoir modifié les dépendances, nettoyez le projet, puis créez votre API :

    Maven

        mvn clean
        mvn package

    Gradle

        gradle clean
        gradle build
  6. Générer le document OpenAPI, openapi.json :

    Maven

    mvn endpoints-framework:openApiDocs

    Gradle

    gradle endpointsOpenApiDocs
  7. Déployez le document OpenAPI :

     gcloud endpoints services deploy openapi.json
    

    Après le premier déploiement du service openapi.json, un service Endpoints est créé sous le nom YOUR_PROJECT_ID.appspot.com. Si l'opération réussit, une ligne semblable à la suivante affiche l'ID de configuration du service et le nom du service :

    Service Configuration 2017-02-13r0 uploaded for service example-project-12345.appspot.com
    

    Dans l'exemple précédent, 2017-02-13r0 est l'ID de configuration du service. L'ID de configuration du service se compose d'un horodatage, suivi d'un numéro de révision. Si vous déployez à nouveau openapi.json, le numéro de révision est incrémenté dans l'ID de configuration du service.

    Si vous devez afficher à nouveau l'ID de configuration du service, exécutez la commande suivante, mais remplacez YOUR_PROJECT_ID par l'ID de votre projet Google Cloud :

    gcloud endpoints configs list --service=YOUR_PROJECT_ID.appspot.com
    

    Vous pouvez créer votre propre document OpenAPI et le déployer plutôt que d'utiliser un document généré. Il vous suffit pour cela de remplacer l'élément openapi.json ci-dessus par le chemin d'accès à votre document OpenAPI. Pour en savoir plus sur la rédaction d'un document OpenAPI, consultez la page Présentation d'OpenAPI.

  8. Modifiez votre fichier appengine-web.xml pour définir la valeur d'une variable d'environnement :

    <env-variables>
        <env-var name="ENDPOINTS_SERVICE_NAME" value="${endpoints.project.id}.appspot.com" />
    </env-variables>

    Remplacez ${endpoints.project.id} par l'ID de votre projet Google Cloud. Exemple :

    <env-var name="ENDPOINTS_SERVICE_NAME" value="example-project-12345.appspot.com" />
    
  9. Redéployez votre application.

    Maven

    mvn appengine:deploy

    Gradle

    gradle appengineDeploy

  10. Envoyez quelques requêtes pour tester votre API.

  11. Pour afficher les métriques de l'API, ouvrez la page Endpoints > Services dans la console Google Cloud de votre projet:

    Accédez à la page Services Endpoints