Indicateurs de fonctionnalités améliorés

Les drapeaux de fonctionnalités améliorées ne sont pas disponibles dans cette version de l’API.

Un drapeau de caractéristique amélioré est une ressource identifiée par la combinaison unique de name + label. label est facultatif. Pour référencer explicitement un drapeau de caractéristique sans étiquette, utilisez \0 (URL encodée sous le %00nom ). Pour les opérations de liste, les label omissions de correspondances comportent des drapeaux avec n’importe quelle étiquette. Consultez les détails de chaque opération.

Important

Les points de terminaison de feature banners améliorés ne sont disponibles que dans la 2026-05-01-preview version API.

Pour des représentations historiques, voir Révisions améliorées des drapeaux de fonctionnalités. Pour lister les étiquettes associées aux drapeaux de fonctionnalités améliorées, voir Étiquettes.

Operations

  • Obtenir
  • Liste multiple
  • Définissez
  • Delete

Prerequisites

  • Toutes les requêtes HTTP doivent être authentifiées. Consultez la section Authentification.
  • Toutes les requêtes HTTP doivent fournir des api-version explicites. Consultez la section Contrôle de version.

Syntax

Indicateur de fonctionnalité

{
  "etag": [string, optional, read-only],
  "name": [string, read-only],
  "enabled": [boolean],
  "label": [string, optional, read-only],
  "description": [string, optional],
  "conditions": [Conditions, optional],
  "variants": [array<Variant>, optional],
  "allocation": [Allocation, optional],
  "telemetry": [Telemetry, optional],
  "tags": [object<string, string>, optional],
  "last_modified": [datetime ISO 8601, optional, read-only]
}

Conditions

{
  "requirement_type": [string, enum("Any", "All"), optional],
  "filters": [array<FeatureFilter>, optional]
}

FeatureFilter

{
  "name": [string],
  "parameters": [object<string, string>, optional]
}

Variant

{
  "name": [string],
  "value": [string, optional],
  "content_type": [string, optional],
  "status_override": [string, enum("None", "Enabled", "Disabled"), optional]
}

Répartition

{
  "default_when_disabled": [string, optional],
  "default_when_enabled": [string, optional],
  "percentile": [array<PercentileAllocation>, optional],
  "user": [array<UserAllocation>, optional],
  "group": [array<GroupAllocation>, optional],
  "seed": [string, optional]
}

PercentileAllocation

{
  "variant": [string],
  "from": [number, range(0, 100)],
  "to": [number, range(0, 100)]
}

UserAllocation

{
  "variant": [string],
  "users": [array<string>]
}

GroupAllocation

{
  "variant": [string],
  "groups": [array<string>]
}

Telemetry

{
  "enabled": [boolean],
  "metadata": [object<string, string>, optional]
}

Obtenir le drapeau de fonctionnalité

Obligatoire : {name}, {api-version}

Optionnel : label (Si c’est omis, cela implique un drapeau de caractéristique sans étiquette.)

Facultatif : tags (S’il n’est pas spécifié, cela implique des balises.)

Les name et label doivent correspondre exactement avant tags d’être appliqués pour un filtrage supplémentaire. Pour plus d’options, consultez la section « Filtrage » plus loin dans cet article.

GET /ff/{name}?label={label}&tags={tagFilter1}&tags={tagFilter2}&api-version={api-version}

Réponses :

HTTP/1.1 200 OK
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ff"; charset=utf-8
Last-Modified: Fri, 01 May 2026 16:52:32 GMT
ETag: "7XpB48ET4VAlB9068ft6fKMyA3m"
Sync-Token: zAJw6V16=NjotMSM3ODk3NjM=;sn=789763
{
  "etag": "7XpB48ET4VAlB9068ft6fKMyA3m",
  "name": "{name}",
  "enabled": true,
  "label": "{label}",
  "description": "{description}",
  "tags": {
    "t1": "value1"
  },
  "last_modified": "2026-05-01T16:52:32Z"
}

Si le drapeau de caractéristique n’existe pas, la réponse suivante est renvoyée :

HTTP/1.1 404 Not Found

Obtenir (de manière conditionnelle)

Pour améliorer la mise en cache du client, utilisez les en-têtes de demande If-Match ou If-None-Match. L’argument etag fait partie de la représentation du drapeau de caractéristiques. Si les deux en-têtes sont omis, l’opération est inconditionnelle.

La requête suivante ne récupère le drapeau de caractéristique que si la représentation actuelle ne correspond pas à celle spécifiée etag:

