

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Routing-Regeln zum Verbinden von API-Stufen mit einem benutzerdefinierten Domainnamen für REST APIs
<a name="rest-api-routing-rules"></a>

Eine Routing-Regel besteht aus einer Reihe von Bedingungen, bei deren Erfüllung eine Aktion ausgelöst wird. Eine Regel kann beispielsweise jede eingehende Anfrage, die an einen benutzerdefinierten Domainnamen gerichtet ist und den Header `Hello:World` sowie den Basispfad `users` enthält, an die `production`-Stufe einer REST-API weiterleiten.

Regeln werden in der Reihenfolge ihrer Priorität ausgewertet. Wenn Sie den Routing-Modus `ROUTING_RULE_THEN_API_MAPPING` verwenden, wertet API Gateway stets zuerst alle Routing-Regeln aus, bevor API-Zuweisungen geprüft werden. Die folgende Liste beschreibt, wie eine Routing-Regel Bedingungen, Aktionen und Prioritäten verwendet. 

**Bedingungen**  
Wenn die Bedingungen für eine Regel erfüllt sind, wird die dazugehörige Aktion durchgeführt. API Gateway unterstützt bis zu zwei Header-Bedingungen und eine Pfadbedingung. API Gateway wertet Header-Bedingungen und Basispfadbedingungen zusammen aus.  
Sie können eine Regel auch ohne Bedingungen erstellen. Wenn API Gateway diese Regel auswertet, wird die Aktion immer ausgeführt. Eine Regel ohne Bedingungen kann als Catch-all-Regel verwendet werden.  
Weitere Informationen über Header-Bedingungen finden Sie unter [Abgleichen der Header-Bedingungen](#rest-api-routing-rules-condition-headers). Weitere Informationen über Pfadbedingungen finden Sie unter [Basispfadbedingungen anpassen](#rest-api-routing-rules-condition-path). 

**Aktionen**  
Aktionen sind das Ergebnis der Übereinstimmung von Bedingungen mit einer Routing-Regel. Derzeit wird nur das Aufrufen einer Stufe einer REST-API unterstützt.  
Jede Regel kann eine Aktion haben.

**Priorität**  
Die Priorität bestimmt die Reihenfolge, in der Regeln ausgewertet werden, ausgehend vom niedrigsten Wert hin zum höchsten Wert. Zwei Regeln können nicht dieselbe Priorität haben.  
Sie können die Priorität im Bereich 1–1.000.000 festlegen. Eine Regel mit der Priorität 1 wird von API Gateway zuerst ausgewertet. Wir empfehlen, beim Erstellen einer Regel Lücken zwischen den Prioritäten zu lassen. So können Sie die Reihenfolge später leichter ändern oder neue Regeln hinzufügen. Weitere Informationen finden Sie unter [Ändern der Priorität einer Routing-Regel](apigateway-routing-rules-use.md#rest-api-routing-rules-change-priority).

Beispiele dafür, wie API Gateway Routing-Regeln auswertet, finden Sie unter [Beispiele dafür, wie API Gateway Routing-Regeln auswertet](rest-api-routing-rules-examples.md).

## Bedingungstypen für Routing-Regeln in API Gateway
<a name="rest-api-routing-rules-condition-types"></a>

Im Folgenden werden die Bedingungstypen für Routing-Regeln beschrieben. API Gateway wendet eine Regel nur dann an, wenn alle Bedingungen erfüllt sind.

### Abgleichen der Header-Bedingungen
<a name="rest-api-routing-rules-condition-headers"></a>

Wenn Sie eine Header-Bedingung erstellen, können Sie den Header-Namen und den Header-Glob-Wert abgleichen, z. B. `Hello:World`. API Gateway verwendet für den Abgleich von Header-Bedingungen eine exakte Übereinstimmung. Ihre Bedingung kann bis zu zwei Header mit `AND` zwischen ihnen verwenden. Eine Bedingung kann also z. B. dann übereinstimmen, wenn eine eingehende Anfrage sowohl `Hello:World` als auch `x-version:beta` enthält.

Bei der Übereinstimmung des Header-Namens wird die Groß-/Kleinschreibung nicht berücksichtigt, beim Header-Glob-Wert hingegen schon. `Hello:World` stimmt mit `hello:World` überein, jedoch nicht mit `Hello:world`.

Eine Liste der eingeschränkten Header-Werte finden Sie unter [Einschränkungen](#rest-api-routing-rules-restrictions).

#### Verwenden von Platzhaltern mit Header-Bedingungen
<a name="rest-api-routing-rules-condition-headers-wildcards"></a>

Platzhalter dürfen nur im Header-Glob-Wert verwendet werden. Zulässig sind dabei: `*prefix-match`, `suffix-match*` oder `*contains*`. Die folgende Tabelle zeigt Beispiele, wie Platzhalter für die Übereinstimmung mit Header-Bedingungen verwendet werden können. 


|  Header-Bedingungen  |  Anfragen, die der Routing-Regel entsprechen  |  Anfragen, die nicht der Routing-Regel entsprechen  | 
| --- | --- | --- | 
|  `x-version: a*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *a`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *a*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *a*` und `x-version: *b*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: b*` und `x-version: *a`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `x-version: *`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  Keine  | 

Wenn Sie Bedingungen für mehrere Header-Werte erstellen, wie z. B. `Accept:application/json,text/xml`, empfehlen wir, `*contains*` für Ihre Header-Bedingungen zu verwenden und keine Bedingungen mit dem Kommazeichen (`,`) zu erstellen.

Da API Gateway Header-Bedingungen wörtlich prüft, können semantisch gleiche Anfragen unterschiedlich weitergeleitet werden. Die folgende Tabelle zeigt die unterschiedlichen Ergebnisse der Routing-Regeln.


|  Header-Bedingungen  |  Anfragen, die der Routing-Regel entsprechen  |  Anfragen, die nicht der Routing-Regel entsprechen  | 
| --- | --- | --- | 
|  `Accept: *json`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  | 
|  `Accept: *json*`  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/rest-api-routing-rules.html)  |  Keine  | 

### Basispfadbedingungen anpassen
<a name="rest-api-routing-rules-condition-path"></a>

Wenn Sie eine Basispfadbedingung erstellen und die eingehende Anfrage den von Ihnen angegebenen Pfad enthält, wird die Regel angewendet. Bei der Übereinstimmung wird die Groß- und Kleinschreibung berücksichtigt, daher stimmt der Pfad `New/Users` nicht mit `new/users` überein.

Sie können eine Basispfadbedingung nur für einen Basispfad erstellen.

Eine Liste der eingeschränkten Basispfadbedingungen finden Sie unter [Einschränkungen](#rest-api-routing-rules-restrictions).

#### Entfernen des Basispfads mit Basispfadbedingungen
<a name="rest-api-routing-rules-condition-path-split"></a>

Wenn Sie eine Basispfadbedingung erstellen, können Sie wählen, ob der Basispfad entfernt werden soll. Wenn Sie den Basispfad entfernen, löscht API Gateway den eingehenden übereinstimmenden Basispfad, wenn es die Ziel-API aufruft. Dieses Verhalten entspricht dem einer API-Zuweisung. Wenn Sie den Basispfad nicht entfernen, leitet API Gateway den gesamten Basispfad an die Ziel-API weiter. Wir empfehlen, den Basispfad nur dann zu entfernen, wenn Sie eine API-Zuweisung neu erstellen.

Die folgende Tabelle zeigt Beispiele dafür, wie API Gateway die Bedingung zum Entfernen des Basispfads auswertet.


|  Bedingung  | Leerzeichen des Basispfads entfernen |  Eingehende Anfragen  |  Ergebnis  | 
| --- | --- | --- | --- | 
|  Wenn der Basispfad `PetStoreShopper/dogs` enthält  |  Wahr  |  `GET https://example.com/PetStoreShopper/dogs`  |  API Gateway ruft die `GET`-Methode der `/`-Ressource auf.  | 
|  Wenn der Basispfad `PetStoreShopper/dogs` enthält  |  Falsch  |  `GET https://example.com/PetStoreShopper/dogs`  |  API Gateway ruft die `GET`-Methode der `PetStoreShopper/dogs`-Ressource auf.  | 
|  Wenn der Basispfad `PetStoreShopper` enthält  |  Wahr  |  `GET https://example.com/PetStoreShopper/dogs`  |  API Gateway ruft die `GET`-Methode der `dogs`-Ressource auf.  | 
|  Wenn der Basispfad `PetStoreShopper` enthält  |  Falsch  |  `GET https://example.com/PetStoreShopper/dogs`  |  API Gateway ruft die `GET`-Methode der `PetStoreShopper/dogs`-Ressource auf.  | 
|  Wenn der Basispfad `PetStoreShopper` enthält  |  Wahr  |  `GET https://example.com/PetStoreShopper?birds=available`  |  API Gateway ruft die `GET`-Methode der `/`-Ressource mit dem Abfragezeichenfolgenparameter `birds=available` auf.  | 
|  Wenn der Basispfad `PetStoreShopper` enthält  |  Falsch  |  `GET https://example.com/PetStoreShopper?birds=available`  |  API Gateway ruft die `GET`-Methode der `/PetStoreShopper`-Ressource mit dem Abfragezeichenfolgenparameter `birds=available` auf.  | 

## Einschränkungen
<a name="rest-api-routing-rules-restrictions"></a>
+ Die Ziel-API und der benutzerdefinierte Domainname müssen sich im selben AWS Konto befinden.
+ Jede Regel kann eine Ziel-API haben. 
+ Sie können eine Routing-Regel nur für einen privaten benutzerdefinierten Domainnamen an eine private API und für einen öffentlichen benutzerdefinierten Domainnamen an eine öffentliche API erstellen. Sie können öffentliche und private Ressourcen nicht mischen.
+ Wenn Ihr benutzerdefinierter Domainname API-Zuordnungen sowohl zu REST als auch zu HTTP enthält APIs, werden Routing-Regeln nicht unterstützt.
+ Die maximal zulässige Priorität beträgt 1 000 000.
+ Header-Einschränkungen:
  + Jede `anyOf` Bedingung darf nur einen Header-Wert enthalten.
  + Die einzigen zulässigen Zeichen für Header-Namen und Header-Glob-Werte sind in [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230) festgelegt. Dabei handelt es sich um `a-z`, `A-Z`, `0-9` und die folgenden Sonderzeichen: `*?-!#$%&'.^_`|~`.
  + Sie können einen Platzhalter im Header-Glob-Wert verwenden, jedoch muss der Platzhalter `*prefix-match`, `suffix-match*` oder `*contains*` sein. Sie können `*` nicht in der Mitte eines Header-Glob-Werts verwenden.
  + Platzhalter-Header-Namen werden nicht unterstützt.
  + Der Header-Name darf maximal 40 Zeichen lang sein.
  + Der Header-Glob-Wert darf maximal 128 Zeichen lang sein.
  + Der Header-Glob-Wert für eine Infix-Übereinstimmung darf maximal 40 Zeichen lang sein.
  + Die folgenden Header werden nicht als Bedingungen unterstützt:
    + `access-control-*`
    + `apigw-*`
    + `Authorization`
    + `Connection`
    + `Content-Encoding`
    + `Content-Length`
    + `Content-Location`
    + `Forwarded`
    + `Keep-Alive`
    + `Origin`
    + `Proxy-Authenticate`
    + `Proxy-Authorization`
    + `TE`
    + `Trailers`
    + `Transfer-Encoding`
    + `Upgrade`
    + `x-amz-*`
    + `x-amzn-*`
    + `x-apigw-api-id`
    + `X-Forwarded-For`
    + `X-Forwarded-Host`
    + `X-Forwarded-Proto`
    + `x-restAPI`
    + `Via`
+ Basispfadeinschränkungen:
  + Die Länge des Basispfads darf maximal 128 Zeichen betragen.
  + Der Basispfad darf nur Buchstaben, Zahlen und die folgenden Zeichen enthalten: `$-_.+!*'()/`.

    Diese Zeichen werden für reguläre Ausdrücke (Regex) nicht unterstützt. 
  + Der Basispfad darf nicht mit einem umgekehrten Schrägstrich (`\`) beginnen oder enden.

# Beispiele dafür, wie API Gateway Routing-Regeln auswertet
<a name="rest-api-routing-rules-examples"></a>

Der folgende Abschnitt zeigt 4 Beispiele dafür, wie API Gateway Routing-Regeln und API-Zuweisungen auswertet.

## Beispiel 1: Nur Routing-Regeln
<a name="rest-api-routing-rules-examples-rule-only"></a>

In diesem Beispiel ist für den benutzerdefinierten Domainnamen `https://petstore.example.com` der Routing-Modus auf `ROUTING_RULE_ONLY` eingestellt und es gelten die folgenden Routing-Regeln und Prioritäten.


|  Regel-ID  |  Priorität  |  Bedingungen  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Wenn die Anfrage einen Header enthält: `Hello:World`   |   Ziel-API 1   | 
|  `zzz000`  |   50   |   Wenn die Anfrage die folgenden Header enthält: `Accept:image/webp` und `Pet:Dog-*` und wenn der Basispfad `PetStoreShopper` enthält  |   Ziel-API 2   | 
|  `efg456`  |   100   |  Keine  |   Ziel-API 3   | 

Die folgende Tabelle zeigt, wie API Gateway die vorherigen Routing-Regeln auf Beispielanfragen anwendet.


| Anfrage | Ausgewählte API | Erklärung | 
| --- | --- | --- | 
|  `https://petstore.example.com -h "Hello:World"`  |  Ziel-API 1  |  Die Anfrage entspricht der Routing-Regel `abc123`.  | 
|  `https://petstore.example.com/PetStoreShopper -h "Hello:World", "Pet:Dog-Bella", "Accept:image/webp"`  |  Ziel-API 1  |  API Gateway wertet alle Routing-Regeln in der Reihenfolge ihrer Priorität aus. Die Routing-Regel `abc123` hat die höchste Priorität und die Bedingungen stimmen überein, daher ruft API Gateway die Ziel-API 1 auf. Obwohl die Bedingungen der Anfrage auch der Routing-Regel `zzz000` übereinstimmen, wertet API Gateway nach einer Übereinstimmung keine weiteren Routing-Regeln aus.  | 
|  `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella", "Accept:image/webp"`  |  Ziel-API 2  |  Die Anfrage entspricht der Routing-Regel `zzz000`. Dies war eine Übereinstimmung, da `Pet:Dog-Bella` eine Zeichenfolgenübereinstimmung mit `Pet:Dog-*` war.  | 
|  `https://petstore.example.com/PetStoreShopper -h "Pet:Dog-Bella"`  |  Ziel-API 3  |  Die Anfrage entspricht nicht der Routing-Regel `abc123`. Die Anfrage entspricht nicht der Routing-Regel `zzz000`, da nicht alle erforderlichen Header vorhanden sind. Die nächste Prioritätsregel entspricht allen eingehenden Anfragen, daher ruft API Gateway die Ziel-API 3 auf.  | 

## Beispiel 2: Routing-Regeln und API-Zuweisungen
<a name="rest-api-routing-rules-examples-rule-and-mappings"></a>

In diesem Beispiel ist für den benutzerdefinierten Domainnamen `https://petstore.diagram.example.com` der Routing-Modus auf `ROUTING_RULE_THEN_API_MAPPING` festgelegt und es gelten die folgenden Routing-Regeln und API-Zuweisungen.


|  Regel-ID  |  Priorität  |  Bedingungen  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   1   |   Falls die Anfrage `pets` beinhaltet   |   Rufen Sie die `Prod`-Stufe der `PetStore`-API auf.   | 
|  `000zzz`  |   5   |   Wenn die Anfrage die folgenden Header enthält: `Cookie`:`*ux=beta*` und wenn der Basispfad `/refunds` enthält  |   Rufen Sie die `Beta`-Stufe der `Refunds`-API auf.   | 

Die folgende Tabelle zeigt die API-Zuweisungen für `https://petstore.backup.example.com`.


|  API-Zuweisungen  |  Ausgewählte API  | 
| --- | --- | 
|   `/refunds`   |   Rufen Sie die `Prod`-Stufe der `Refunds`-API auf.   | 
|   `(none)`   |   Rufen Sie die `Prod`-Stufe der `Search`-API auf.   | 

Das folgende Diagramm veranschaulicht, wie API Gateway die zuvor genannten Routing-Regeln und API-Zuweisungen auf Beispielanfragen anwendet. Die Beispielanfragen sind in der Tabelle nach diesem Diagramm zusammengefasst.

![\[Diagramm, wie API Gateway die vorherigen Routing-Regeln und API-Zuweisungen anwendet.\]](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/images/rr-diagram.png)


Die folgende Tabelle zeigt, wie API Gateway die vorherigen Routing-Regeln und API-Zuweisungen auf Beispielanfragen anwendet.


| Anfrage | Ausgewählte API | Erklärung | 
| --- | --- | --- | 
|  `https://petstore.diagram.com/pets`  |  Die `Prod`-Stufe der `PetStore`-API.  |  Die Anfrage entspricht der Routing-Regel `abc123`.  | 
|  `https://petstore.diagram.example.com/refunds -h "Cookie:lang=en-us;ux=beta"`  |  Die `Beta`-Stufe der `Refunds`-API.  |  Die Anfrage entspricht der Routing-Regel `000zzz`. Der `Cookie`-Header enthält die korrekte `*contains*`-Übereinstimmung und die Basispfadübereinstimmung für diese Bedingung.   | 
|  `https://petstore.diagram.example.com/refunds`  |  Die `Prod`-Stufe der `Refunds`-API.   |  Die Anfrage verfügt nicht über die erforderlichen Header, um mit der Routing-Regel `zzz000` übereinzustimmen. Wenn API Gateway eine Routing-Regel nicht erfolgreich abgleichen kann, greift es auf API-Zuweisungen zurück. API Gateway kann den Basispfad der `Prod`-Stufe der `Refunds`-API zuweisen.   | 
|  `https://petstore.diagram.example.com/`  |  Die `Prod`-Stufe der `Search`-API.   |  Die Anfrage stimmt mit der API-Zuweisung zum leeren Pfad `(none)` überein.  | 

## Beispiel 3: Routing-Regeln und API-Zuweisungen mit mehreren Ebenen
<a name="rest-api-routing-rules-examples-rule-and-mappings-with-multiple-levels"></a>

In diesem Beispiel ist für den benutzerdefinierten Domainnamen `https://petstore.backup.example.com` der Routing-Modus `ROUTING_RULE_THEN_API_MAPPING` festgelegt und es gelten die folgenden Routing-Regeln und API-Zuweisungen.

Die folgende Tabelle zeigt die Routing-Regeln für `https://petstore.backup.example.com`.


|  Regel-ID  |  Priorität  |  Bedingungen  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Wenn die Anfrage einen Header enthält: `Hello:World`   |   Ziel-API 1   | 
|  `000zzz`  |   50   |   Wenn die Anfrage die folgenden Header enthält: `Accept`:`image/webp` und `Pet:Dog-*` und wenn der Basispfad `PetStoreShopper` enthält  |  Ziel-API 2  | 

Die folgende Tabelle zeigt die API-Zuweisungen für `https://petstore.backup.example.com`.


|  API-Zuweisungen  |  Ausgewählte API  | 
| --- | --- | 
|   `PetStoreShopper`   |   Ziel-API 3   | 
|   `PetStoreShopper/cats`   |   Ziel-API 4   | 

Die folgende Tabelle zeigt, wie API Gateway die vorherigen Routing-Regeln und API-Zuweisungen auf Beispielanfragen anwendet.


| Anfrage | Ausgewählte API | Erklärung | 
| --- | --- | --- | 
|  `https://petstore.example.com/PetStoreShopper -h "Accept:image/webp", "Pet:Cats" `  |  Ziel-API 3  |  Die Anfrage verfügt nicht über die erforderlichen Header, um mit der Routing-Regel `zzz000` übereinzustimmen. Wenn API Gateway eine Routing-Regel nicht erfolgreich abgleichen kann, greift es auf API-Zuweisungen zurück. API Gateway kann den Basispfad der Ziel-API 3 zuweisen.  | 
|  `https://petstore.example.com/PetStoreShopper/cats -h "Hello:World"`  |  Ziel-API 1  |  Die Anfrage entspricht der Routing-Regel `abc123`. Wenn der Routing-Modus auf `ROUTING_RULE_THEN_API_MAPPING` festgelegt ist, haben Routing-Regeln immer Vorrang vor API-Zuweisungen.  | 
|  `https://petstore.example.com/Admin -h "Pet:Dog-Bella"`  |  Keine  |  Die Anfrage entspricht keiner Routing-Regel und keinen API-Zuweisungen. Da keine Standard-Routing-Regel vorliegt, lehnt API Gateway den Aufruf ab und sendet dem Aufrufer den Statuscode `403 Forbidden`.  | 

## Beispiel 4: Routing-Regeln für Platzhalter-Domainnamen
<a name="rest-api-routing-rules-examples-rule-for-wildcard-domains"></a>

In diesem Beispiel ist der benutzerdefinierte Domainname `https://*.example.com` ein Platzhalter-Domainname. Der Platzhalter unterstützt alle Subdomains, die auf dieselbe Domain zurückgeleitet werden. Die folgenden Beispiel-Routing-Regeln ändern dieses Verhalten, sodass Subdomains mithilfe des Headers an ein anderes Ziel APIs weiterleiten können. `Host`

Die folgende Tabelle zeigt die Routing-Regeln für `https://*.example.com`.


|  Regel-ID  |  Priorität  |  Bedingungen  |  Action  | 
| --- | --- | --- | --- | 
|  `abc123`  |   10   |   Wenn die Anfrage einen Header enthält: `Host:a.example.com`   |   Ziel-API 1   | 
|  `000zzz`  |   50   |   Wenn die Anfrage Header enthält: `Host:b.example.com`  |  Ziel-API 2  | 
|  `efg456`  |   500   |  Keine  |  Ziel-API 3  | 

Die folgende Tabelle zeigt, wie API Gateway die vorherigen Routing-Regeln auf Beispielanfragen anwendet.


| Anfrage | Ausgewählte API | Erklärung | 
| --- | --- | --- | 
|  `https://a.example.com`  |  Ziel-API 1  |  Der `Host`-Header ist `a.example.com`. Diese Anfrage entspricht der Routing-Regel `abc123`.  | 
|  `https://b.example.com`  |  Ziel-API 2  |  Der `Host`-Header ist `b.example.com`. Diese Anfrage entspricht der Routing-Regel `000zzz`.  | 
|  `https://testing.example.com`  |  Ziel-API 3  |  Dies entspricht der Auffang-Routing-Regel `efg456`.  | 

# Verwendung von Routing-Regeln
<a name="apigateway-routing-rules-use"></a>

Sie können eine Routingregel mit dem AWS-Managementkonsole AWS CLI, oder einem beliebigen AWS SDK erstellen. Nachdem Sie eine Regel erstellt haben, können Sie deren Priorität ändern.

## Erstellen einer Routing-Regel
<a name="rest-api-routing-rules-create"></a>

Das folgende Verfahren zeigt, wie Sie eine Routing-Regel für einen benutzerdefinierten Domainnamen erstellen, dessen Routing-Modus entweder auf `ROUTING_RULE_THEN_API_MAPPING` oder `ROUTING_RULE_ONLY` festgelegt ist.

------
#### [ AWS-Managementkonsole ]

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie **Benutzerdefinierte Domainnamen** im Hauptnavigationsbereich aus. 

1. Wählen Sie einen benutzerdefinierten Domainnamen aus.

1. Wählen Sie auf der Registerkarte **Routing-Details** die Option **Routing-Regel hinzufügen** aus.

1. Wählen Sie **Neue Bedingung hinzufügen** aus, um eine neue Bedingung hinzuzufügen.

   Sie können eine Header- oder Basispfadbedingung hinzufügen. Um alle eingehenden Anfragen Ihrem benutzerdefinierten Domainnamen zuzuweisen, fügen Sie keine Bedingung hinzu. 

1. Verwenden Sie für **Aktion** das Dropdown-Menü, um Ihre Ziel-API und Ihre Zielstufe auszuwählen.

1. Wählen Sie **Weiter** aus.

1. Geben Sie im Prioritätsfeld eine Zahl für Ihre Priorität ein.

   API Gateway wertet Regeln in der Reihenfolge der Priorität aus, ausgehend vom niedrigsten Wert bis hin zum höchsten Wert.

   Wenn Sie eine Regel ohne Bedingung erstellen, empfehlen wir, eine Priorität mit hohem Wert zu verwenden.

1. Wählen Sie **Routing-Regel erstellen** aus.

------
#### [ AWS CLI ]

Mit dem folgenden [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html)Befehl wird eine Routingregel mit der Priorität 50 erstellt. In diesem Beispiel leitet API Gateway alle eingehenden Anfragen, die die Header `Hello:World`, `x-version:beta` sowie den Basispfad `PetStoreShopper` enthalten, an die Ziel-API `a1b2c3` weiter.

```
 aws apigatewayv2 create-routing-rule \
  --domain-name 'api.example.com' \
  --priority 50 \
  --conditions '[
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "Hello",
            "ValueGlob": "World"
          }
        ]
      }
    },
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "x-version",
            "ValueGlob": "beta"
          }
        ]
      }
    },
    {
      "MatchBasePaths": {
        "AnyOf": [
          "PetStoreShopper"
        ]
      }
    }
  ]'\
  --actions '[
  {
    "InvokeApi": {
      "ApiId": "a1b2c3",
      "Stage": "prod"
    }
  }
 ]'
```

Die Ausgabe sieht wie folgt aus.

```
{
    "Actions": [
        {
            "InvokeApi": {
                "ApiId": "a1b2c3",
                "Stage": "prod",
                "StripBasePath": false
            }
        }
    ],
    "Conditions": [
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "Hello",
                        "ValueGlob": "World"
                    }
                ]
            }
        },
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "x-version",
                        "ValueGlob": "beta"
                    }
                ]
            }
        },
        {
            "MatchBasePaths": {
                "AnyOf": [
                    "PetStoreShopper"
                ]
            }
        }
    ],
    "Priority": 50,
    "RoutingRuleArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/api.example.com/routingrules/abc123",
    "RoutingRuleId": "abc123"
}
```

------

## Ändern der Priorität einer Routing-Regel
<a name="rest-api-routing-rules-change-priority"></a>

Sie können die Priorität einer Routing-Regel ändern. Dies tritt sofort in Kraft und kann beeinflussen, wie API-Benutzer Ihre benutzerdefinierten Domainnamen aufrufen. Wir empfehlen, beim Festlegen der Prioritäten Ihrer Routing-Regeln Lücken zwischen den Regeln zu lassen.

Stellen Sie sich beispielsweise zwei Routing-Regeln vor: Regel `abc123` mit einer Priorität von 50 und Regel `zzz000` mit einer Priorität von 150. Um die Priorität so zu ändern, dass API Gateway Regel `zzz000` zuerst auswertet, können Sie die Priorität von Regel `zzz000` auf 30 setzen.

------
#### [ AWS-Managementkonsole ]

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie **Benutzerdefinierte Domainnamen** im Hauptnavigationsbereich aus. 

1. Wählen Sie einen benutzerdefinierten Domainnamen aus.

1. Wählen Sie auf der Registerkarte **Routing-Details** zunächst Ihre Routing-Regel und anschließend **Bearbeiten** aus. 

1. Wählen Sie **Weiter** aus.

1. Geben Sie unter „Priorität“ die neue Priorität ein.

1. Wählen Sie **Änderungen speichern ** aus.

------
#### [ AWS CLI ]

Der folgende [put-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/put-routing-rule.html)Befehl ändert die Priorität einer Routing-Regel. `abc123`

```
 aws apigatewayv2 put-routing-rule \
  --domain-name 'api.example.com' \
  --priority 30 \
  --routing-rule-id abc123 \
  --conditions '[
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "Hello",
            "ValueGlob": "World"
          }
        ]
      }
    },
    {
      "MatchHeaders": {
        "AnyOf": [
          {
            "Header": "x-version",
            "ValueGlob": "beta"
          }
        ]
      }
    },
    {
      "MatchBasePaths": {
        "AnyOf": [
          "PetStoreShopper"
        ]
      }
    }
  ]'\
  --actions '[
  {
    "InvokeApi": {
      "ApiId": "a1b2c3",
      "Stage": "prod"
    }
  }
 ]'
```

Die Ausgabe sieht wie folgt aus:

```
{
    "Actions": [
        {
            "InvokeApi": {
                "ApiId": "a1b2c3",
                "Stage": "prod",
                "StripBasePath": false
            }
        }
    ],
    "Conditions": [
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "Hello",
                        "ValueGlob": "World"
                    }
                ]
            }
        },
        {
            "MatchHeaders": {
                "AnyOf": [
                    {
                        "Header": "x-version",
                        "ValueGlob": "beta"
                    }
                ]
            }
        },
        {
            "MatchBasePaths": {
                "AnyOf": [
                    "PetStoreShopper"
                ]
            }
        }
    ],
    "Priority": 38,
    "RoutingRuleArn": "arn:aws:apigateway:us-west-2:111122223333:/domainnames/api.example.com/routingrules/abc123",
    "RoutingRuleId": "abc123"
}
```

------

# API-Zuweisung mithilfe von Routing-Regeln neu erstellen
<a name="rest-api-routing-rules-recreate-api-mapping"></a>

Sie können eine API-Zuweisung mithilfe von Routing-Regeln neu erstellen. Um eine API-Zuweisung neu zu erstellen, stellen Sie sicher, dass das Entfernen des Basispfads aktiviert ist. Dadurch bleibt das Verhalten der API-Zuweisungen erhalten. Weitere Informationen finden Sie unter [Entfernen des Basispfads mit Basispfadbedingungen](rest-api-routing-rules.md#rest-api-routing-rules-condition-path-split).

Das folgende Tutorial zeigt, wie Sie die API-Zuweisung `https:// api.example.com/orders/v2/items/categories/5` als Routing-Regel neu erstellen. Außerdem erfahren Sie, wie Sie Ihre Zugriffsprotokolle aktualisieren, um die Routing-Regel-ID zu protokollieren, die API Gateway verwendet, um Datenverkehr an Ihre API zu senden.

------
#### [ AWS-Managementkonsole ]

**Um den Routingmodus auf ROUTING\$1RULE\$1THEN\$1 einzustellen API\$1MAPPING**

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie **Benutzerdefinierte Domainnamen** im Hauptnavigationsbereich aus. 

1. Wählen Sie Ihren benutzerdefinierten Domainnamen aus.

1. Wählen Sie unter **Domänendetails** die Option **Bearbeiten** aus.

1. **Wählen Sie für den **Routing-Modus ROUTING\$1RULE\$1THEN\$1**. API\$1MAPPING**

1. Wählen Sie **Speichern** aus. 

Nachdem Sie den Routing-Modus festgelegt haben, erstellen Sie die Routing-Regel.

**So erstellen Sie die Routing-Regel**

1. Wählen Sie auf der Registerkarte **Routing-Details** die Option **Routing-Regel hinzufügen** aus.

1. Wählen Sie **Neue Bedingung hinzufügen** und dann **Pfad** aus.

1. Geben Sie unter **Pfad** den Wert **orders/v2/items/categories/5** ein.

1. Wählen Sie für **Leerzeichen des Basispfads entfernen** die Option **Aktiv** aus.

1. Wählen Sie für **Ziel-API** Ihre Ziel-API aus.

1. Wählen Sie für **Zielstufe** Ihre Zielstufe aus.

1. Wählen Sie **Weiter** aus.

1. Geben Sie unter „Priorität“ eine Priorität ein.

   Auch wenn Sie Ihre bestehende API-Zuweisung beibehalten, verwendet API Gateway immer die neue Routing-Regel, da Routing-Regeln stets Vorrang vor API-Zuweisungen haben.

1. Wählen Sie **Änderungen speichern ** aus.

Nachdem Sie die Routing-Regel erstellt haben, aktualisieren Sie das Zugriffsprotokollformat für Ihre Stufe oder erstellen Sie ein neues Protokoll, um sicherzustellen, dass API Gateway Ihre Routing-Regel verwendet, um den Datenverkehr an Ihre API weiterzuleiten.

**So aktualisieren Sie Ihre Zugriffsprotokolle**

1. Melden Sie sich bei der API Gateway Gateway-Konsole unter [https://console.aws.amazon.com/apigatewayan](https://console.aws.amazon.com/apigateway).

1. Wählen Sie Ihre API aus.

1. Klicken Sie im Hauptnavigationsbereich auf **Stufen**.

1. Wählen Sie unter **Protokolle und Ablaufverfolgung** die Option **Bearbeiten** aus.

   Wenn Sie keine Protokollgruppe haben, siehe [Richten Sie die CloudWatch Protokollierung für REST APIs in API Gateway ein](set-up-logging.md).

1. Fügen Sie **\$1context.customDomain.routingRuleIdMatched** Ihrem Protokollformat hinzu.

   Diese Protokollgruppe zeichnet die Routing-Regel-ID auf, die API Gateway verwendet hat, um Datenverkehr an Ihre API zu senden. Weitere Informationen finden Sie unter [Ich kann nicht sagen, wie API Gateway Traffic an meinen gesendet hat APIs](rest-api-routing-rules-troubleshoot.md#rest-api-routing-rules-logging).

1. Wählen Sie **Speichern** aus.

Nachdem Sie Ihre Zugriffsprotokolle aktualisiert haben, rufen Sie Ihren benutzerdefinierten Domainnamen auf. Das folgende Beispiel zeigt einen curl-Befehl zum Aufrufen des benutzerdefinierten Domainnamens `https://api.example.com` mit dem Basispfad `orders/v2/items/categories/5`.

```
curl "https://api.example.com/orders/v2/items/categories/5"
```

Nachdem Sie Ihren benutzerdefinierten Domainnamen erfolgreich aufgerufen haben, vergewissern Sie sich, dass CloudWatch Logs das anzeigt. `routingRuleIdMatched` Informationen zur Verwendung der CloudWatch Logs-Konsole zum Anzeigen einer Protokollgruppe finden Sie unter[API Gateway Gateway-Protokollereignisse in der CloudWatch Konsole anzeigen](view-cloudwatch-log-events-in-cloudwatch-console.md).

------
#### [ AWS CLI ]

1. Verwenden Sie den folgenden [update-domain-name](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-domain-name.html)Befehl, um den Domainnamen `api.example.com` zu aktualisieren, um den Routing-Modus zu verwenden`ROUTING_RULE_THEN_API_MAPPING`.

   ```
   aws apigatewayv2 update-domain-name \
     --domain-name 'api.example.com' \
     --routing-mode ROUTING_RULE_THEN_API_MAPPING
   ```

1. Verwenden Sie den folgenden [create-routing-rule](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-routing-rule.html)Befehl, um eine neue Routing-Regel zu erstellen, um die API-Zuordnung `https://api.example.com/orders/v2/items/categories/5` neu zu erstellen.

   ```
   aws apigatewayv2 create-routing-rule \
     --domain-name 'api.example.com' \
     --priority 50 \
     --conditions '[
     {
       "MatchBasePaths": {
         "AnyOf": [
           "orders/v2/items/categories/5"
         ]
       }
     }
   ]' \
     --actions '[
     {
       "InvokeApi": {
         "ApiId": "a1b2c3",
         "Stage": "prod",
         "StripBasePath": true
       }
     }
   ]'
   ```

1. Verwenden Sie den folgenden Befehl [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html), um das Format der Zugriffsprotokolle so zu aktualisieren, dass die Variable `$context.customDomain.routingRuleIdMatched` enthalten ist. Diese Variable zeichnet die Routing-Regel-ID auf, die API Gateway verwendet hat, um Datenverkehr an Ihre API zu senden. Sie verwenden dieses Protokoll als Bestätigung, dass API Gateway Ihre Routing-Regel verwendet, um Datenverkehr an Ihre API zu senden. Weitere Informationen finden Sie unter [Ich kann nicht sagen, wie API Gateway Traffic an meinen gesendet hat APIs](rest-api-routing-rules-troubleshoot.md#rest-api-routing-rules-logging).

   ```
   aws apigateway update-stage \
     --rest-api-id a1bc2c3 \
     --stage-name prod \
     --patch-operations "op=replace,path=/accessLogSettings/format,value='\$context.path \$context.customDomain.routingRuleIdMatched \$context.requestId \$context.extendedRequestId'"
   ```

   Wenn Sie keine Protokollgruppe haben, siehe [Richten Sie die CloudWatch Protokollierung für REST APIs in API Gateway ein](set-up-logging.md).

1. Verwenden Sie den folgenden curl-Befehl, um Ihren benutzerdefinierten Domainnamen mit dem Basispfad `orders/v2/items/categories/5` aufzurufen.

   ```
   curl "https://api.example.com/orders/v2/items/categories/5
   ```

1. Verwenden Sie den folgenden [filter-log-events](https://docs.aws.amazon.com/cli/latest/reference/logs/filter-log-events.html)Befehl, um die Protokollereignisse aus der Protokollgruppe abzurufen`access-log-group-orders`, die die Routingregel-ID `abc123` enthalten.

   ```
   aws logs filter-log-events --log-group-name access-log-group-orders --filter-pattern abc123
   ```

    Damit wird bestätigt, dass API Gateway die Routing-Regel verwendet hat, um den Datenverkehr an Ihre API zu senden.

------

# Fehlerbehebung bei Problemen mit Routing-Regeln
<a name="rest-api-routing-rules-troubleshoot"></a>

Die folgende Anleitung zur Fehlerbehebung kann helfen, Probleme mit Ihren Routing-Regeln zu beheben.

## Ich kann nicht sagen, wie API Gateway Traffic an meinen gesendet hat APIs
<a name="rest-api-routing-rules-logging"></a>

Sie können Zugriffsprotokolle für die Stufe Ihrer REST-API verwenden, um Ihre Routing-Regeln zu protokollieren und Fehler zu beheben. Mithilfe der Variablen `$context.customDomain.routingRuleIdMatched` können Sie die Routing-Regel-ID anzeigen, die API Gateway verwendet hat, um Datenverkehr an Ihre API zu senden. Um die API-Zuweisung anzuzeigen, die API Gateway verwendet hat, um Datenverkehr an Ihre API zu senden, verwenden Sie die Variable `$context.customDomain.basePathMatched`. 

 Um Ihre Routing-Regeln zu protokollieren, müssen Sie [einen entsprechenden CloudWatch Logs-Rollen-ARN](set-up-logging.md#set-up-access-logging-permissions) für Ihr Konto konfigurieren und eine Protokollgruppe erstellen.

Die folgende Beispielprotokollgruppe für Zugriffsprotokolle kann die relevanten Informationen zum Beheben von Problemen mit Routing-Regeln und API-Zuweisungen abrufen. API Gateway füllt die Kontextvariable nur für den Routing-Mechanismus aus, den es tatsächlich verwendet hat. Andernfalls ist die Kontextvariable `-`. 

------
#### [ CLF ]

```
$context.path $context.customDomain.routingRuleIdMatched $context.customDomain.basePathMatched $context.requestId $context.extendedRequestId
```

------
#### [ JSON ]

```
{"requestPath": "$context.path", "routingRuleId" : "$context.customDomain.routingRuleIdMatched", "API mapping" : "$context.customDomain.basePathMatched", "requestId":"$context.requestId", "extendedRequestId":"$context.extendedRequestId"}
```

------
#### [ XML ]

```
<request id="$context.requestId"> <requestPath>$context.path</requestPath> <ruleId>$context.customDomain.routingRuleIdMatched</ruleId> <ApiMapping>$context.customDomain.basePathMatched</ApiMapping> <extendedRequestId>$context.extendedRequestId</extendedRequestId> </request>
```

------
#### [ CSV ]

```
$context.path,$context.customDomain.routingRuleIdMatched,$context.customDomain.basePathMatched,$context.requestId,$context.extendedRequestId
```

------

Wir empfehlen außerdem, den Routing-Modus für Ihren benutzerdefinierten Domainnamen zu bestätigen. Weitere Informationen finden Sie unter [Festlegen des Routing-Modus für Ihren benutzerdefinierten Domainnamen](set-routing-mode.md).

## Ich kann keine Routing-Regeln für meinen benutzerdefinierten Domainnamen aktivieren
<a name="rest-routing-rules-access-denied"></a>

Möglicherweise erhalten Sie den folgenden Fehler von API Gateway:

```
Your account doesn’t have permission to use RoutingRules.
This might be caused by an IAM policy in your account with a deny statement on BasePathMapping or ApiMapping.
To grant permission for this account to use RoutingRules, use the UpdateAccount API.
This will impact any existing IAM policies that deny access to BasePathMapping or ApiMapping.
See API Gateway documentation for further details.
```

Sie erhalten diesen Fehler, wenn Sie eine IAM-Richtlinie haben oder hatten, die den Zugriff [BasePathMapping](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagement.html#amazonapigatewaymanagement-resources-for-iam-policies)auf oder verweigert. [ApiMapping](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagementv2.html#amazonapigatewaymanagementv2-resources-for-iam-policies) Wenn Sie Routing-Regeln für einen benutzerdefinierten Domainnamen aktivieren, wird der Zugriff auf `BasePathMapping` oder `ApiMapping` durch Ihre Richtlinie weiterhin verweigert. Dieselbe Richtlinie kann jedoch verwendet werden, um auf `RoutingRule` zuzugreifen. Dadurch könnte ein Benutzer das Routing-Verhalten Ihres benutzerdefinierten Domainnamens ändern.

Wenn Sie beispielsweise eine Richtlinie wie die folgende hatten:

```
{
    "Sid": "DenyCreatingApiMappings",
    "Effect": "Deny",
    "Action": "apigateway:POST",
    "Resource": [
        "arn:aws:apigateway:us-west-2::/domainnames/example.com/apimappings"
    ]
}
```

Wenn Sie Routing-Regeln für `example.com` aktivieren, wird durch diese Richtlinie weiterhin der Zugriff auf das Erstellen einer `ApiMapping` verweigert, aber der Zugriff auf das Erstellen einer `RoutingRule` wird nicht verweigert.

Wir empfehlen, die IAM-Richtlinien in Ihrem Konto zu überprüfen. Die folgende Beispielrichtlinie verweigert den Zugriff auf das Erstellen von `ApiMapping`, `BasePathMapping` und`RoutingRule`:

```
{
    "Sid": "DenyCreatingBasePathMappingsApiMappings",
    "Effect": "Deny",
    "Action": "apigateway:POST",
    "Resource": [
        "arn:aws:apigateway:us-west-2::/domainnames/example.com/basepathmappings",
        "arn:aws:apigateway:us-west-2::/domainnames/example.com/apimappings"
    ]
},
{
    "Sid": "DenyCreatingRoutingRules",
    "Effect": "Deny",
    "Action": "apigateway:CreateRoutingRule",
    "Resource": [
        "arn:aws:apigateway:us-west-2:111122223333:/domainnames/example.com/routingrules/*"
    ]
}
```

Nachdem Sie bestätigt haben, dass alle Ihre Richtlinien aktualisiert wurden, können Sie die kontoweiten Einstellungen Ihrer API aktualisieren, um Routing-Regeln für eine Region zu aktivieren.

Verwenden Sie dazu den folgenden [update-account](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-account.html)-Befehl, um die Einstellungen für die kontoweiten API-Einstellungen für eine Region zu aktualisieren:

```
aws apigateway update-account --patch-operations 'op=remove,path=/features,value=BlockedForRoutingRules' --region us-west-2
```

Nachdem Sie die kontoweiten Einstellungen Ihrer API aktualisiert haben, können Sie den Routing-Modus Ihres benutzerdefinierten Domainnamens ändern. Sie können außerdem weiterhin IAM-Richtlinien verwenden, um den Zugriff auf `RoutingRules`, `ApiMapping` oder `BasePathMapping` zu verweigern.