Снимок

Моментальный снимок — это ресурс, однозначно определенный по его имени. См. информацию для каждой операции.

Эта статья относится к API версии 2022-11-01-preview.

Operations

  • Получить
  • Вывод списка из нескольких значений
  • Создание
  • Архив и восстановление
  • Вывод списка пар "ключ-значение"

Необходимые компоненты

  • Все HTTP-запросы должны пройти проверку подлинности. См. раздел об аутентификации.
  • Все HTTP-запросы должны предоставлять явный запрос api-version. См. раздел о версионировании.

Синтаксис

Snapshot

{
    "etag": [string],
    "name": [string],
    "status": [string, enum("provisioning", "ready", "archived", "failed")],
    "filters": [array<SnapshotFilter>],
    "composition_type": [string, enum("key", "key_label")],
    "created": [datetime ISO 8601],
    "size": [number, bytes],
    "items_count": [number],
    "tags": [object with string properties],
    "retention_period": [number, timespan in seconds],
    "expires": [datetime ISO 8601]
}

SnapshotFilter

{
  "key": [string],
  "label": [string]
}

Получение моментального снимка

Требуется: {name}, {api-version}

GET /snapshots/{name}?api-version={api-version}

Ответы:

HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.snapshot+json; charset=utf-8
Last-Modified: Mon, 03 Mar 2023 9:00:03 GMT
ETag: "4f6dd610dd5e4deebc7fbaef685fb903"
Link: </kv?snapshot=prod-2023-03-20&api-version={api-version}>; rel="items"
{
  "etag": "4f6dd610dd5e4deebc7fbaef685fb903",
  "name": "prod-2023-03-20",
  "status": "ready",
  "filters": [
      {
          "key": "*",
          "label": null
      }
  ],
  "composition_type": "key",
  "created": "2023-03-20T21:00:03+00:00",
  "size": 2000,
  "items_count": 4,
  "tags": {
    "t1": "value1",
    "t2": "value2"
  },
  "retention_period": 7776000
}

Если моментальный снимок с указанным именем не существует, возвращается следующий ответ:

HTTP/1.1 404 Not Found

Получить (условно)

Чтобы улучшить кэширование клиента, используйте заголовки запроса If-Match или If-None-Match. Аргумент etag является частью представления моментального снимка. Дополнительные сведения см. в разделах 14.24 и 14.26.

Следующий запрос извлекает моментальный снимок, только если текущее представление не соответствует указанному:etag

GET /snapshot/{name}?api-version={api-version} HTTP/1.1
Accept: application/vnd.microsoft.appconfig.snapshot+json;
If-None-Match: "{etag}"

Ответы:

HTTP/1.1 304 NotModified

or

HTTP/1.1 200 OK

Вывод списка моментальных снимков

Необязательный: name (если он не указан, он подразумевает любое имя.) Необязательный: status (если он не указан, он подразумевает любое состояние.)

GET /snapshots?name=prod-*&api-version={api-version} HTTP/1.1

Ответ.

HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.snapshotset+json; charset=utf-8

Дополнительные параметры см. в разделе "Фильтрация" далее в этой статье.

Разбиение на страницы

Если число возвращаемых элементов превышает предельное значение, то результат разбивается на страницы. Следуйте дополнительным заголовкам ответа Link и используйте rel="next" для навигации. Иначе содержимое предоставляет следующую ссылку в форме свойства @nextLink. Связанный URI включает аргумент api-version.

GET /snapshots?api-version={api-version} HTTP/1.1

Ответ.

HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.snapshotset+json; charset=utf-8
Link: <{relative uri}>; rel="next"
{
    "items": [
        ...
    ],
    "@nextLink": "{relative uri}"
}

Фильтрация

Поддерживается сочетание фильтров name и status. Используйте необязательные параметры строки запроса name и status.

GET /snapshots?name={name}&status={status}&api-version={api-version}

Поддерживаемые фильтры

Фильтр имен Действие
name не указан или имеет значение name=* Соответствует моментальным снимкам с любым именем
name=abc Соответствует моментальному снимку с именем abc
name=abc* Сопоставляет моментальные снимки с именами, начинающимися с abc
name=abc,xyz Соответствует моментальным снимкам с именами abc или xyz (ограничено 5 CSV)
Фильтр состояния Действие
status не указан или имеет значение status=* Соответствует моментальным снимкам с любым состоянием
status=ready Соответствует моментальным снимкам с состоянием готовности
status=ready,archived Соответствует моментальным снимкам с готовым или архивным состоянием (не более 5 CSV)