GET /ff/{name}?label={label}&api-version={api-version} HTTP/1.1
Accept: application/json; profile="https://azconfig.io/mime-profiles/ff"
If-None-Match: "{etag}"

Réponses :

HTTP/1.1 304 Not Modified

ou

HTTP/1.1 200 OK

Drapeaux de caractéristiques de liste

Optionnel : name (Si ce n’est pas spécifié, cela implique n’importe quel nom de drapeau de caractéristique.)

Facultatif : label (Si non spécifié, cela implique n’importe quelle étiquette.)

Facultatif : tags (S’il n’est pas spécifié, cela implique des balises.)

GET /ff?name=Test*&label=*&tags=tag1=value1&tags=tag2=value2&api-version={api-version} HTTP/1.1

Réponse :

HTTP/1.1 200 OK
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ffset"; charset=utf-8
ETag: "1PlB48ET4VAlB9068ft6fKMyA3m"
Sync-Token: zAJw6V16=NjotMSM3ODk3NjM=;sn=789763
{
  "items": [
    {
      "etag": "7XpB48ET4VAlB9068ft6fKMyA3m",
      "name": "{name}",
      "enabled": true,
      "label": "{label}",
      "tags": {
        "t1": "value1"
      },
      "last_modified": "2026-05-01T16:52:32Z"
    }
  ],
  "etag": "1PlB48ET4VAlB9068ft6fKMyA3m",
  "@nextLink": "{relative uri}"
}

Pour plus d’options, consultez la section « Filtrage » plus loin dans cet article.

Liste des indicateurs de caractéristiques (conditionnellement)

Pour améliorer la mise en cache du client, utilisez les en-têtes de demande If-Match ou If-None-Match. L’argument etag fait partie du corps de la réponse et de l’en-tête de la liste. Si les deux en-têtes sont omis, l’opération est inconditionnelle.

La requête suivante récupère les indicateurs de caractéristiques uniquement si la représentation actuelle correspond à la spécifiée etag:

GET /ff?name={name}&label={label}&api-version={api-version} HTTP/1.1
If-Match: "{etag}"

Réponses :

HTTP/1.1 412 Precondition Failed

ou

HTTP/1.1 200 OK

La requête suivante ne reçoit les indicateurs de caractéristiques que si la représentation actuelle ne correspond pas à la spécifiée etag:

GET /ff?name={name}&label={label}&api-version={api-version} HTTP/1.1
If-None-Match: "{etag}"

Réponses :

HTTP/1.1 304 Not Modified

ou

HTTP/1.1 200 OK

Pagination

Le résultat est paginé si le nombre d’éléments retournés dépasse le nombre limite de réponses. Suivez l’en-tête de réponse optionnel Link et utilisez-le rel="next" pour la navigation. Alternativement, le contenu fournit un lien suivant sous la forme de la @nextLink propriété. L’URI lié comprend l’argument api-version.

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

Réponse :

HTTP/1.1 200 OK
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ffset"; charset=utf-8
Link: <{relative uri}>; rel="next"
{
  "items": [
    ...
  ],
  "@nextLink": "{relative uri}"
}

Filtrage

Une combinaison de name, labelet tags de filtrage est prise en charge. Utilisez les paramètres de chaîne de requête facultatifs namelabelet tags facultatifs. Plusieurs filtres d’étiquettes peuvent être fournis en tant que paramètres de chaîne de requête au tagName=tagValue format. Les filtres d’étiquettes doivent correspondre exactement.

GET /ff?name={name}&label={label}&tags={tagFilter1}&tags={tagFilter2}&api-version={api-version}

Filtres pris en charge

Filtre de nom Effect
name est omis ou name=* Correspond à n’importe quel nom de drapeau principal
name=abc Correspond à un drapeau principal nommé abc
name=abc* Les matchs comportent des noms de drapeaux qui commencent par abc
name=abc,xyz Les matchs comportent les noms des drapeaux abc ou xyz (limités à 5 CSV)
Filtre d’étiquette Effect
label est omis ou label=* Correspond à toute étiquette
label=%00 Les matchs comportent des drapeaux sans étiquette
label=prod Correspond à l’étiquette prod
label=prod* Correspond aux étiquettes qui commencent par prod
label=prod,test Correspond aux étiquettes prod ou test (limité à 5 CSV)
Filtre d’étiquettes Effect
tags est omis ou tags= Correspond à n’importe quelle balise
tags=group=app1 Les matchs comportent des drapeaux portant un tag nommé group avec valeur app1
tags=group=app1&tags=env=prod Les correspondances comportent des drapeaux portant un tag nommé group avec valeur app1 et un tag nommé env avec valeur prod (limité à 5 filtres de tags)
tags=tag1=%00 Les matchs comportent des drapeaux portant un tag nommé tag1 avec valeur null
tags=tag1= Les matchs comportent des drapeaux portant un tag nommé tag1 avec une valeur vide

