Valores clave
Un par clave-valor es un recurso identificado por una combinación única de key
+ label
. label
es opcional. Para hacer referencia de manera explícita a un par clave-valor sin etiqueta, use "\0" (se codifica para URL como %00
). Revise los detalles para cada operación.
Operations
- Obtener
- Enumerar varios
- Set
- Eliminar
Requisitos previos
- Se deben autenticar todas las solicitudes HTTP. Consulte la sección Autenticación.
- Todas las solicitudes HTTP deben proporcionar parámetros
api-version
explícitos. Consulte la sección Control de versiones.
Sintaxis
{
"etag": [string],
"key": [string],
"label": [string, optional],
"content_type": [string, optional],
"value": [string],
"last_modified": [datetime ISO 8601],
"locked": [boolean],
"tags": [object with string properties, optional]
}
Obtención del par clave-valor
Obligatorio: {key}
, {api-version}
Opcional: label
(si se omite, implica un par clave-valor sin etiqueta).
GET /kv/{key}?label={label}&api-version={api-version}
Respuestas:
HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.kv+json; charset=utf-8;
Last-Modified: Tue, 05 Dec 2017 02:41:26 GMT
ETag: "4f6dd610dd5e4deebc7fbaef685fb903"
{
"etag": "4f6dd610dd5e4deebc7fbaef685fb903",
"key": "{key}",
"label": "{label}",
"content_type": null,
"value": "example value",
"last_modified": "2017-12-05T02:41:26+00:00",
"locked": "false",
"tags": {
"t1": "value1",
"t2": "value2"
}
}
Si la clave no existe, se devuelve la respuesta siguiente:
HTTP/1.1 404 Not Found
Obtención (de manera condicional)
Para mejorar el almacenamiento en caché del cliente, use los encabezados de solicitud If-Match
o If-None-Match
. El argumento etag
forma parte de la representación de la clave. Para obtener más información, consulte las secciones 14.24 y 14.26.
La siguiente solicitud recupera el par clave-valor solo si la representación actual no coincide con el argumento etag
especificado:
GET /kv/{key}?api-version={api-version} HTTP/1.1
Accept: application/vnd.microsoft.appconfig.kv+json;
If-None-Match: "{etag}"
Respuestas:
HTTP/1.1 304 NotModified
or
HTTP/1.1 200 OK
Enumeración de pares clave-valor
Opcional: key
(si no se especifica, sugiere cualquier clave).
Opcional: label
(si no se especifica, sugiere cualquier etiqueta).
GET /kv?label=*&api-version={api-version} HTTP/1.1
Respuesta:
HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.kvset+json; charset=utf-8
Opcional: tags
(Si no se especifica, implica cualquier etiqueta).
GET /kv?key=Test*&label=*&tags=tag1=value1&tags=tag2=value2&api-version={api-version} HTTP/1.1
Respuesta:
HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.kvset+json; charset=utf-8
Para obtener más opciones, consulte la sección "Filtrado" más adelante en este artículo.
Enumerar los valores de clave (condicionalmente)
Para mejorar el almacenamiento en caché del cliente, use los encabezados de solicitud If-Match
o If-None-Match
. El etag
argumento forma parte del cuerpo y el encabezado de respuesta clave-valores de lista.
Si se omiten If-Match
o If-None-Match
, la operación es incondicional.
La siguiente respuesta obtiene el valor de clave solo si la representación actual coincide con el especificado etag
:
GET /kv?key={key}label={label}&api-version={api-version} HTTP/1.1
If-Match: "4f6dd610dd5e4deebc7fbaef685fb903"
Respuestas:
HTTP/1.1 412 PreconditionFailed
o
HTTP/1.1 200 OK
La siguiente respuesta obtiene los valores de clave solo si la representación actual no coincide con el especificado etag
:
GET /kv?key={key}label={label}&api-version={api-version} HTTP/1.1
If-None-Match: "4f6dd610dd5e4deebc7fbaef685fb903"
Respuestas:
HTTP/1.1 304 NotModified
o
HTTP/1.1 200 OK
Paginación
El resultado se pagina si el número de elementos devueltos supera el límite de respuesta. Siga los encabezados de respuesta Link
opcionales y use rel="next"
para la navegación.
Como alternativa, el contenido proporciona un vínculo Siguiente en forma de propiedad @nextLink
. El URI vinculado incluye el argumento api-version
.
GET /kv?api-version={api-version} HTTP/1.1
Respuesta:
HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.kvs+json; charset=utf-8
Link: <{relative uri}>; rel="next"
{
"items": [
...
],
"@nextLink": "{relative uri}"
}
Filtrado
Se admite una combinación de filtrado de key
y label
.
Use los parámetros de cadena de consulta opcionales key
y label
.
GET /kv?key={key}&label={label}&api-version={api-version}
Se admite una combinación de key
, label
y tags
el filtrado.
Use los parámetros opcionales key
de cadena de consulta , label
y tags
.
Se pueden proporcionar varios filtros de etiqueta como parámetros de cadena de consulta en el tagName=tagValue
formato . Los filtros de etiqueta deben ser una coincidencia exacta.
GET /kv?key={key}&label={label}&tags={tagFilter1}&tags={tagFilter2}&api-version={api-version}
Filtros admitidos
Filtro de clave | Efecto |
---|---|
se omite key o key=* |
Coincide con cualquier clave |
key=abc |
Coincide con una clave de nombre abc |
key=abc* |
Coincide con los nombres de claves que empiezan por abc |
key=abc,xyz |
Coincide con los nombres de claves abc o xyz (limitado a 5 archivos CSV) |
Filtro de etiqueta | Efecto |
---|---|
se omite label o label=* |
Coincide con cualquier etiqueta |
label=%00 |
Coincide con los valores clave-valor sin etiqueta |
label=prod |
Coincide con la etiqueta prod |
label=prod* |
Coincide con las etiquetas que empiezan por prod |
label=prod,test |
Coincide con las etiquetas prod o test (limitado a 5 archivos CSV) |
Filtro de etiquetas | Efecto |
---|---|
se omite tags o tags= |
Coincide con cualquier etiqueta |
tags=group=app1 |
Coincide con los valores clave que tienen una etiqueta denominada group con el valor app1 |
tags=group=app1&tags=env=prod |
Coincide con los valores clave que tienen una etiqueta denominada group con valor app1 y una etiqueta denominada env con valor prod (limitado a 5 filtros de etiqueta). |
tags=tag1=%00 |
Coincide con los valores clave que tienen una etiqueta denominada tag1 con el valor null |
tags=tag1= |
Coincide con los valores de clave que tienen una etiqueta denominada tag1 con un valor vacío. |
Caracteres reservados
*
, , \
, ,
Si un carácter reservado forma parte del valor, se debe escapar mediante \{Reserved Character}
. Los caracteres no reservados también se pueden escapar.
Validación del filtro
Si se produce un error en la validación del filtro, la respuesta es HTTP 400
con detalles de error:
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
}
Ejemplos
All
GET /kv?api-version={api-version}
El nombre de clave comienza por abc e incluye todas las etiquetas
GET /kv?key=abc*&label=*&api-version={api-version}
El nombre de clave comienza por abc y la etiqueta es igual a v1 o v2
GET /kv?key=abc*&label=v1,v2&api-version={api-version}
Solicitud de campos específicos
Use el parámetro de cadena de consulta opcional $select
y proporcione una lista separada por comas de campos solicitados. Si se omite el parámetro $select
, la respuesta contiene el conjunto predeterminado.
GET /kv?$select=key,value&api-version={api-version} HTTP/1.1
Acceso basado en el tiempo
Obtenga una representación del resultado tal como era en un momento anterior. Para obtener más información, consulte la sección 2.1.1. Todavía se admite la paginación tal y como se definió anteriormente en este artículo.
GET /kv?api-version={api-version} HTTP/1.1
Accept-Datetime: Sat, 12 May 2018 02:10:00 GMT
Respuesta:
HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.kvset+json"
Memento-Datetime: Sat, 12 May 2018 02:10:00 GMT
Link: <{relative uri}>; rel="original"
{
"items": [
....
]
}
Establecimiento de clave
- Obligatorio:
{key}
- Opcional:
label
(si no se especifica o, el valor es label=%00, implica un par clave-valor sin etiqueta).
PUT /kv/{key}?label={label}&api-version={api-version} HTTP/1.1
Content-Type: application/vnd.microsoft.appconfig.kv+json
{
"value": "example value", // optional
"content_type": "user defined", // optional
"tags": { // optional
"tag1": "value1",
"tag2": "value2",
}
}
Respuestas:
HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.kv+json; charset=utf-8
Last-Modified: Tue, 05 Dec 2017 02:41:26 GMT
ETag: "4f6dd610dd5e4deebc7fbaef685fb903"
{
"etag": "4f6dd610dd5e4deebc7fbaef685fb903",
"key": "{key}",
"label": "{label}",
"content_type": "user defined",
"value": "example value",
"last_modified": "2017-12-05T02:41:26.4874615+00:00",
"tags": {
"tag1": "value1",
"tag2": "value2",
}
}
Si el elemento está bloqueado, se devuelve la siguiente respuesta:
HTTP/1.1 409 Conflict
Content-Type: application/problem+json; charset="utf-8"
{
"type": "https://azconfig.io/errors/key-locked",
"title": "Modifing key '{key}' is not allowed",
"name": "{key}",
"detail": "The key is read-only. To allow modification unlock it first.",
"status": 409
}
Establecimiento de clave (de manera condicional)
Para evitar condiciones de carrera, use los encabezados de solicitud If-Match
o If-None-Match
. El argumento etag
forma parte de la representación de la clave.
Si se omiten If-Match
o If-None-Match
, la operación es incondicional.
La siguiente respuesta actualiza el valor solo si la representación actual coincide con el valor de etag
especificado:
PUT /kv/{key}?label={label}&api-version={api-version} HTTP/1.1
Content-Type: application/vnd.microsoft.appconfig.kv+json
If-Match: "4f6dd610dd5e4deebc7fbaef685fb903"
La siguiente respuesta actualiza el valor solo si la representación actual no coincide con el valor de etag
especificado:
PUT /kv/{key}?label={label}&api-version={api-version} HTTP/1.1
Content-Type: application/vnd.microsoft.appconfig.kv+json;
If-None-Match: "4f6dd610dd5e4deebc7fbaef685fb903"
La siguiente solicitud agrega el valor solo si ya existe una representación:
PUT /kv/{key}?label={label}&api-version={api-version} HTTP/1.1
Content-Type: application/vnd.microsoft.appconfig.kv+json;
If-Match: "*"
La siguiente solicitud agrega el valor solo si no existe una representación:
PUT /kv/{key}?label={label}&api-version={api-version} HTTP/1.1
Content-Type: application/vnd.microsoft.appconfig.kv+json
If-None-Match: "*"
Respuestas
HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.kv+json; charset=utf-8
...
or
HTTP/1.1 412 PreconditionFailed
Eliminar
- Obligatorio:
{key}
,{api-version}
- Opcional:
{label}
(si no se especifica o, el valor es label=%00, implica un par clave-valor sin etiqueta).
DELETE /kv/{key}?label={label}&api-version={api-version} HTTP/1.1
Respuesta: Devuelve el par clave-valor eliminado, o no devuelve ningún valor si el par clave-valor no existía.
HTTP/1.1 200 OK
Content-Type: application/vnd.microsoft.appconfig.kv+json; charset=utf-8
...
or
HTTP/1.1 204 No Content
Eliminación de clave (de manera condicional)
Esto es similar a la sección "Establecimiento de clave (de manera condicional)" anteriormente en este artículo.