Используйте API обнаружения

Этот документ предназначен для разработчиков, желающих создавать клиентские библиотеки, плагины для IDE и другие инструменты для взаимодействия с API Google. Служба обнаружения API Google позволяет делать всё вышеперечисленное, предоставляя машиночитаемые метаданные о других API Google через простой API. Данное руководство содержит обзор каждого раздела документа Discovery, а также полезные советы по его использованию.

Все вызовы API представляют собой неаутентифицированные запросы REST на основе JSON, использующие SSL, — другими словами, URL-адреса начинаются с https .

Формат документа Discovery

В этом разделе представлен обзор документа Discovery.

Во всех примерах ниже используется документ Discovery из API использования сервисов . Вы можете загрузить документ Discovery для API использования сервисов, выполнив следующий GET запрос:

GET https://serviceusage.googleapis.com/$discovery/rest?version=v1

Формат документа Discovery включает информацию, которая относится к шести основным категориям:

Каждый из этих разделов документа Discovery описан ниже.

Описание базового API

Документ Discovery содержит набор свойств, специфичных для API. Эти свойства не обязательно указаны в указанном порядке или в одном и том же разделе документа Discovery:

"id": "serviceusage:v1",
"canonicalName": "Service Usage",
"revision": "20240331",
"servicePath": "",
"baseUrl": "https://serviceusage.googleapis.com/",
"kind": "discovery#restDescription",
"description": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.",
"ownerDomain": "google.com",
"version_module": true,
"version": "v1",
"fullyEncodeReservedExpansion": true,
"name": "serviceusage",
"title": "Service Usage API",
"discoveryVersion": "v1",
"rootUrl": "https://serviceusage.googleapis.com/",
"protocol": "rest"

Эти свойства уровня API включают сведения о конкретной версии API, включая name , version , title и description . protocol всегда имеет фиксированное значение rest , поскольку служба обнаружения API поддерживает только RESTful-методы доступа к API.

Поле servicePath указывает префикс пути для данной конкретной версии API.

Аутентификация

Раздел auth содержит подробную информацию об областях авторизации OAuth 2.0 для API. Подробнее об использовании областей авторизации с OAuth 2.0 см. в статье «Использование OAuth 2.0 для доступа к API Google» .

Раздел auth содержит вложенные разделы oauth2 и scopes . Раздел scopes представляет собой сопоставление ключ/значение значения области действия с более подробной информацией об этой области действия:

"auth": {
  "oauth2": {
    "scopes": {
      "https://www.googleapis.com/auth/cloud-platform": {
        "description": "See, edit, configure, and delete your Google Cloud data and see the email address for your Google Account."
      },
      "https://www.googleapis.com/auth/cloud-platform.read-only": {
        "description": "View your data across Google Cloud services and see the email address of your Google Account"
      },
      "https://www.googleapis.com/auth/service.management": {
        "description": "Manage your Google API service configuration"
      }
    }
  }
}

Раздел auth определяет только области действия для конкретного API. Чтобы узнать, как эти области действия связаны с методом API, обратитесь к разделу «Методы» ниже.

Ресурсы и схемы

Операции API работают с объектами данных, называемыми resources . Документ Discovery построен на концепции ресурсов. Каждый документ Discovery содержит раздел resources верхнего уровня, в котором сгруппированы все ресурсы, связанные с API. Например, API использования сервисов содержит ресурс services и ресурс operations в resources верхнего уровня:

"resources": {
  "services": {
    // Methods associated with the services resource
  }
  "operations": {
    // Methods associated with the operations resource
  }
}

Внутри каждого раздела ресурсов находятся методы, связанные с этим ресурсом. Например, API использования сервисов содержит шесть методов, связанных с ресурсом services : get , enable , disable , batchGet , batchEnable и list .

Схемы отображают, как выглядят ресурсы в API. В каждом документе Discovery есть раздел schemas верхнего уровня, содержащий пару «имя/значение» идентификатора схемы для объекта. Идентификаторы схем уникальны для каждого API и используются для однозначной идентификации схемы в разделе methods документа Discovery. Например, вот несколько схем из документа Service Usage API Discovery:

"schemas": {
  "Method": {
    // JSON schema of the Method resource
  },
  "Authentication": {
    // JSON schema of the Authentication resource
  },
  "RubySettings": {
    // JSON schema of the RubySettings resource
  },
  "EnableServiceResponse": {
   // JSON schema of the EnableServiceResponse resource
  }
}

