Erweiterte Feature-Flags

Erweiterte Feature-Flags sind in dieser API-Version nicht verfügbar.

Ein Enhanced Feature-Flag ist eine Ressource, die durch die eindeutige Kombination von identifiziert wird name + label. label ist optional. Um explizit auf ein Feature-Flag ohne Label zu referenzieren, verwenden \0 Sie (URL kodiert als %00). Für Listenoperationen enthalten das Weglassen von label Übereinstimmungen Flags mit beliebigen Beschriftungen. Mehr dazu erfahren Sie in den Informationen zum jeweiligen Vorgang.

Important

Erweiterte Feature-Flag-Endpunkte sind nur in der 2026-05-01-preview API-Version verfügbar.

Für historische Darstellungen siehe Erweiterte Feature-Flag-Überarbeitungen. Um Beschriftungen aufzulisten, die mit verbesserten Feature-Flags verbunden sind, siehe Labels.

Operations

  • Get
  • Auflisten mehrerer Werte
  • Festlegen
  • Löschen

Voraussetzungen

  • Alle HTTP-Anforderungen müssen authentifiziert werden. Informationen dazu erhalten Sie im Abschnitt Authentifizierung.
  • Alle HTTP-Anforderungen müssen explizit die api-version angeben. Informationen dazu erhalten Sie im Abschnitt Versionsverwaltung.

Syntax

Feature-Flag

{
  "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]
}

Variante

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

Zuteilung

{
  "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]
}

Feature-Flag erhalten

Erforderlich: {name}, {api-version}

Optional: label (Wenn weggelassen, impliziert dies ein Feature-Flag ohne Beschriftung.)

Optional: tags (Falls nicht angegeben, impliziert es Tags.)

Die name und label müssen genau übereinstimmen, bevor tags sie für zusätzliche Filterung angewendet werden. Weitere Optionen finden Sie im Abschnitt "Filtern" weiter unten in diesem Artikel.

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

Antworten:

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"
}

Wenn das Feature-Flag nicht existiert, wird folgende Antwort zurückgegeben:

HTTP/1.1 404 Not Found

Abrufen (bedingt)

Verwenden Sie If-Match- oder If-None-Match-Anforderungsheader, um das Zwischenspeichern auf dem Client zu verbessern. Das Argument etag ist Teil der Feature-Flag-Darstellung. Wenn beide Header weggelassen werden, ist die Operation bedingungslos.

Die folgende Anfrage ruft das Feature-Flag nur ab, wenn die aktuelle Darstellung nicht mit der angegebenen etagübereinstimmt:

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}"

Antworten:

HTTP/1.1 304 Not Modified

oder

HTTP/1.1 200 OK

Listen der Merkmale-Flags

Optional: name (Falls nicht angegeben, impliziert es einen beliebigen Feature-Flag-Namen.)

Optional: label (ohne Angabe ist eine beliebige Bezeichnung gemeint).

Optional: tags (Falls nicht angegeben, impliziert es Tags.)

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

Antwort:

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}"
}

Weitere Optionen finden Sie im Abschnitt "Filtern" weiter unten in diesem Artikel.

Feature-Flags auflisten (bedingt)

Verwenden Sie If-Match- oder If-None-Match-Anforderungsheader, um das Zwischenspeichern auf dem Client zu verbessern. Das Argument etag ist Teil des Listen-Antwortkörpers und des Headers. Wenn beide Header weggelassen werden, ist die Operation bedingungslos.

Die folgende Anfrage ruft Feature-Flags nur ab, wenn die aktuelle Darstellung der angegebenen etagentspricht:

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

Antworten:

HTTP/1.1 412 Precondition Failed

oder

HTTP/1.1 200 OK

Die folgende Anfrage erhält die Feature-Flags nur, wenn die aktuelle Darstellung nicht mit den angegebenen etagMerkmalen übereinstimmt:

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

Antworten:

HTTP/1.1 304 Not Modified

oder

HTTP/1.1 200 OK

Paginierung

Das Ergebnis ist paginiert, wenn die Anzahl der zurückgegebenen Elemente das Antwortlimit überschreitet. Folgen Sie dem optionalen Link Antwort-Header und verwenden rel="next" Sie es zur Navigation. Alternativ bietet der Inhalt einen nächsten Link in Form der @nextLink Eigenschaft. Der verknüpfte URI enthält das api-version-Argument.

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

Antwort:

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}"
}

Filterung

Es wird eine Kombination aus name, labelund tags Filtern unterstützt. Verwenden Sie die optionalen name, labelund tags Abfragezeichenfolgenparameter. Mehrere Tagfilter können als Abfragezeichenfolgenparameter im tagName=tagValue Format bereitgestellt werden. Tagfilter müssen eine genaue Übereinstimmung sein.

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

Unterstützte Filter

