将 API 阶段连接到 REST API 的自定义域名的路由规则
路由规则是一组条件,匹配时会调用操作。例如,规则可以将任何传入的请求路由到自定义域名,该域名包含标头 Hello:World
并包含指向 REST API 的 production
阶段的基本路径 users
。
规则按优先级顺序进行评估,如果您将路由模式设置为 ROUTING_RULE_THEN_API_MAPPING
,则 API Gateway 将始终在评估任何 API 映射之前评估所有路由规则。以下列表描述了路由规则如何使用条件、操作和优先级。
- Conditions
-
当规则的条件满足时,将执行其操作。API Gateway 最多支持两个标头条件和一个路径条件。API Gateway 会一起评估标头条件和基本路径条件。
您可以创建不带任何条件的规则。当 API Gateway 评估此规则时,将始终执行该操作。您可以创建不带任何条件的规则作为“捕获全部”规则。
- 操作
-
操作是将条件与路由规则匹配的结果。当前,唯一受支持的操作是调用 REST API 的阶段。
每条规则可以有一个操作。
- 优先级
-
优先级决定了评估规则的顺序(从最低值到最高值)。规则不能具有相同的优先级。
您可以将优先级设置为 1-1000000。如果规则的优先级为 1,则 API Gateway 首先对其进行评估。我们建议在创建规则时,在优先级间添加间隔。这有助于您切换规则的优先级并添加新规则。有关更多信息,请参阅 更改路由规则的优先级。
有关 API Gateway 如何评估路由规则的示例,请参阅有关 API Gateway 如何评估路由规则的示例。
API Gateway 路由规则条件类型
下一节介绍路由规则条件类型。仅当所有条件均为 true 时,API Gateway 才会匹配规则。
匹配标头条件
创建标头条件时,可以匹配标头名称和标头 glob 值,例如 Hello:World
。API Gateway 使用文字匹配来验证匹配标头条件。您的条件最多可以使用两个标头,并在标头之间使用 AND
。例如,如果传入的请求包含 Hello:World
和 x-version:beta
,则条件可以匹配。
标头名称匹配不区分大小写,但标头 glob 值区分大小写。Hello:World
将匹配 hello:World
,但不匹配 Hello:world
。
有关受限标头值的列表,请参阅限制。
将通配符与标头条件结合使用
只能在标头 glob 值中使用通配符,并且通配符必须是 *prefix-match
、suffix-match*
或 *contains*
。下表显示了如何使用通配符来匹配标头条件的示例。
标头条件 | 与路由规则匹配的请求 | 与路由规则不匹配的请求 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
无 |
如果您为多个标头值创建条件(例如 Accept:application/json,text/xml
),我们建议您将 *contains*
用于标头条件,并避免使用逗号 (,
) 字符创建条件。
由于 API Gateway 按字面匹配标头条件,因此可能会以不同的方式路由语义匹配。下表显示了路由规则结果的差异。
标头条件 | 与路由规则匹配的请求 | 与路由规则不匹配的请求 |
---|---|---|
|
|
|
|
|
无 |
匹配基本路径条件
创建基本路径条件时,如果传入的请求包含您指定的路径,则匹配该规则。匹配区分大小写,因此路径 New/Users
将与 new/users
不匹配。
您只能为一条基本路径创建基本路径条件。
有关受限基本路径条件的列表,请参阅限制。
使用基本路径条件删除基本路径
创建基本路径条件时,可以选择删除基本路径。当您删除基本路径时,API Gateway 会在调用目标 API 时移除传入的匹配基本路径。这与您使用 API 映射时的行为相同。当您不删除基本路径时,API Gateway 会将整个基本路径转发到目标 API。我们建议您仅在重新创建 API 映射时才删除基本路径。
下表显示了 API Gateway 如何评估删除基本路径条件的示例。
状况 | 删除基本路径 | 传入请求 | 结果 |
---|---|---|---|
如果基本路径包含 |
True |
|
API Gateway 调用 |
如果基本路径包含 |
False |
|
API Gateway 调用 |
如果基本路径包含 |
True |
|
API Gateway 调用 |
如果基本路径包含 |
False |
|
API Gateway 调用 |
如果基本路径包含 |
True |
|
API Gateway 使用查询字符串参数 |
如果基本路径包含 |
False |
|
API Gateway 使用查询字符串参数 |
限制
-
目标 API 和自定义域名必须位于同一个 Amazon 账户中。
每条规则可以有一个目标 API。
-
您只能为私有自定义域名创建指向私有 API 的路由规则,以及为公有自定义域名创建指向公有 API 的路由规则。您不能混合公有资源和私有资源。
-
如果自定义域名具有到 REST 和 HTTP API 的 API 映射,则不支持路由规则。
最大优先级数字为 1000000。
-
标头限制:
每个
anyOf
条件只能包含一个标头值。-
RFC 7230
规定了标头名称和标头 glob 值支持的仅有字符,即 a-z
、A-Z
、0-9
和以下特殊字符:*?-!#$%&'.^_`|~
。 -
可以在标头 glob 值中使用通配符,但通配符必须为
*prefix-match
、suffix-match*
或*contains*
。不能在标头 glob 值的中间使用*
。 不支持通配符标头名称。
标头名称必须少于 40 个字符。
标头 glob 值必须少于 128 个字符。
中缀匹配的标头 glob 值必须少于 40 个字符。
不支持将以下标头作为条件:
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-Forwarded-For
X-Forwarded-Host
X-Forwarded-Proto
Via
-
基本路径限制:
基本名称长度必须少于 128 个字符。
-
基本路径必须仅包含字母、数字和以下字符:
$-_.+!*'()/
。 基本路径不能以反斜杠 (
/
) 字符开头或结尾。