Caractères réservés

*, \, ,

Si un caractère réservé fait partie de la valeur, il doit être placé dans une séquence d’échappement à l’aide de \{Reserved Character}. Les caractères non réservés peuvent également être placés dans une séquence d’échappement.

Validation de filtre

Si la validation du filtre échoue, la réponse est HTTP 400 avec des détails d’erreur :

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
}

Examples

  • Tous

    GET /ff?api-version={api-version}
    
  • Le nom du drapeau de la feature commence par abc et inclut tous les labels

    GET /ff?name=abc*&label=*&api-version={api-version}
    
  • Le nom du drapeau de la caractéristique commence par abc et l’étiquette est égal à v1 ou v2

    GET /ff?name=abc*&label=v1,v2&api-version={api-version}
    

Champs spécifiques de la demande

Utilisez le paramètre de chaîne de requête facultatif $select et fournissez une liste séparée par des virgules des champs demandés. Si le paramètre $select est omis, la réponse contient l’ensemble par défaut. Les corps soutenus sont name, enabled, label, descriptionconditionsvariants, , allocation, telemetry, tags, , last_modified, et etag.

GET /ff?$select=name,enabled,label&api-version={api-version} HTTP/1.1

Le $select paramètre est supporté par GET des requêtes pour un seul drapeau de caractéristique et des collections de drapeaux de caractéristiques.

Accès basé sur le temps

Obtenez une représentation du résultat tel qu’il était à un moment passé. Pour plus d’informations, voir la section 2.1.1. La pagination est toujours prise en charge, comme défini précédemment dans cet article.

GET /ff/{name}?label={label}&api-version={api-version} HTTP/1.1
Accept-Datetime: Sat, 01 Aug 2026 02:10:00 GMT
GET /ff?api-version={api-version} HTTP/1.1
Accept-Datetime: Sat, 01 Aug 2026 02:10:00 GMT

Définir le drapeau de fonctionnalité

  • Obligatoire : {name}, {api-version}
  • Optionnel : label (Si ce n’est pas spécifié, ou label=%00, cela implique un drapeau de caractéristique sans étiquette.)

Le enabled bien est requis dans le corps de la demande. Les descriptionpropriétés , conditions, variants, allocation, telemetry, et tags sont optionnelles. N’incluez namepas , label, etag, ni last_modified dans le corps de la demande.

PUT /ff/{name}?label={label}&api-version={api-version} HTTP/1.1
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ff"
{
  "enabled": true,
  "description": "{description}",
  "conditions": {
    "requirement_type": "All",
    "filters": [
      {
        "name": "Microsoft.Targeting",
        "parameters": {
          "Audience": "{\"Users\":[\"User1\",\"User2\"],\"Groups\":[{\"Name\":\"Ring0\",\"RolloutPercentage\":100}],\"DefaultRolloutPercentage\":20,\"Exclusion\":{\"Users\":[\"ExcludedUser\"],\"Groups\":[\"Ring1\"]}}"
        }
      }
    ]
  },
  "variants": [
    {
      "name": "On",
      "value": "true",
      "content_type": "application/json",
      "status_override": "None"
    },
    {
      "name": "Off",
      "value": "false",
      "content_type": "application/json",
      "status_override": "Disabled"
    }
  ],
  "allocation": {
    "default_when_disabled": "Off",
    "default_when_enabled": "On",
    "percentile": [
      {
        "variant": "On",
        "from": 0,
        "to": 80
      },
      {
        "variant": "Off",
        "from": 80,
        "to": 100
      }
    ],
    "seed": "{name}"
  },
  "telemetry": {
    "enabled": true,
    "metadata": {
      "Tags.Environment": "production"
    }
  },
  "tags": {
    "t1": "value1"
  }
}

Réponses :

