Administra configuraciones de servicios

En esta página, se describe cómo administrar las configuraciones de servicios con Service Infrastructure.

Una configuración de servicio es una especificación que describe aspectos diferentes de un servicio administrado.

Los métodos de la API de Service Management generalmente implicados en la administración de las configuraciones de servicios son los siguientes:

Antes de comenzar

Para ejecutar los ejemplos en esta guía, asegúrate de seguir primero las instrucciones para completar la configuración inicial en Comienza a usar la API de Service Management.

Envía configuraciones de servicios

La API de Service Management ofrece dos formas de enviar configuraciones de servicios nuevas:

  • Utiliza Google API Compiler para generar la configuración de servicio compilada y, a continuación, invoca el método services.configs.create para enviarla.
  • Incorpora los archivos de origen de la configuración en la solicitud de la API y, a continuación, invoca el método services.configs.submit para enviar la configuración de servicio en su formato de origen. El método services.configs.submit compila el archivo de origen en el servidor.

Envía configuraciones de servicios compiladas

Si defines la API mediante búferes de protocolo, sigue las instrucciones de Google API Compiler para generar la configuración de servicio compilada en formato JSON.

Por ejemplo, si tienes la siguiente configuración y definición de servicio:

  • La definición del servicio .proto (hello.proto):

    syntax = "proto3";
    package google.example.hello.v1;
    option java_multiple_files = true;
    option java_outer_classname = "HelloProto";
    option java_package = "com.google.example.hello.v1";
    
    service HelloService {
      rpc GetHello(GetHelloRequest) returns (GetHelloResponse);
    }
    
    message GetHelloRequest {
      string name = 1;
    }
    
    message GetHelloResponse {
      string response = 1;
    }
    
  • La configuración de servicio (endpointsapis.yaml):

    type: google.api.Service
    config_version: 3
    name: endpointsapis.appspot.com
    title: Hello Endpoints API.
    apis:
    - name: google.example.hello.v1.HelloService
    producer_project_id: endpointsapis
    control:
      environment: servicecontrol.googleapis.com
    http:
      rules:
        - selector: google.example.hello.v1.HelloService.GetHello
          get: /v1/hello
    

Compila y envía el servicio con Google API Compiler de la siguiente manera:

# Generate protobuf descriptors.
$ protoc hello.proto --include_source_info --include_imports --descriptor_set_out=service.descriptors

# Compile service configuration. To setup the API compiler, see
# https://github.com/googleapis/api-compiler/
$ ./run.sh \
  --configs endpointsapis.yaml \
  --descriptor service.descriptors \
  --json_out service.json

# Invoke an API call to submit the compiled service configuration.
$ gcurl -X POST -d "@service.json" https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/configs
{
  "name": "endpointsapis.appspot.com",
  "title": "Hello Endpoints API",
  "id": "2016-07-16r0",
  ...
}

Envía configuraciones de servicios de origen

Si utilizas la especificación de OpenAPI para definir la superficie de tu API, debes enviar los archivos de origen directamente a la API de Service Management y el servidor los compilará en una configuración de servicio.

Por ejemplo, si tienes esta definición de OpenAPI (hello.json):