Зарезервированные знаки

*, \, ,

Если зарезервированный знак является частью значения, он должен быть экранирован с помощью \{Reserved Character}. Незарезервированные знаки также могут быть экранированы.

Проверка фильтра

Если возникает ошибка проверки фильтра, ответом является HTTP 400 со сведениями об ошибке:

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json; charset=utf-8
{
  "type": "https://azconfig.io/errors/invalid-argument",
  "title": "Invalid request parameter '{filter}'",
  "name": "{filter}",
  "detail": "{filter}(2): Invalid character",
  "status": 400
}

Примеры

  • Все

    GET /snapshots?api-version={api-version}
    
  • Имя моментального снимка начинается с abc

    GET /snapshot?name=abc*&api-version={api-version}
    
  • Имя моментального снимка начинается с abc и состояние равно готово или архивировано

    GET /snapshot?name=abc*&status=ready,archived&api-version={api-version}
    

Поля со сведениями о запросах

Используйте необязательный параметр строки запроса $select и укажите список запрошенных полей, разделенный запятыми. Если параметр $select пропущен, ответ содержит набор по умолчанию.

GET /snapshot?$select=name,status&api-version={api-version} HTTP/1.1

Создать моментальный снимок

parameters

Имя свойства Обязательное поле Default value Проверка
name yes Н/Д Длина
     максимум: 256
фильтры yes Н/Д Рассчитывать
     минимум: 1
     максимум: 3
filters[<index>].key yes Н/Д
tags no {}
filters[<index>].label no null Фильтры меток с несколькими совпадениями (например, "*", "запятая", разделенные") не поддерживаются с типом композиции key.
composition_type no key
retention_period no Уровень "Стандартный"
     2592000 (30 дней)
Бесплатный уровень
     604800 (7 дней)
Уровень "Стандартный"
     минимум: 3600 (1 час)
     максимум: 7776000 (90 дней)
Бесплатный уровень
     минимум: 3600 (1 час)
     максимум: 604800 (7 дней)
PUT /snapshot/{name}?api-version={api-version} HTTP/1.1
Content-Type: application/vnd.microsoft.appconfig.snapshot+json
{
  "filters": [                        // required
    {
      "key": "app1/*",                // required
      "label": "prod"                 // optional
    }
  ],
  "tags": {                           // optional
    "tag1": "value1",
    "tag2": "value2",
  },
  "composition_type": "key",          // optional
  "retention_period": 2592000         // optional
}

Ответы:

HTTP/1.1 201 Created
Content-Type: application/vnd.microsoft.appconfig.snapshot+json; charset=utf-8
Last-Modified: Tue, 05 Dec 2017 02:41:26 GMT
ETag: "4f6dd610dd5e4deebc7fbaef685fb903"
Operation-Location: {appConfigurationEndpoint}/operations?snapshot={name}&api-version={api-version}
{
  "etag": "4f6dd610dd5e4deebc7fbaef685fb903",
  "name": "{name}",
  "status": "provisioning",
  "filters": [
      {
          "key": "app1/*",
          "label": "prod"
      }
  ],
  "composition_type": "key",
  "created": "2023-03-20T21:00:03+00:00",
  "size": 2000,
  "items_count": 4,
  "tags": {
    "t1": "value1",
    "t2": "value2"
  },
  "retention_period": 2592000
}

Состояние созданного моментального снимка будет "подготовка". После полной подготовки моментального снимка состояние будет обновлено до "готово". Клиенты могут провести опрос моментального снимка, чтобы дождаться готовности моментального снимка, прежде чем перечислять связанные значения ключей. Чтобы запросить дополнительные сведения об операции, см . раздел создания моментального снимка опроса.

Если моментальный снимок уже существует, вы получите следующий ответ:

HTTP/1.1 409 Conflict
Content-Type: application/problem+json; charset=utf-8
{
    "type": "https://azconfig.io/errors/already-exists",
    "title": "The resource already exists.",
    "status": 409,
    "detail": ""
}

Создание моментального снимка опроса

Ответ запроса на создание моментального снимка возвращает Operation-Location заголовок.

Ответы:

HTTP/1.1 201 Created
...
Operation-Location: {appConfigurationEndpoint}/operations?snapshot={name}&api-version={api-version}

Состояние операции подготовки моментальных снимков можно найти в URI, содержащейся в Operation-Location. Клиенты могут опрашивать этот объект состояния, чтобы обеспечить подготовку моментального снимка перед перечислением связанных с ним значений ключей.

GET {appConfigurationEndpoint}/operations?snapshot={name}&api-version={api-version}

Ответ.

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
    "id": "{id}",
    "status": "Succeeded",
    "error": null
}

