Gestionar configuraciones de servicios

En esta página se describe cómo gestionar las configuraciones de servicios mediante Service Infrastructure.

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

Los métodos de la API Service Management que suelen usarse para gestionar las configuraciones de servicios son los siguientes:

Antes de empezar

Para ejecutar los ejemplos de esta guía, primero debes seguir las instrucciones para completar la configuración inicial en Primeros pasos con la API Service Management.

Enviar archivos de origen de configuración de servicio

Para actualizar la configuración de tu servicio, debes enviar una lista de archivos de origen de configuración de servicio a la API Service Management. El servidor los compilará en una configuración de servicio validada.

Los archivos de origen pueden tener los siguientes formatos:

La API Service Management no acepta archivos .proto. Debes generar descriptores protobuf a partir de tus archivos .proto antes de enviarlos. Puedes usar el siguiente comando para generar los archivos de descriptor:

$ protoc hello.proto --include_source_info --include_imports --descriptor_set_out=service.descriptors *.proto

La forma recomendada de enviar archivos de origen de configuración de servicios es usar la CLI de gcloud.

$ gcloud auth login
$ gcloud endpoints services deploy [a list of service configuration source files]

También puede llamar directamente a la API Service Management para enviar archivos de origen. 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 hacer 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.",
  ...
}

Generar informes de configuración de servicios

Antes de enviar una nueva versión de la configuración de un servicio, puede llamar al método services.generateConfigReport para obtener un informe de los cambios relativos a una versión de la configuración del servicio. Puede especificar la versión con la que se va a comparar mediante el campo old_config de la solicitud o simplemente omitir este campo para generar un informe con la versión más reciente de la configuración del servicio.

Si el nuevo archivo de configuración de OpenAPI se llama 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 quiere generar un informe de una versión de configuración específica, puede ejecutar el siguiente comando:

# 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

Obtener versiones anteriores de la configuración del servicio

La API Service Management mantiene un historial de versiones de las configuraciones de servicio enviadas. Puedes enumerarlas o recuperar una versión específica con los métodos services.configs.list o services.configs.get, como se muestra 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",
  ...
}