{
  "swagger": "2.0",
  "info": {
    "title": "Hello Endpoints API.",
    "description": "Hello Endpoints API.",
    "version": "v1"
  },
  "host": "endpointsapis.appspot.com",
  "schemes": ["https"],
  "paths": {
    "/v1/hello": {
      "get": {
        "tags": ["endpointsapis"],
        "operationId": "GetHello",
        "description": "Returns \"Hello\" with given name in the response.",
        "parameters": [
          {
            "name": "name",
            "description": "Name to be greeted.",
            "in": "query",
            "type": "string"
          }
        ],
        "responses": {
          "default": {
            "description": "Successful operation",
            "schema": {
              "$ref": "#/definitions/GetHelloResponse"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "GetHelloResponse": {
      "description": "Response message for GetHello method.",
      "type": "object",
      "properties": {
        "response": {
          "description": "String of \"Hello \" + `name` provided in the request.",
          "type": "string"
        }
      }
    }
  }
}

Puedes realizar la siguiente llamada a la API para enviar la especificación de OpenAPI:

$ gcurl -d "
{
  'serviceName': 'endpointsapis.appspot.com',
  'configSource':
  {
    'files': [
      {
        'fileContents': '$(base64 hello.json | sed ':a;N;$!ba;s/\n//g')',
        'fileType': 'OPEN_API_JSON',
        'filePath': 'hello.json',
      }
    ]
  }
}" https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/configs:submit
{
  "name": "operations/serviceConfigs.endpointsapis.appspot.com:a7651c15-9017-4274-b065-d644cc337847",
  "metadata": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.OperationMetadata",
    "resourceNames": [
      "services/endpointsapis.appspot.com/configs/2016-07-29r10"
    ],
    "startTime": "2016-07-29r10T23:59:21.081Z",
    "persisted": true
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.api.servicemanagement.v1.SubmitConfigSourceResponse",
    "serviceConfig": {
      "name": "endpointsapis.appspot.com",
      "title": "Hello Endpoints API.",
  ...
}

Genera informes de configuraciones de servicios

Antes de enviar una versión de configuración de servicio nueva, es posible que desees llamar al método services.generateConfigReport para obtener un informe de los cambios relacionados con una versión de configuración de servicio existente. Puedes especificar la versión que se comparará con el uso del campo old_config en la solicitud, o puedes simplemente omitir este campo para generar un informe con la última versión de configuración de servicio.

Si suponemos que el archivo de configuración nuevo de OpenAPI se denomina hello.json, puedes ejecutar el siguiente comando:

$ gcurl -d "
{
  'newConfig':
  {
    '@type': 'type.googleapis.com/google.api.servicemanagement.v1.ConfigSource',
    'files': [
      {
        'fileContents': '$(base64 hello.json | sed ':a;N;$!ba;s/\n//g')',
        'fileType': 'OPEN_API_JSON',
        'filePath': 'hello.json',
      }
    ],
  }
}" https://servicemanagement.googleapis.com/v1/services:generateConfigReport

Si deseas generar un informe para una versión de configuración específica, puedes ejecutar:

# Generate config report for the local configration from `/tmp/hello.json`
# and the configration version `2016-07-29r10`.
$ gcurl -d "
{
  'newConfig':
  {
    '@type': 'type.googleapis.com/google.api.servicemanagement.v1.ConfigSource',
    'files': [
      {
        'fileContents': '$(base64 hello.json | sed ':a;N;$!ba;s/\n//g')',
        'fileType': 'OPEN_API_JSON',
        'filePath': 'hello.json',
      }
    ],
  },
  'oldConfig':
  {
    '@type': 'type.googleapis.com/google.api.servicemanagement.v1.ConfigRef',
    'name': 'services/endpointsapis.appspot.com/configs/2016-07-29r10'
  }
}" https://servicemanagement.googleapis.com/v1/services:generateConfigReport

Obtén versiones de configuraciones de servicios anteriores

La API de Service Management conserva un historial de las versiones enviadas de las configuraciones de servicios. Puedes crear una lista de ellas o recuperar una versión específica con el uso de los métodos services.configs.list o services.configs.get, como se ilustra en los siguientes comandos:

# List the service configuration history for a managed service.
$ gcurl https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/configs
{
  "serviceConfigs": [
    {
      "name": "endpointsapis.appspot.com",
      "title": "Hello Endpoints API",
      "id": "2016-07-16r1",
      ...
    },
    {
      "name": "endpointsapis.appspot.com",
      "title": "Hello Endpoints API",
      "id": "2016-07-16r0",
      ...
    }
  ]
}

# Get a specific version of the service configuration for a managed service.
$ gcurl https://servicemanagement.googleapis.com/v1/services/endpointsapis.appspot.com/configs/2016-07-16r0
{
  "name": "endpointsapis.appspot.com",
  "title": "Hello Endpoints API",
  "id": "2016-07-16r0",
  ...
}
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Service Infrastructure