HTTP/1.1 200 OK
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ff"; charset=utf-8
Last-Modified: Fri, 01 May 2026 16:52:32 GMT
ETag: "7XpB48ET4VAlB9068ft6fKMyA3m"
Sync-Token: zAJw6V16=NjotMSM3ODk3NjM=;sn=789763
{
  "etag": "7XpB48ET4VAlB9068ft6fKMyA3m",
  "name": "{name}",
  "enabled": true,
  "label": "{label}",
  "description": "{description}",
  "conditions": {
    "requirement_type": "All",
    "filters": [
      {
        "name": "Microsoft.Targeting",
        "parameters": {
          "Audience": "{\"Users\":[\"User1\",\"User2\"],\"Groups\":[{\"Name\":\"Ring0\",\"RolloutPercentage\":100}],\"DefaultRolloutPercentage\":20,\"Exclusion\":{\"Users\":[\"ExcludedUser\"],\"Groups\":[\"Ring1\"]}}"
        }
      }
    ]
  },
  "variants": [
    {
      "name": "On",
      "value": "true",
      "content_type": "application/json",
      "status_override": "None"
    },
    {
      "name": "Off",
      "value": "false",
      "content_type": "application/json",
      "status_override": "Disabled"
    }
  ],
  "allocation": {
    "default_when_disabled": "Off",
    "default_when_enabled": "On",
    "percentile": [
      {
        "variant": "On",
        "from": 0,
        "to": 80
      },
      {
        "variant": "Off",
        "from": 80,
        "to": 100
      }
    ],
    "seed": "{name}"
  },
  "telemetry": {
    "enabled": true,
    "metadata": {
      "Tags.Environment": "production"
    }
  },
  "tags": {
    "t1": "value1"
  },
  "last_modified": "2026-05-01T16:52:32Z"
}

Définir le drapeau de caractéristique (conditionnellement)

Pour éviter les conditions de concurrence, utilisez les en-têtes de demande If-Match ou If-None-Match. L’argument etag fait partie de la représentation du drapeau de caractéristiques. Si les deux en-têtes sont omis, l’opération est inconditionnelle.

La requête suivante ne définit le drapeau de caractéristique que si la représentation actuelle correspond à la spécifiée etag:

PUT /ff/{name}?label={label}&api-version={api-version} HTTP/1.1
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ff"
If-Match: "{etag}"

La requête suivante ne définit le drapeau de caractéristique que si la représentation actuelle ne correspond pas à la spécifiée etag:

PUT /ff/{name}?label={label}&api-version={api-version} HTTP/1.1
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ff"
If-None-Match: "{etag}"

La requête suivante ne définit le drapeau de caractéristique que si une représentation existe déjà :

PUT /ff/{name}?label={label}&api-version={api-version} HTTP/1.1
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ff"
If-Match: "*"

La requête suivante ne définit le feature flag que si une représentation n’existe pas déjà :

PUT /ff/{name}?label={label}&api-version={api-version} HTTP/1.1
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ff"
If-None-Match: "*"

Réponses

HTTP/1.1 200 OK
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ff"; charset=utf-8
Last-Modified: Fri, 01 May 2026 16:52:32 GMT
ETag: "7XpB48ET4VAlB9068ft6fKMyA3m"
Sync-Token: zAJw6V16=NjotMSM3ODk3NjM=;sn=789763
...

ou

HTTP/1.1 412 Precondition Failed

Delete

  • Obligatoire : {name}, {api-version}
  • Optionnel : label (Si ce n’est pas spécifié, ou label=%00, cela implique un drapeau de caractéristique sans étiquette.)
DELETE /ff/{name}?label={label}&api-version={api-version} HTTP/1.1

Réponse : Retournez le drapeau de fonctionnalité supprimée, ou aucun si le drapeau de fonctionnalité n’existait pas.

HTTP/1.1 200 OK
Content-Type: application/json; profile="https://azconfig.io/mime-profiles/ff"; charset=utf-8
Last-Modified: Fri, 01 May 2026 16:52:32 GMT
ETag: "7XpB48ET4VAlB9068ft6fKMyA3m"
Sync-Token: zAJw6V16=NjotMSM3ODk3NjM=;sn=789763
...

ou

HTTP/1.1 204 No Content

Drapeau de suppression de la fonction (conditionnellement)

C’est similaire à la section « Définir le drapeau de caractéristique (conditionnellement) » plus tôt dans cet article. L’opération de suppression prend en charge l’en-tête If-Match de requête.

Pour des informations sur les en-têtes requête et réponse partagés par les opérations du plan de données App Configuration, voir En-têtes communs.