Блокировки

В этом API (версия 1.0) реализована семантика блокировки и разблокировки для ресурса типа "ключ-значение". Поддерживаются следующие операции:

  • установка блокировки;
  • снятие блокировки.

Если параметр label указан, он должен быть явным значением метки (не подстановочным знаком). Для всех операций это необязательный параметр. Если он не указан, подразумевается любая метка.

Предварительные требования

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

Блокировка пары "ключ-значение"

  • Требуется: {key}, {api-version}
  • Необязательно. label
PUT /locks/{key}?label={label}&api-version={api-version} HTTP/1.1

Ответы:

HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.kv+json; charset=utf-8"
{
  "etag": "4f6dd610dd5e4deebc7fbaef685fb903",
  "key": "{key}",
  "label": "{label}",
  "content_type": null,
  "value": "example value",
  "created": "2017-12-05T02:41:26.4874615+00:00",
  "locked": true,
  "tags": []
}

Если пара "ключ-значение" не существует, возвращается следующий ответ:

HTTP/1.1 404 Not Found

Разблокировка пары "ключ-значение"

  • Требуется: {key}, {api-version}
  • Необязательно. label
DELETE /locks/{key}?label={label}?api-version={api-version} HTTP/1.1

Ответы:

HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.kv+json; charset=utf-8"
{
  "etag": "4f6dd610dd5e4deebc7fbaef685fb903",
  "key": "{key}",
  "label": "{label}",
  "content_type": null,
  "value": "example value",
  "created": "2017-12-05T02:41:26.4874615+00:00",
  "locked": true,
  "tags": []
}

Если пара "ключ-значение" не существует, возвращается следующий ответ:

HTTP/1.1 404 Not Found

Условная блокировка и разблокировка

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

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

PUT|DELETE /locks/{key}?label={label}&api-version={api-version} HTTP/1.1
If-Match: "4f6dd610dd5e4deebc7fbaef685fb903"

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

PUT|DELETE /kv/{key}?label={label}&api-version={api-version} HTTP/1.1
If-None-Match: "4f6dd610dd5e4deebc7fbaef685fb903"