Namensfilter Effect
name wird weggelassen oder lautet name=* Entspricht jedem Namen der Feature-Flagge
name=abc Entspricht einer Feature-Flagge namens abc
name=abc* Matches haben Flaggennamen, die mit abc beginnen
name=abc,xyz Die Matches enthalten Flaggennamen abc oder xyz (begrenzt auf 5 CSV)
Etikettenfilter Effect
label wird weggelassen oder lautet label=* Übereinstimmung mit einer beliebigen Bezeichnung
label=%00 Die Spiele zeigen Flaggen ohne Etikett
label=prod Übereinstimmung mit Bezeichnung prod
label=prod* Übereinstimmung mit Bezeichnungen, die mit prod beginnen
label=prod,test Übereinstimmung mit den Bezeichnungen prod oder test (auf fünf CSVs begrenzt)
Kategorienfilter Effect
tags wird weggelassen oder lautet tags= Entspricht einem beliebigen Tag
tags=group=app1 Matches enthalten Flags, die einen Tag mit Wert haben groupapp1
tags=group=app1&tags=env=prod Matches enthalten Flags, die einen Tag mit Wert app1 und group einen Tag mit Wert prod (envbegrenzt auf 5 Tag-Filter) enthalten.
tags=tag1=%00 Matches enthalten Flags, die einen Tag mit Wert haben tag1null
tags=tag1= Matches enthalten Flags, die einen Tag mit einem leeren Wert haben tag1

Reservierte Zeichen

*, \, ,

Wenn ein Wert ein reserviertes Zeichen enthält, muss dieses mit einem Escapezeichen versehen werden: \{Reserved Character}. Nicht reservierten Zeichen können ebenfalls mit Escapezeichen versehen werden.

Filterüberprüfung

Wenn die Filterüberprüfung fehlschlägt, lautet die Antwort HTTP 400 mit Fehlerdetails:

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

  • All

    GET /ff?api-version={api-version}
    
  • Der Name der Feature-Flagge beginnt mit abc und enthält alle Bezeichnungen

    GET /ff?name=abc*&label=*&api-version={api-version}
    
  • Der Name des Feature-Flags beginnt mit abc und das Label entspricht v1 oder v2

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

Anfordern bestimmter Felder

Verwenden Sie den optionalen Abfragezeichenfolgenparameter $select, und geben Sie eine durch Trennzeichen getrennte Liste der angeforderten Felder an. Wenn der Parameter $select ausgelassen wird, enthält die Antwort die Standardgruppe von Feldern. Unterstützte Felder sind , , , , , conditionsvariants, telemetrytagsallocationlast_modifiedund .etagdescriptionlabelenabledname

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

Der Parameter $select wird durch GET Anfragen nach einem einzelnen Feature-Flag und Feature-Flag-Sammlungen unterstützt.

Zeitbasierter Zugriff

Rufen Sie eine Darstellung des Ergebnisses ab, so wie es zu einem bestimmten Zeitpunkt in der Vergangenheit war. Weitere Informationen finden Sie im Abschnitt 2.1.1. Die Paginierung wird weiterhin wie oben in diesem Artikel definiert unterstützt.

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

Set-Feature-Flag

  • Erforderlich: {name}, {api-version}
  • Optional: label (Wenn nicht angegeben, oder label=%00, impliziert dies ein Feature-Flag ohne Label.)

Die Eigenschaft enabled ist im Antragskörper erforderlich. Die descriptionEigenschaften , conditions, variants, , allocation, telemetryund tags sind optional. Fügen Sie nicht , label, , etagoder last_modified in den Eingabetext ein.name

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"
  }
}

Antworten:

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"
}

Set-Feature-Flag (bedingt)

Um Racebedingungen zu verhindern, verwenden Sie Anforderungsheader vom Typ If-Match oder If-None-Match. Das Argument etag ist Teil der Feature-Flag-Darstellung. Wenn beide Header weggelassen werden, ist die Operation bedingungslos.

Die folgende Anfrage setzt das Feature-Flag nur, wenn die aktuelle Darstellung der angegebenen etagentspricht:

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}"

Die folgende Anfrage setzt das Feature-Flag nur, wenn die aktuelle Darstellung nicht mit der angegebenen etagVariante übereinstimmt:

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}"

Die folgende Anfrage setzt die Feature-Flagge nur, wenn bereits eine Darstellung existiert:

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: "*"

Die folgende Anfrage setzt die Feature-Flagge nur, wenn eine Darstellung noch nicht existiert:

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: "*"

Antworten

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
...

oder

HTTP/1.1 412 Precondition Failed

Löschen

  • Erforderlich: {name}, {api-version}
  • Optional: label (Wenn nicht angegeben, oder label=%00, impliziert dies ein Feature-Flag ohne Label.)
DELETE /ff/{name}?label={label}&api-version={api-version} HTTP/1.1

Antwort: Geben Sie das gelöschte Feature-Flag zurück oder keines, wenn das Feature-Flag nicht existierte.

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
...

oder

HTTP/1.1 204 No Content

Feature-Flag löschen (bedingt)

Dies ähnelt dem Abschnitt "Set feature flag (conditionally)" zuvor in diesem Artikel. Die Löschoperation unterstützt den If-Match Anfrage-Header.

Informationen zu Anfrage- und Antwortheadern, die von App Configuration Data-Plane-Operationen geteilt werden, finden Sie unter Common Headers.