Служба обнаружения API использует схему JSON Schema draft-03 для представления схемы. Ниже приведён фрагмент JSON Schema для ресурса EnableServiceResponse , а также служба GoogleApiServiceusagev1Service , на которую он ссылается. Наряду с этими схемами представлена часть фактического ответа на запрос на включение API Pub/Sub ( pubsub.googleapis.com ).

Схема JSON ресурса EnableServiceResponse : Фактический ответ для включения услуги:
"EnableServiceResponse": {
  "id": "EnableServiceResponse",
  "description": "Response message for the `EnableService` method. This response message is assigned to the `response` field of the returned Operation when that operation is done.",
  "properties": {
    "service": {
      "description": "The new state of the service after enabling.",
      "$ref": "GoogleApiServiceusageV1Service"
    }
  },
  "type": "object"
},
"GoogleApiServiceusageV1Service": {
  "description": "A service that is available for use by the consumer.",
  "properties": {
    "config": {
      "$ref": "GoogleApiServiceusageV1ServiceConfig",
      "description": "The service configuration of the available service. Some fields may be filtered out of the configuration in responses to the `ListServices` method. These fields are present only in responses to the `GetService` method."
    },
    "name": {
      "type": "string",
      "description": "The resource name of the consumer and service. A valid name would be: - projects/123/services/serviceusage.googleapis.com"
    },
    "state": {
      "enumDescriptions": [
        "The default value, which indicates that the enabled state of the service is unspecified or not meaningful. Currently, all consumers other than projects (such as folders and organizations) are always in this state.",
        "The service cannot be used by this consumer. It has either been explicitly disabled, or has never been enabled.",
        "The service has been explicitly enabled for use by this consumer."
      ],
      "description": "Whether or not the service has been enabled for use by the consumer.",
      "type": "string",
      "enum": [
        "STATE_UNSPECIFIED",
        "DISABLED",
        "ENABLED"
      ]
    },
    "parent": {
      "type": "string",
      "description": "The resource name of the consumer. A valid name would be: - projects/123"
    }
  },
  "id": "GoogleApiServiceusageV1Service",
  "type": "object"
}
"response": {
  "@type": "type.googleapis.com/google.api.serviceusage.v1.EnableServiceResponse",
  "service": {
    "name": "projects/232342569935/services/pubsub.googleapis.com",
    "config": {
      "name": "pubsub.googleapis.com",
      "title": "Cloud Pub/Sub API",
      "documentation": {
        "summary": "Provides reliable, many-to-many, asynchronous messaging between applications.\n"
      },
      "quota": {},
      "authentication": {},
      "usage": {
        "requirements": [
          "serviceusage.googleapis.com/tos/cloud"
        ]
      },
      "monitoring": {}
    },
    "state": "ENABLED",
    "parent": "projects/232342569935"
  }
}

Поля, выделенные жирным шрифтом, показывают соответствие между схемой JSON и фактическим ответом.

Как показано в этом примере, схемы могут содержать ссылки на другие схемы. При создании клиентской библиотеки это может помочь вам эффективно моделировать объекты API в классах модели данных. В приведённом выше примере EnableServiceResponse свойство service — это ссылка на схему с идентификатором GoogleApiServiceusageV1Service , другую схему из документа Service Usage API Discovery. Вы можете заменить свойство GoogleApiServiceusageV1Service в ресурсе EnableServiceResponse значением схемы GoogleApiServiceusageV1Service (обратите внимание, что синтаксис $ref взят из спецификации JSON Schema ).

Методы также могут ссылаться на схемы при указании тел запросов и ответов. Подробнее см. в разделе «Методы» .

Методы

Основу документа Discovery составляют методы. Методы — это операции, которые можно выполнять с API. Раздел methods можно найти в различных разделах документа Discovery, в том числе на верхнем уровне (который мы называем методами уровня API) и на уровне resources .

"methods": {
  // API-level methods
}
"resources": {
  "resource1": {
    "methods": {
      // resource-level methods
    }
    "resources": {
      "nestedResource": {
        "methods": {
          // methods can even be found in nested-resources
        }
      }
    }
  }
}

Хотя API может иметь методы уровня API, ресурс должен иметь раздел methods .

Каждый раздел methods представляет собой сопоставление «ключ-значение» между названием метода и другими сведениями об этом методе. В примере ниже описаны три метода: get , enable и disable .