Если во время подготовки моментального снимка возникает какая-либо ошибка, error свойство будет содержать сведения, описывающие ошибку.

{
    "id": "{name}",
    "status": "Failed",
    "error": {
      "code": "QuotaExceeded",
      "message": "The allotted quota for snapshot creation has been surpassed."
    }
}

Архив (исправление)

Моментальный снимок в ready состоянии можно архивировать. Архивный моментальный снимок будет назначен дате окончания срока действия, исходя из периода хранения, установленного во время его создания. После прохождения срока действия моментальный снимок будет окончательно удален. В любое время до истечения срока действия элементы моментального снимка по-прежнему могут быть перечислены.

Архивация моментального снимка, который уже archived не влияет на моментальный снимок.

  • Обязательный: {name}, {status}{api-version}
PATCH /snapshots/{name}?api-version={api-version} HTTP/1.1
Content-Type: application/vnd.microsoft.appconfig.snapshot+json
{
  "status": "archived"
}

Ответ. Возврат архивного моментального снимка

HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.snapshot+json; charset=utf-8
...
{
  "etag": "33a0c9cdb43a4c2cb5fc4c1feede1c68",
  "name": "{name}",
  "status": "archived",
  ...
  "expires": "2023-08-11T21:00:03+00:00"
}

Архивация моментального снимка, который в настоящее время находится в provisioning состоянии или failed является недопустимой операцией.

Ответ.

HTTP/1.1 409 Conflict
Content-Type: application/problem+json; charset="utf-8"
{
    "type": "https://azconfig.io/errors/invalid-state",
    "title": "Target resource state invalid.",
    "detail": "The target resource is not in a valid state to perform the requested operation.",
    "status": 409
}

Восстановление (исправление)

Моментальный снимок в archived состоянии можно восстановить. После восстановления моментального снимка срок действия моментального снимка удаляется.

Восстановление моментального снимка, которое уже ready не влияет на моментальный снимок.

  • Обязательный: {name}, {status}{api-version}
PATCH /snapshots/{name}?api-version={api-version} HTTP/1.1
Content-Type: application/vnd.microsoft.appconfig.snapshot+json
{
  "status": "ready"
}

Ответ. Возврат восстановленного моментального снимка

HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.snapshot+json; charset=utf-8
...
{
  "etag": "90dd86e2885440f3af9398ca392095b9",
  "name": "{name}",
  "status": "ready",
  ...
}

Восстановление моментального снимка, который в настоящее время находится в provisioning состоянии, failed является недопустимой операцией.

Ответ.

HTTP/1.1 409 Conflict
Content-Type: application/problem+json; charset="utf-8"
{
    "type": "https://azconfig.io/errors/invalid-state",
    "title": "Target resource state invalid.",
    "detail": "The target resource is not in a valid state to perform the requested operation.",
    "status": 409
}

Архивация и восстановление моментального снимка (условно)

Чтобы избегать состояний гонки, используйте заголовки запроса If-Match или If-None-Match. Аргумент etag является частью представления моментального снимка. Если If-Match или If-None-Match опущены, операция является безусловной.

Следующий ответ обновляет ресурс только в том случае, если текущее представление соответствует указанному etag:

PATCH /snapshots/{name}?api-version={api-version} HTTP/1.1
Content-Type: application/vnd.microsoft.appconfig.snapshot+json
If-Match: "4f6dd610dd5e4deebc7fbaef685fb903"

Следующий ответ обновляет ресурс, только если текущее представление не соответствует указанному etag:

PATCH /snapshots/{name}?api-version={api-version} HTTP/1.1
Content-Type: application/vnd.microsoft.appconfig.snapshot+json;
If-None-Match: "4f6dd610dd5e4deebc7fbaef685fb903"

Ответы

HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.snapshot+json; charset=utf-8
...

or

HTTP/1.1 412 PreconditionFailed

Вывод списка значений ключа моментального снимка

Требуется: {name}, {api-version}

GET /kv?snapshot={name}&api-version={api-version}

Примечание.

Попытка вывести список элементов моментального снимка, который не указан в ready состоянии, archived приведет к пустому ответу списка.

Поля со сведениями о запросах

Используйте необязательный параметр строки запроса $select и укажите список запрошенных полей, разделенный запятыми. Если параметр $select пропущен, ответ содержит набор по умолчанию.

GET /kv?snapshot={name}&$select=key,value&api-version={api-version} HTTP/1.1