"methods": {
  "get": { //details about the "get" method },
  "enable": { //details about the "enable" method },
  "disable": { //details about the "disable" method }
}

Наконец, в разделе каждого метода подробно описываются его различные свойства. Вот пример метода enable :

"enable": {
  "path": "v1/{+name}:enable",
  "request": {
    "$ref": "EnableServiceRequest"
  },
  "parameterOrder": [
    "name"
  ],
  "id": "serviceusage.services.enable",
  "response": {
    "$ref": "Operation"
  },
  "description": "Enable a service so that it can be used with a project.",
  "httpMethod": "POST",
  "flatPath": "v1/{v1Id}/{v1Id1}/services/{servicesId}:enable",
  "scopes": [
    "https://www.googleapis.com/auth/cloud-platform",
    "https://www.googleapis.com/auth/service.management"
  ],
  "parameters": {
    "name": {
      "location": "path",
      "description": "Name of the consumer and service to enable the service on. The `EnableService` and `DisableService` methods currently only support projects. Enabling a service requires that the service is public or is shared with the user enabling the service. An example name would be: `projects/123/services/serviceusage.googleapis.com` where `123` is the project number.",
      "required": true,
      "type": "string",
      "pattern": "^[^/]+/[^/]+/services/[^/]+$"
    }
  }
},

Этот раздел содержит общие сведения о методе, такие как уникальный ID для идентификации метода, используемый httpMethod и path к методу (подробнее об использовании свойства path для вычисления полного URL метода см. в разделе «Составление запроса »). Помимо этих общих свойств метода, есть несколько свойств, связывающих метод с другими разделами документа Discovery:

Области применения

Раздел auth , определённый ранее в этой документации, содержит информацию обо всех областях действия, поддерживаемых конкретным API. Если метод поддерживает одну из этих областей, у него будет массив scopes. В этом массиве есть одна запись для каждой области действия, поддерживаемой методом.

Обратите внимание, что выбор области действия аутентификации для использования в вашем приложении зависит от различных факторов, таких как вызываемые методы и параметры, передаваемые вместе с методом. Поэтому решение о выборе области действия остаётся за разработчиком. Discovery документирует только те области действия, которые допустимы для метода.

Запрос и ответ

Если метод содержит тело запроса или ответа, они документируются в разделах request или response соответственно. Например, для метода enable содержимое раздела request указывает, что запрос метода определён JSON-схемой с идентификатором EnableServiceRequest . Эту схему можно найти в разделе схем верхнего уровня.

Параметры

Если у метода есть параметры, которые должен указать пользователь, эти параметры документируются в разделе parameters на уровне метода. В этом разделе содержится сопоставление имени параметра по ключу и значению с более подробной информацией об этом параметре.

Например, для метода enable существует один параметр: name . Параметры могут указываться либо в path , либо в URL- query ; свойство location указывает, где клиентская библиотека должна разместить параметр.

Существует множество других свойств, описывающих параметр, включая type данных параметра (полезно для языков со строгой типизацией), required параметра и наличие перечисления. Подробнее об этих свойствах см. в справочной документации по этому API.

Порядок параметров

Клиентские библиотеки могут структурировать свои интерфейсы различными способами. Один из способов — создать метод с каждым параметром API в сигнатуре метода. Однако, поскольку JSON — неупорядоченный формат, программно сложно определить, как упорядочить параметры в сигнатуре метода. Массив parameterOrder обеспечивает фиксированный порядок параметров для выполнения запросов. В массиве имена каждого параметра перечислены в порядке их значимости; он может содержать как параметры пути, так и параметры запроса, но все параметры в массиве обязательны.

Загрузка медиа

Если метод поддерживает загрузку медиафайлов, таких как изображения, аудио или видео, то место и поддерживаемые протоколы загрузки этих медиафайлов описаны в разделе mediaUpload . В этом разделе содержится информация о поддерживаемых протоколах загрузки и о том, какие типы медиафайлов можно загружать.

Метод enable не содержит раздела mediaUpload . Однако типичный раздел mediaUpload может выглядеть следующим образом:

"supportsMediaUpload": true,
"mediaUpload": {
  "accept": [
    "image/*"
  ],
  "maxSize": "10MB",
  "protocols": {
    "simple": {
      "multipart": true,
      "path": "/upload/storage/v1beta1/b/{bucket}/o"
    },
    "resumable": {
      "multipart": true,
      "path": "/resumable/upload/storage/v1beta1/b/{bucket}/o"
    }
  }
}

В приведенном выше примере свойство supportsMediaUpload — это логическое значение, которое определяет, поддерживает ли метод загрузку медиафайлов. Если значение равно true, раздел mediaUpload содержит список типов медиафайлов, которые можно загрузить.

Свойство accept представляет собой список диапазонов медиафайлов , определяющих, какие MIME-типы допустимы для загрузки. Конечная точка, показанная в примере выше, принимает изображения любого формата.

Свойство maxSize определяет максимальный размер загружаемого файла. Значение — строка в единицах измерения: МБ, ГБ или ТБ. В приведённом выше примере максимальный размер загружаемого файла ограничен 10 МБ. Обратите внимание, что это значение не отражает оставшуюся квоту хранилища отдельного пользователя для данного API, поэтому даже если объём загружаемого файла меньше maxSize клиентская библиотека должна быть готова к обработке загружаемого файла, который может завершиться ошибкой из-за недостатка места.

В разделе protocols перечислены протоколы загрузки, поддерживаемые методом. simple протокол — это отправка медиа-данных в заданную конечную точку одним HTTP-запросом. resumable протокол подразумевает, что конечная точка, указанная в URI path , поддерживает протокол возобновляемой загрузки . Если свойство multipart равно true , то конечная точка принимает многокомпонентные загрузки, то есть и JSON-запрос, и медиа-данные можно объединить в тело mullipart/related и отправить вместе. Обратите внимание, что как simple , так и resumable протоколы могут поддерживать многокомпонентные загрузки.

Свойство path является шаблоном URI и должно быть расширено так же, как свойство path для метода, как описано в разделе Составление запроса .

Загрузка медиа

Если метод поддерживает загрузку мультимедиа, например изображений, аудио или видео, то это указывается параметром supportsMediaDownload :

"supportsMediaDownload": true,

При загрузке медиафайлов необходимо установить параметр запроса alt на media в URL-адресе запроса.

Если свойство useMediaDownloadService метода API имеет значение true , добавьте /download перед servicePath , чтобы избежать перенаправления. Например, путь загрузки будет /download/youtube/v3/captions/{id} если объединение servicePath и path/youtube/v3/captions/{id} . Рекомендуется создавать URL для загрузки медиафайлов с помощью /download даже если useMediaDownloadService имеет значение false.

Общие параметры

Документ Discovery верхнего уровня содержит свойство parameters . Этот раздел аналогичен разделу параметров для каждого метода , однако эти параметры можно применить к любому методу в API.

Например, методы get и list API использования сервиса могут иметь параметр prettyPrint в параметрах запроса, который форматирует ответ для всех этих методов в удобном для восприятия формате. Вот список распространённых параметров:

Параметр Значение Примечания Применимость
access_token Токен OAuth 2.0 для текущего пользователя.
alt

Формат данных для ответа.

  • Допустимые значения: json , atom , csv .
  • Значение по умолчанию: зависит от API.
  • Не все значения доступны для каждого API.
  • Применяется ко всем операциям для всех ресурсов.
callback Функция обратного вызова.
  • Имя функции обратного вызова JavaScript, которая обрабатывает ответ.
  • Используется в запросах JavaScript JSON-P .
fields Селектор, указывающий подмножество полей для включения в ответ.
  • Используйте для лучшей производительности.
key API-ключ. (ОБЯЗАТЕЛЬНО)
  • Обязательно, если вы не предоставляете токен OAuth 2.0.
  • Ваш ключ API идентифицирует ваш проект и предоставляет вам доступ к API, квоту и отчеты.
  • Получите ключ API вашего проекта из консоли API .
prettyPrint Возвращает ответ с отступами и переносами строк.
  • Возвращает ответ в удобочитаемом формате, если true .
  • Значение по умолчанию: зависит от API.
  • Если это значение равно false , это может уменьшить размер полезной нагрузки ответа, что может привести к повышению производительности в некоторых средах.
quotaUser Альтернатива userIp .
  • Позволяет применять квоты для каждого пользователя из серверного приложения, даже если IP-адрес пользователя неизвестен. Это может произойти, например, с приложениями, которые запускают задания cron в App Engine от имени пользователя.
  • Вы можете выбрать любую произвольную строку, однозначно идентифицирующую пользователя, но ее длина ограничена 40 символами.
  • Переопределяет userIp , если указаны оба.
  • Узнайте больше об использовании ограничений .
userIp IP-адрес конечного пользователя, для которого выполняется вызов API.
  • Позволяет применять квоты для каждого пользователя при вызове API из серверного приложения.
  • Узнайте больше об использовании ограничений .

Встроенная документация

Каждый документ Discovery аннотирован рядом полей description , которые содержат встроенную документацию по API. Поля description доступны для следующих элементов API:

  • API сам по себе
  • Области OAuth
  • Схемы ресурсов
  • Методы API
  • Параметры метода
  • Допустимые значения для определенных параметров

Эти поля особенно полезны, если вы хотите использовать службу обнаружения API Google для создания удобочитаемой документации для клиентской библиотеки, например, JavaDoc.