You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by sy...@apache.org on 2022/10/27 01:42:20 UTC
[apisix] branch master updated: docs: refactor admin api doc (#8145)
This is an automated email from the ASF dual-hosted git repository.
sylviasu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git
The following commit(s) were added to refs/heads/master by this push:
new df6923913 docs: refactor admin api doc (#8145)
df6923913 is described below
commit df6923913b8add64883bb1df4a0507ce480837ca
Author: Fei Han <97...@users.noreply.github.com>
AuthorDate: Thu Oct 27 09:42:11 2022 +0800
docs: refactor admin api doc (#8145)
* docs: refactor admin api doc
---
docs/zh/latest/admin-api.md | 1702 ++++++++++++++++++++++++-------------------
1 file changed, 958 insertions(+), 744 deletions(-)
diff --git a/docs/zh/latest/admin-api.md b/docs/zh/latest/admin-api.md
index 070800bf7..9d66b8bbd 100644
--- a/docs/zh/latest/admin-api.md
+++ b/docs/zh/latest/admin-api.md
@@ -1,5 +1,13 @@
---
title: Admin API
+keywords:
+ - APISIX
+ - API 网关
+ - Admin API
+ - 路由
+ - 插件
+ - 上游
+description: 本文介绍了 Apache APISIX Admin API 支持的功能,你可以通过 Admin API 来获取、创建、更新以及删除资源。
---
<!--
@@ -21,78 +29,121 @@ title: Admin API
#
-->
-## 描述
+## 描述 {#description}
-Admin API 是为 Apache APISIX 服务的一组 API,我们可以将参数传递给 Admin API 以控制 APISIX 节点。更好地了解其工作原理,请参阅 [Architecture Design](./architecture-design/apisix.md) 中的文档。
+Admin API 是一组用于配置 Apache APISIX 路由、上游、服务、SSL 证书等功能的 RESTful API。
-启动 Apache APISIX 时,默认情况下 Admin API 将监听 `9180` 端口。您可以通过修改 [conf/config.yaml](https://github.com/apache/apisix/blob/master/conf/config.yaml) 文件来改变默认监听的端口。
+你可以通过 Admin API 来获取、创建、更新以及删除资源。同时得益于 APISIX 的热加载能力,资源配置完成后 APISIX 将会自动更新配置,无需重启服务。如果你想要了解其工作原理,请参考 [Architecture Design](./architecture-design/apisix.md)。
-在下面出现的 `X-API-KEY` 指的是 `conf/config.yaml` 文件中的 `deployment.admin.admin_key.key`,它是 Admin API 的访问 token。
+## 相关配置 {#basic-configuration}
-## V3
+当 APISIX 启动时,Admin API 默认情况下将会监听 `9180` 端口,并且会占用前缀为 `/apisix/admin` 的 API。
-Admin API 在 V3 版本中做了一些不向下兼容的调整,以及支持更多特性。
+因此,为了避免你设计的 API 与 `/apisix/admin` 冲突,你可以通过修改配置文件 [`/conf/config.yaml`](https://github.com/apache/apisix/blob/master/conf/config.yaml) 中的配置修改默认监听端口。
-### 支持新的响应体格式
+APISIX 支持设置 Admin API 的 IP 访问白名单,防止 APISIX 被非法访问和攻击。你可以在 `./conf/config.yaml` 文件中的 `deployment.admin.allow_admin` 选项中,配置允许访问的 IP 地址。
-1. 移除响应体中的 `action` 字段;
-2. 调整获取资源列表时的响应体结构,新的响应体结构示例如下:
+在下文出现的 `X-API-KEY` 指的是 `./conf/config.yaml` 文件中的 `deployment.admin.admin_key.key`,它是 Admin API 的访问 token。
-返回单个资源:
+:::tip 提示
-```json
-{
- "modifiedIndex": 2685183,
- "value": {
- "id": "1",
- ...
- },
- "key": "/apisix/routes/1",
- "createdIndex": 2684956
-}
+建议你修改 Admin API 默认的监听端口、IP 访问白名单以及 Admin API 的 token,以保证你的 API 安全。
+
+:::
+
+```yaml title="./conf/config.yaml"
+deployment:
+ admin:
+ admin_key:
+ - name: admin
+ key: edd1c9f034335f136f87ad84b625c8f1 # 使用默认的 Admin API Key 存在安全风险,部署到生产环境时请及时更新
+ role: admin
+ allow_admin: # http://nginx.org/en/docs/http/ngx_http_access_module.html#allow
+ - 127.0.0.0/24
+ admin_listen:
+ ip: 0.0.0.0 # Admin API 监听的 IP,如果不设置,默认为“0.0.0.0”。
+ port: 9180 # Admin API 监听的 端口,必须使用与 node_listen 不同的端口。
```
-返回多个资源:
+## v3 版本新功能 {#v3-new-function}
-```json
-{
- "list": [
+在 APISIX v3 版本中,Admin API 支持了一些不向下兼容的新特性,比如支持新的响应体格式、支持分页查询、支持过滤资源等。
+
+### 支持新的响应体格式 {#support-new-response-body-format}
+
+APISIX 在 v3 版本对响应体做了以下调整:
+
+- 移除旧版本响应体中的 `action` 字段;
+- 调整获取资源列表时的响应体结构,新的响应体结构示例如下:
+
+返回单个资源:
+
+ ```json
{
- "modifiedIndex": 2685183,
- "value": {
+ "modifiedIndex": 2685183,
+ "value": {
"id": "1",
...
- },
- "key": "/apisix/routes/1",
- "createdIndex": 2684956
},
+ "key": "/apisix/routes/1",
+ "createdIndex": 2684956
+ }
+ ```
+
+返回多个资源:
+
+ ```json
{
- "modifiedIndex": 2685163,
- "value": {
- "id": "2",
- ...
- },
- "key": "/apisix/routes/2",
- "createdIndex": 2685163
+ "list": [
+ {
+ "modifiedIndex": 2685183,
+ "value": {
+ "id": "1",
+ ...
+ },
+ "key": "/apisix/routes/1",
+ "createdIndex": 2684956
+ },
+ {
+ "modifiedIndex": 2685163,
+ "value": {
+ "id": "2",
+ ...
+ },
+ "key": "/apisix/routes/2",
+ "createdIndex": 2685163
+ }
+ ],
+ "total": 2
}
- ],
- "total": 2
-}
-```
+ ```
+
+### 支持分页查询 {#support-paging-query}
+
+获取资源列表时支持分页查询,目前支持分页查询的资源如下:
-### 支持分页查询
+- [Consumer](#consumer)
+- [Consumer Group](#consumer-group)
+- [Global Rules](#global-rules)
+- [Plugin Config](#plugin-config)
+- [Protos](https://apisix.apache.org/zh/docs/apisix/plugins/grpc-transcode/#%E5%90%AF%E7%94%A8%E6%8F%92%E4%BB%B6)
+- [Route](#route)
+- [Service](#service)
+- [SSL](#ssl)
+- [Stream Route](#stream-route)
+- [Upstream](#upstream)
-获取资源列表时支持分页查询,分页参数包括:
+参数如下:
-| 参数 | 默认值 | 范围 | 说明 |
-| --------- | ------ | -------- | ------------ |
-| page | 1 | [1, ...] | 页数 |
-| page_size | | [10, 500]| 每页资源数量 |
+| 名称 | 默认值 | 范围 | 描述 |
+| --------- | ------ | -------- | -------------------------------------------------- |
+| page | 1 | [1, ...] | 页数,默认展示第一页。 |
+| page_size | | [10, 500]| 每页资源数量。如果不配置该参数,则展示所有查询到的资源。|
示例如下:
```shell
-$ curl "http://127.0.0.1:9180/apisix/admin/routes?page=1&page_size=10" \
+curl "http://127.0.0.1:9180/apisix/admin/routes?page=1&page_size=10" \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X GET
```
@@ -107,37 +158,31 @@ $ curl "http://127.0.0.1:9180/apisix/admin/routes?page=1&page_size=10" \
}
```
-目前支持分页查询的资源如下:
+### 支持过滤资源 {#support filtering query}
-- Consumer
-- Consumer Group
-- Global Rules
-- Plugin Config
-- Proto
-- Route
-- Service
-- SSL
-- Stream Route
-- Upstream
+在 APISIX v3 版本中,在获取资源列表时,你可以使用 `name`、`label` 和 `uri` 参数过滤资源。支持参数如下:
-### 支持过滤资源
+| 名称 | 描述 |
+| ----- | ------------------------------------------------------------------------------------------------------------------------ |
+| name | 根据资源的 `name` 属性进行查询,如果资源本身没有 `name` 属性则不会出现在查询结果中。 |
+| label | 根据资源的 `label` 属性进行查询,如果资源本身没有 `label` 属性则不会出现在查询结果中。 |
+| uri | 该参数仅在 Route 资源上支持。如果 Route 的 `uri` 等于查询的 `uri` 或 `uris` 包含查询的 `uri`,则该 Route 资源出现在查询结果中。 |
-获取资源列表时支持根据 `name`, `label`, `uri` 过滤资源。
+:::tip 提示
-| 参数 | 说明 |
-| ----- | --------------------------------------------------------------------------------------------------- |
-| name | 根据资源的 `name` 属性进行查询,如果资源本身没有 `name` 属性则不会出现在查询结果中。 |
-| label | 根据资源的 `label` 属性进行查询,如果资源本身没有 `labe`l 属性则不会出现在查询结果中。 |
-| uri | 仅在 Route 资源上支持。如果 Route 的 `uri` 等于查询的 uri 或 `uris` 包含查询的 uri,则该 Route 资源出现在查询结果中。 |
+当使用多个过滤参数时,APISIX 将对不同过滤参数的查询结果取交集。
-当启用了多个过滤参数时,对不同过滤参数的查询结果取交集。
-下述示例将返回一个路由列表,该路由列表中的所有路由满足以下条件:路由的 `name` 包含字符串 "test";`uri` 包含字符串 "foo";对路由的 `label` 没有限制,因为查询的 label 是空字符串。
+:::
+
+以下示例将返回一个路由列表,该路由列表中的所有路由需要满足以下条件:路由的 `name` 包含字符串 `test`;`uri` 包含字符串 `foo`;对路由的 `label` 没有限制,因为 `label` 为空字符串。
```shell
-$ curl 'http://127.0.0.1:9180/apisix/admin/routes?name=test&uri=foo&label=' \
+curl 'http://127.0.0.1:9180/apisix/admin/routes?name=test&uri=foo&label=' \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X GET
```
+返回结果:
+
```json
{
"total": 1,
@@ -151,65 +196,67 @@ $ curl 'http://127.0.0.1:9180/apisix/admin/routes?name=test&uri=foo&label=' \
## Route
-*地址*:/apisix/admin/routes/{id}?ttl=0
-
-*说明*:Route 字面意思就是路由,通过定义一些规则来匹配客户端的请求,然后根据匹配结果加载并执行相应的插件,并把请求转发给到指定 Upstream。
-
-注意:在启用 `Admin API` 时,它会占用前缀为 `/apisix/admin` 的 API。因此,为了避免您设计 API 与 `/apisix/admin` 冲突,建议为 Admin API 使用其他端口,您可以在 `conf/config.yaml` 中通过 `admin_listen` 进行自定义 Admin API 端口。
-
-### 请求方法
-
-| 名字 | 请求 uri | 请求 body | 说明 |
-| ------ | -------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| GET | /apisix/admin/routes | 无 | 获取资源列表 |
-| GET | /apisix/admin/routes/{id} | 无 | 获取资源 |
-| PUT | /apisix/admin/routes/{id} | {...} | 根据 id 创建资源 |
-| POST | /apisix/admin/routes | {...} | 创建资源,id 由后台服务自动生成 |
-| DELETE | /apisix/admin/routes/{id} | 无 | 删除资源 |
-| PATCH | /apisix/admin/routes/{id} | {...} | 标准 PATCH ,修改已有 Route 的部分属性,其他不涉及的属性会原样保留;如果你要删除某个属性,将该属性的值设置为 null 即可删除;特别地,当需要修改属性的值为数组时,该属性将全量更新 |
-| PATCH | /apisix/admin/routes/{id}/{path} | {...} | SubPath PATCH,通过 {path} 指定 Route 要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。两种 PATCH 的区别可以参考后面的示例 |
-
-### URL 请求参数
-
-| 名字 | 可选项 | 类型 | 说明 | 示例 |
-| ---- | ------ | ---- | ---------------------------------- | ----- |
-| ttl | 可选 | 辅助 | 超过这个时间会被自动删除,单位:秒 | ttl=1 |
-
-### body 请求参数
-
-| 名字 | 可选项 | 类型 | 说明 | 示例 |
-| ---------------- | ---------------------------------- | -------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| ---------------------------------------------------- |
-| uri | 必选,不能与 `uris` 一起使用 | 匹配规则 | 除了如 `/foo/bar`、`/foo/gloo` 这种全量匹配外,使用不同 [Router](terminology/router.md) 还允许更高级匹配,更多见 [Router](terminology/router.md)。 | "/hello" |
-| uris | 必选,不能与 `uri` 一起使用 | 匹配规则 | 非空数组形式,可以匹配多个 `uri` | ["/hello", "/world"] |
-| plugins | 可选 | Plugin | 详见 [Plugin](terminology/plugin.md) | |
-| script | 可选 | Script | 详见 [Script](terminology/script.md) | |
-| upstream | 可选 | Upstream | 启用的 Upstream 配置,详见 [Upstream](terminology/upstream.md) | |
-| upstream_id | 可选 | Upstream | 启用的 upstream id,详见 [Upstream](terminology/upstream.md) | |
-| service_id | 可选 | Service | 绑定的 Service 配置,详见 [Service](terminology/service.md) | |
-| plugin_config_id | 可选,无法跟 script 一起配置 | Plugin | 绑定的 Plugin config 配置,详见 [Plugin config](terminology/plugin-config.md) | |
-| name | 可选 | 辅助 | 标识路由名称 | route-xxxx |
-| desc | 可选 | 辅助 | 标识描述、使用场景等。 | 路由 xxxx |
-| host | 可选,不能与 `hosts` 一起使用 | 匹配规则 | 当前请求域名,比如 `foo.com`;也支持泛域名,比如 `*.foo.com`。 | "foo.com" |
-| hosts | 可选,不能与 `host` 一起使用 | 匹配规则 | 非空列表形态的 `host`,表示允许有多个不同 `host`,匹配其中任意一个即可。 | ["foo.com", "\*.bar.com"] |
-| remote_addr | 可选,不能与 `remote_addrs` 一起使用 | 匹配规则 | 客户端请求 IP 地址:`192.168.1.101`、`192.168.1.102` 以及 CIDR 格式的支持 `192.168.1.0/24`。特别的,APISIX 也完整支持 IPv6 地址匹配:`::1`,`fe80::1`,`fe80::1/64` 等。 | "192.168.1.0/24" |
-| remote_addrs | 可选,不能与 `remote_addr` 一起使用 | 匹配规则 | 非空列表形态的 `remote_addr`,表示允许有多个不同 IP 地址,符合其中任意一个即可。 | ["127.0.0.1", "192.0.0.0/8", "::1"] |
-| methods | 可选 | 匹配规则 | 如果为空或没有该选项,代表没有任何 `method` 限制,也可以是一个或多个的组合:`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`,`CONNECT`,`TRACE`,`PURGE`。 | ["GET", "POST"] |
-| priority | 可选 | 匹配规则 | 如果不同路由包含相同 `uri`,根据属性 `priority` 确定哪个 `route` 被优先匹配,值越大优先级越高,默认值为 0。 | priority = 10 |
-| vars | 可选 | 匹配规则 | 由一个或多个`[var, operator, val]`元素组成的列表,类似这样:`[[var, operator, val], [var, operator, val], ...]]`。例如:`["arg_name", "==", "json"]`,表示当前请求参数 `name` 是 `json`。这里的 `var` 与 Nginx 内部自身变量命名是保持一致,所以也可以使用 `request_uri`、`host` 等。更多细节请参考[lua-resty-expr](https://github.com/api7/lua-resty-expr) | [["arg_name", "==", "json"], ["arg_age", ">", 18]] |
-| filter_func | 可选 | 匹配规则 | 用户自定义的过滤函数。可以使用它来实现特殊场景的匹配要求实现。该函数默认接受一个名为 vars 的输入参数,可以用它来获取 Nginx 变量。 | function(vars) return vars["arg_name"] == "json" end |
-| labels | 可选 | 匹配规则 | 标识附加属性的键值对 | {"version":"v2","build":"16","env":"production"} |
-| timeout | 可选 | 辅助 | 为 route 设置 upstream 的连接、发送消息、接收消息的超时时间(单位为秒)。这个配置将会覆盖在 upstream 中 配置的 [timeout](#upstream) 选项 | {"connect": 3, "send": 3, "read": 3} |
-| enable_websocket | 可选 | 辅助 | 是否启用 `websocket`(boolean), 缺省 `false`。 | |
-| status | 可选 | 辅助 | 是否启用此路由,缺省 `1`。 | `1` 表示启用,`0` 表示禁用 |
-| create_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
-| update_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
-
-有两点需要特别注意:
-
-- 对于同一类参数比如 `uri`与 `uris`,`upstream` 与 `upstream_id`,`host` 与 `hosts`,`remote_addr` 与 `remote_addrs` 等,是不能同时存在,二者只能选择其一。如果同时启用,接口会报错。
-- 在 `vars` 中,当获取 cookie 的值时,cookie name 是**区分大小写字母**的。例如:`var` 等于 "cookie_x_foo" 与 `var` 等于 "cookie_X_Foo" 表示不同的 `cookie`。
-
-route 对象 json 配置内容:
+Route 也称之为路由,可以通过定义一些规则来匹配客户端的请求,然后根据匹配结果加载并执行相应的插件,并把请求转发给到指定 Upstream(上游)。
+
+### 请求地址 {#route-uri}
+
+路由资源请求地址:/apisix/admin/routes/{id}?ttl=0
+
+### 请求方法 {#route-request-methods}
+
+| 名称 | 请求 URI | 请求 body | 描述 |
+| ------ | -------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
+| GET | /apisix/admin/routes | 无 | 获取资源列表。 |
+| GET | /apisix/admin/routes/{id} | 无 | 获取资源。 |
+| PUT | /apisix/admin/routes/{id} | {...} | 根据 id 创建资源。 |
+| POST | /apisix/admin/routes | {...} | 创建资源,id 将会自动生成成。 |
+| DELETE | /apisix/admin/routes/{id} | 无 | 删除指定资源。 |
+| PATCH | /apisix/admin/routes/{id} | {...} | 标准 PATCH,修改指定 Route 的部分属性,其他不涉及的属性会原样保留;如果你需要删除某个属性,可以将该属性的值设置为 `null`;当需要修改属性的值为数组时,该属性将全量更新。 |
+| PATCH | /apisix/admin/routes/{id}/{path} | {...} | SubPath PATCH,通过 `{path}` 指定 Route 要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。两种 PATCH 的区别,请参考使用示例。 |
+
+### URI 请求参数 {#route-uri-request-parameters}
+
+| 名称 | 必选项 | 类型 | 描述 | 示例 |
+| ---- | ------ | ---- | -------------------------------------------- | ----- |
+| ttl | 否 | 辅助 | 路由的有效期。超过定义的时间,APISIX 将会自动删除路由,单位为秒。 | ttl=1 |
+
+### body 请求参数 {#route-request-body-parameters}
+
+| 名称 | 必选项 | 类型 | 描述 | 示例值 |
+| ---------------- | -------------------------------- | -------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| ---------------------------------------------------- |
+| uri | 是,与 `uris` 二选一。 | 匹配规则 | 除了如 `/foo/bar`、`/foo/gloo` 这种全量匹配外,使用不同 [Router](terminology/router.md) 还允许更高级匹配,更多信息请参考 [Router](terminology/router.md)。 | "/hello" |
+| uris | 是,不能与 `uri` 二选一。 | 匹配规则 | 非空数组形式,可以匹配多个 `uri`。 | ["/hello", "/world"] |
+| plugins | 否 | Plugin | Plugin 配置,请参考 [Plugin](terminology/plugin.md)。 | |
+| script | 否 | Script | Script 配置,请参考 [Script](terminology/script.md)。 | |
+| upstream | 否 | Upstream | Upstream 配置,请参考 [Upstream](terminology/upstream.md)。 | |
+| upstream_id | 否 | Upstream | 需要使用的 Upstream id,请参考 [Upstream](terminology/upstream.md)。 | |
+| service_id | 否 | Service | 需要绑定的 Service id,请参考 [Service](terminology/service.md)。 | |
+| plugin_config_id | 否,不能与 Script 共同使用。 | Plugin | 需要绑定的 Plugin Config id,请参考 [Plugin Config](terminology/plugin-config.md)。 | |
+| name | 否 | 辅助 | 路由名称。 | route-test |
+| desc | 否 | 辅助 | 路由描述信息。 | 用来测试的路由。 |
+| host | 否,与 `hosts` 二选一。 | 匹配规则 | 当前请求域名,比如 `foo.com`;也支持泛域名,比如 `*.foo.com`。 | "foo.com" |
+| hosts | 否,与 `host` 二选一。 | 匹配规则 | 非空列表形态的 `host`,表示允许有多个不同 `host`,匹配其中任意一个即可。 | ["foo.com", "\*.bar.com"] |
+| remote_addr | 否,与 `remote_addrs` 二选一。| 匹配规则 | 客户端请求的 IP 地址。支持 IPv4 地址,如:`192.168.1.101` 以及 CIDR 格式的支持 `192.168.1.0/24`;支持 IPv6 地址匹配,如 `::1`,`fe80::1`,`fe80::1/64` 等。 | "192.168.1.0/24" |
+| remote_addrs | 否,与 `remote_addr` 二选一。| 匹配规则 | 非空列表形态的 `remote_addr`,表示允许有多个不同 IP 地址,符合其中任意一个即可。 | ["127.0.0.1", "192.0.0.0/8", "::1"] |
+| methods | 否 | 匹配规则 | 如果为空或没有该选项,则表示没有任何 `method` 限制。你也可以配置一个或多个的组合:`GET`,`POST`,`PUT`,`DELETE`,`PATCH`,`HEAD`,`OPTIONS`,`CONNECT`,`TRACE`,`PURGE`。 | ["GET", "POST"] |
+| priority | 否 | 匹配规则 | 如果不同路由包含相同的 `uri`,则根据属性 `priority` 确定哪个 `route` 被优先匹配,值越大优先级越高,默认值为 `0`。 | priority = 10 |
+| vars | 否 | 匹配规则 | 由一个或多个`[var, operator, val]`元素组成的列表,类似 `[[var, operator, val], [var, operator, val], ...]]`。例如:`["arg_name", "==", "json"]` 则表示当前请求参数 `name` 是 `json`。此处 `var` 与 NGINX 内部自身变量命名是保持一致的,所以也可以使用 `request_uri`、`host` 等。更多细节请参考 [lua-resty-expr](https://github.com/api7/lua-resty-expr)。 | [["arg_name", "==", "json"], ["arg_age", ">", 18]] |
+| filter_func | 否 | 匹配规则 | 用户自定义的过滤函数。可以使用它来实现特殊场景的匹配要求实现。该函数默认接受一个名为 `vars` 的输入参数,可以用它来获取 NGINX 变量。 | function(vars) return vars["arg_name"] == "json" end |
+| labels | 否 | 匹配规则 | 标识附加属性的键值对。 | {"version":"v2","build":"16","env":"production"} |
+| timeout | 否 | 辅助 | 为 Route 设置 Upstream 连接、发送消息和接收消息的超时时间(单位为秒)。该配置将会覆盖在 Upstream 中配置的 [timeout](#upstream) 选项。 | {"connect": 3, "send": 3, "read": 3} |
+| enable_websocket | 否 | 辅助 | 当设置为 `true` 时,启用 `websocket`(boolean), 默认值为 `false`。 | |
+| status | 否 | 辅助 | 当设置为 `1` 时,启用该路由,默认值为 `1`。 | `1` 表示启用,`0` 表示禁用。 |
+| create_time | 否 | 辅助 | epoch 时间戳,单位为秒。如果不指定则自动创建。 | 1602883670 |
+| update_time | 否 | 辅助 | epoch 时间戳,单位为秒。如果不指定则自动创建。 | 1602883670 |
+
+:::note 注意
+
+- 对于同一类参数比如 `uri`与 `uris`,`upstream` 与 `upstream_id`,`host` 与 `hosts`,`remote_addr` 与 `remote_addrs` 等,是不能同时存在,二者只能选择其一。如果同时启用,则会出现异常。
+- 在 `vars` 中,当获取 Cookie 的值时,Cookie name 是**区分大小写字母**的。例如:`var = cookie_x_foo` 与 `var = cookie_X_Foo` 表示不同的 `cookie`。
+
+:::
+
+Route 对象 JSON 配置示例:
```shell
{
@@ -234,207 +281,286 @@ route 对象 json 配置内容:
}
```
-具体示例:
+### 使用示例 {#route-example}
-```shell
-# 创建一个路由
-$ curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
-{
- "uri": "/index.html",
- "hosts": ["foo.com", "*.bar.com"],
- "remote_addrs": ["127.0.0.0/8"],
- "methods": ["PUT", "GET"],
- "enable_websocket": true,
- "upstream": {
- "type": "roundrobin",
- "nodes": {
- "127.0.0.1:1980": 1
+- 创建一个路由:
+
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/routes/1 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+ {
+ "uri": "/index.html",
+ "hosts": ["foo.com", "*.bar.com"],
+ "remote_addrs": ["127.0.0.0/8"],
+ "methods": ["PUT", "GET"],
+ "enable_websocket": true,
+ "upstream": {
+ "type": "roundrobin",
+ "nodes": {
+ "127.0.0.1:1980": 1
+ }
}
- }
-}'
+ }'
+ ```
-HTTP/1.1 201 Created
-Date: Sat, 31 Aug 2019 01:17:15 GMT
-...
+ ```
+ HTTP/1.1 201 Created
+ Date: Sat, 31 Aug 2019 01:17:15 GMT
+ ...
+ ```
-# 创建一个有效期为 60 秒的路由,过期后自动删除
-$ curl 'http://127.0.0.1:9180/apisix/admin/routes/2?ttl=60' -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
-{
- "uri": "/aa/index.html",
- "upstream": {
- "type": "roundrobin",
- "nodes": {
- "127.0.0.1:1980": 1
+- 创建一个有效期为 60 秒的路由,过期后自动删除:
+
+ ```shell
+ curl 'http://127.0.0.1:9180/apisix/admin/routes/2?ttl=60' \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+ {
+ "uri": "/aa/index.html",
+ "upstream": {
+ "type": "roundrobin",
+ "nodes": {
+ "127.0.0.1:1980": 1
+ }
}
- }
-}'
+ }'
+ ```
-HTTP/1.1 201 Created
-Date: Sat, 31 Aug 2019 01:17:15 GMT
-...
+ ```
+ HTTP/1.1 201 Created
+ Date: Sat, 31 Aug 2019 01:17:15 GMT
+ ...
+ ```
+- 在路由中新增一个上游节点:
-# 给路由增加一个 upstream node
-$ curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "upstream": {
- "nodes": {
- "127.0.0.1:1981": 1
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/routes/1 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "upstream": {
+ "nodes": {
+ "127.0.0.1:1981": 1
+ }
}
- }
-}'
-HTTP/1.1 200 OK
-...
+ }'
+ ```
-执行成功后,upstream nodes 将更新为:
-{
- "127.0.0.1:1980": 1,
- "127.0.0.1:1981": 1
-}
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
+ 执行成功后,上游节点将更新为:
-# 给路由更新一个 upstream node 的权重
-$ curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "upstream": {
- "nodes": {
- "127.0.0.1:1981": 10
- }
+ ```
+ {
+ "127.0.0.1:1980": 1,
+ "127.0.0.1:1981": 1
}
-}'
-HTTP/1.1 200 OK
-...
+ ```
-执行成功后,upstream nodes 将更新为:
-{
- "127.0.0.1:1980": 1,
- "127.0.0.1:1981": 10
-}
+- 更新路由中上游节点的权重:
+
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/routes/1 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "upstream": {
+ "nodes": {
+ "127.0.0.1:1981": 10
+ }
+ }
+ }'
+ ```
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
-# 给路由删除一个 upstream node
-$ curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "upstream": {
- "nodes": {
- "127.0.0.1:1980": null
+ 执行成功后,上游节点将更新为:
+
+ ```
+ {
+ "127.0.0.1:1980": 1,
+ "127.0.0.1:1981": 10
+ }
+ ```
+
+- 从路由中删除一个上游节点:
+
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/routes/1 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "upstream": {
+ "nodes": {
+ "127.0.0.1:1980": null
+ }
}
+ }'
+ ```
+
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
+
+ 执行成功后,Upstream `nodes` 将更新为:
+
+ ```shell
+ {
+ "127.0.0.1:1981": 10
}
-}'
-HTTP/1.1 200 OK
-...
+ ```
-执行成功后,upstream nodes 将更新为:
-{
- "127.0.0.1:1981": 10
-}
+- 更新路由中的 `methods` 数组
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/routes/1 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '{
+ "methods": ["GET", "POST"]
+ }'
+ ```
-# 替换路由的 methods -- 数组
-$ curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '{
- "methods": ["GET", "POST"]
-}'
-HTTP/1.1 200 OK
-...
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
-执行成功后,methods 将不保留原来的数据,整个更新为:
-["GET", "POST"]
+ 执行成功后,`methods` 将不保留原来的数据,将更新为:
+ ```
+ ["GET", "POST"]
+ ```
-# 替换路由的 upstream nodes -- sub path
-$ curl http://127.0.0.1:9180/apisix/admin/routes/1/upstream/nodes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "127.0.0.1:1982": 1
-}'
-HTTP/1.1 200 OK
-...
+- 使用 `sub path` 更新路由中的上游节点:
-执行成功后,nodes 将不保留原来的数据,整个更新为:
-{
- "127.0.0.1:1982": 1
-}
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/routes/1/upstream/nodes \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "127.0.0.1:1982": 1
+ }'
+ ```
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
-# 替换路由的 methods -- sub path
-$ curl http://127.0.0.1:9180/apisix/admin/routes/1/methods -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '["POST", "DELETE", "PATCH"]'
-HTTP/1.1 200 OK
-...
+ 执行成功后,`nodes` 将不保留原来的数据,整个更新为:
-执行成功后,methods 将不保留原来的数据,整个更新为:
-["POST", "DELETE", "PATCH"]
+ ```
+ {
+ "127.0.0.1:1982": 1
+ }
+ ```
+- 使用 `sub path` 更新路由中的 `methods`:
-# 禁用路由
-$ curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "status": 0
-}'
-HTTP/1.1 200 OK
-...
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/routes/1/methods \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '["POST", "DELETE", "PATCH"]'
+ ```
-执行成功后,status 将更新为:
-{
- "status": 0
-}
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
+ 执行成功后,`methods` 将不保留原来的数据,更新为:
-# 启用路由
-$ curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "status": 1
-}'
-HTTP/1.1 200 OK
-...
+ ```
+ ["POST", "DELETE", "PATCH"]
+ ```
-执行成功后,status 将更新为:
-{
- "status": 1
-}
+- 禁用路由
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/routes/1 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "status": 0
+ }'
+ ```
-```
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
-### 应答参数
+ 执行成功后,`status` 将更新为:
-目前是直接返回与 etcd 交互后的结果。
+ ```
+ {
+ "status": 0
+ }
+ ```
+
+- 启用路由
+
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/routes/1 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "status": 1
+ }'
+ ```
+
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
+
+ 执行成功后,`status` 将更新为:
+
+ ```
+ {
+ "status": 1
+ }
+ ```
+
+### 应答参数 {#route-response-parameters}
-[Back to TOC](#目录)
+目前是直接返回与 etcd 交互后的结果。
## Service
-*地址*:/apisix/admin/services/{id}
+Service 是某类 API 的抽象(也可以理解为一组 Route 的抽象)。它通常与上游服务抽象是一一对应的,`Route` 与 `Service` 之间,通常是 N:1 的关系。
-*说明*:`Service` 是某类 API 的抽象(也可以理解为一组 Route 的抽象)。它通常与上游服务抽象是一一对应的,`Route`
-与 `Service` 之间,通常是 N:1 的关系。
+### 请求地址 {#service-uri}
-### 请求方法
+服务资源请求地址:/apisix/admin/services/{id}
-| 名字 | 请求 uri | 请求 body | 说明 |
-| ------ | ---------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| GET | /apisix/admin/services | 无 | 获取资源列表 |
-| GET | /apisix/admin/services/{id} | 无 | 获取资源 |
-| PUT | /apisix/admin/services/{id} | {...} | 根据 id 创建资源 |
-| POST | /apisix/admin/services | {...} | 创建资源,id 由后台服务自动生成 |
-| DELETE | /apisix/admin/services/{id} | 无 | 删除资源 |
-| PATCH | /apisix/admin/services/{id} | {...} | 标准 PATCH ,修改已有 Service 的部分属性,其他不涉及的属性会原样保留;如果你要删除某个属性,将该属性的值设置为 null 即可删除;特别地,当需要修改属性的值为数组时,该属性将全量更新 |
-| PATCH | /apisix/admin/services/{id}/{path} | {...} | SubPath PATCH,通过 {path} 指定 Service 需要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留 |
+### 请求方法 {#service-request-methods}
-### body 请求参数
+| 名称 | 请求 URI | 请求 body | 描述 |
+| ------ | ---------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| GET | /apisix/admin/services | 无 | 获取资源列表。 |
+| GET | /apisix/admin/services/{id} | 无 | 获取资源。 |
+| PUT | /apisix/admin/services/{id} | {...} | 创建指定 id 资源。 |
+| POST | /apisix/admin/services | {...} | 创建资源,id 由后台服务自动生成。 |
+| DELETE | /apisix/admin/services/{id} | 无 | 删除资源。 |
+| PATCH | /apisix/admin/services/{id} | {...} | 标准 PATCH ,修改已有 Service 的部分属性,其他不涉及的属性会原样保留;如果你要删除某个属性,将该属性的值设置为 null 即可删除;**注意**:当需要修改属性的值为数组时,该属性将全量更新。|
+| PATCH | /apisix/admin/services/{id}/{path} | {...} | SubPath PATCH,通过 {path} 指定 Service 需要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。 |
-| 名字 | 可选项 | 类型 | 说明 | 示例 |
-| ---------------- | ---------------------------------- | -------- | ---------------------------------------------------------------------- | ------------------------------------------------ |
-| plugins | 可选 | Plugin | 详见 [Plugin](terminology/plugin.md) | |
-| upstream | upstream 或 upstream_id 两个选一个 | Upstream | 启用的 Upstream 配置,详见 [Upstream](terminology/upstream.md) | |
-| upstream_id | upstream 或 upstream_id 两个选一个 | Upstream | 启用的 upstream id,详见 [Upstream](terminology/upstream.md) | |
-| name | 可选 | 辅助 | 标识服务名称。 | |
-| desc | 可选 | 辅助 | 服务描述、使用场景等。 | |
-| labels | 可选 | 匹配规则 | 标识附加属性的键值对 | {"version":"v2","build":"16","env":"production"} |
-| enable_websocket | 可选 | 辅助 | 是否启用 `websocket`(boolean), 缺省 `false`. | |
-| hosts | 可选 | 匹配规则 | 非空列表形态的 `host`,表示允许有多个不同 `host`,匹配其中任意一个即可。| ["foo.com", "\*.bar.com"] |
-| create_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
-| update_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
+### body 请求参数 {#service-request-body-parameters}
-service 对象 json 配置内容:
+| 名称 | 必选项 | 类型 | 描述 | 示例 |
+| ---------------- | ----------------------- | -------- | ---------------------------------------------------------------- | ------------------------------------------------ |
+| plugins | 否 | Plugin | Plugin 配置,请参考 [Plugin](terminology/plugin.md)。 | |
+| upstream | 与 `upstream_id` 二选一。 | Upstream | Upstream 配置,请参考 [Upstream](terminology/upstream.md)。 | |
+| upstream_id | 与 `upstream` 二选一。 | Upstream | 需要使用的 upstream id,请参考 [Upstream](terminology/upstream.md)。| |
+| name | 否 | 辅助 | 服务名称。 | |
+| desc | 否 | 辅助 | 服务描述。 | |
+| labels | 否 | 匹配规则 | 标识附加属性的键值对。 | {"version":"v2","build":"16","env":"production"} |
+| enable_websocket | 否 | 辅助 | `websocket`(boolean) 配置,默认值为 `false`。 | |
+| hosts | 否 | 匹配规则 | 非空列表形态的 `host`,表示允许有多个不同 `host`,匹配其中任意一个即可。| ["foo.com", "\*.bar.com"] |
+| create_time | 否 | 辅助 | epoch 时间戳,单位为秒。如果不指定则自动创建。 | 1602883670 |
+| update_time | 否 | 辅助 | epoch 时间戳,单位为秒。如果不指定则自动创建。 | 1602883670 |
+
+Service 对象 JSON 配置示例:
```shell
{
@@ -449,140 +575,177 @@ service 对象 json 配置内容:
}
```
-具体示例:
+### 使用示例 {#service-example}
-```shell
-# 创建一个 Service
-$ curl http://127.0.0.1:9180/apisix/admin/services/201 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
-{
- "plugins": {
- "limit-count": {
- "count": 2,
- "time_window": 60,
- "rejected_code": 503,
- "key": "remote_addr"
+- 创建一个 Service:
+
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/services/201 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+ {
+ "plugins": {
+ "limit-count": {
+ "count": 2,
+ "time_window": 60,
+ "rejected_code": 503,
+ "key": "remote_addr"
+ }
+ },
+ "enable_websocket": true,
+ "upstream": {
+ "type": "roundrobin",
+ "nodes": {
+ "127.0.0.1:1980": 1
+ }
}
- },
- "enable_websocket": true,
- "upstream": {
- "type": "roundrobin",
- "nodes": {
- "127.0.0.1:1980": 1
+ }'
+ ```
+
+ ```
+ HTTP/1.1 201 Created
+ ...
+ ```
+
+- 在 Service 中添加一个上游节点:
+
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/services/201 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "upstream": {
+ "nodes": {
+ "127.0.0.1:1981": 1
+ }
}
- }
-}'
+ }'
+ ```
-# 返回结果
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
-HTTP/1.1 201 Created
-...
+ 执行成功后,上游节点将更新为:
+ ```json
+ {
+ "127.0.0.1:1980": 1,
+ "127.0.0.1:1981": 1
+ }
+ ```
-# 给 Service 增加一个 upstream node
-$ curl http://127.0.0.1:9180/apisix/admin/services/201 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "upstream": {
- "nodes": {
- "127.0.0.1:1981": 1
+- 更新一个上游节点的权重:
+
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/services/201 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "upstream": {
+ "nodes": {
+ "127.0.0.1:1981": 10
+ }
}
- }
-}'
-HTTP/1.1 200 OK
-...
+ }'
+ ```
-执行成功后,upstream nodes 将更新为:
-{
- "127.0.0.1:1980": 1,
- "127.0.0.1:1981": 1
-}
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
+ 执行成功后,上游节点将更新为:
-# 给 Service 更新一个 upstream node 的权重
-$ curl http://127.0.0.1:9180/apisix/admin/services/201 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "upstream": {
- "nodes": {
- "127.0.0.1:1981": 10
- }
+ ```
+ {
+ "127.0.0.1:1980": 1,
+ "127.0.0.1:1981": 10
}
-}'
-HTTP/1.1 200 OK
-...
+ ```
-执行成功后,upstream nodes 将更新为:
-{
- "127.0.0.1:1980": 1,
- "127.0.0.1:1981": 10
-}
+- 删除 Service 中的一个上游节点:
-
-# 给 Service 删除一个 upstream node
-$ curl http://127.0.0.1:9180/apisix/admin/services/201 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "upstream": {
- "nodes": {
- "127.0.0.1:1980": null
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/services/201 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "upstream": {
+ "nodes": {
+ "127.0.0.1:1980": null
+ }
}
+ }'
+ ```
+
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
+
+ 执行成功后,上游节点将更新为:
+
+ ```
+ {
+ "127.0.0.1:1981": 10
}
-}'
-HTTP/1.1 200 OK
-...
+ ```
-执行成功后,upstream nodes 将更新为:
-{
- "127.0.0.1:1981": 10
-}
+- 替换 Service 的上游节点:
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/services/201/upstream/nodes \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "127.0.0.1:1982": 1
+ }'
+ ```
-# 替换 Service 的 upstream nodes
-$ curl http://127.0.0.1:9180/apisix/admin/services/201/upstream/nodes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "127.0.0.1:1982": 1
-}'
-HTTP/1.1 200 OK
-...
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
-执行成功后,upstream nodes 将不保留原来的数据,整个更新为:
-{
- "127.0.0.1:1982": 1
-}
+ 执行成功后,上游节点不再保留原来的数据,将更新为:
-```
+ ```
+ {
+ "127.0.0.1:1982": 1
+ }
+ ```
-### 应答参数
+### 应答参数 {#service-response-parameters}
目前是直接返回与 etcd 交互后的结果。
-[Back to TOC](#目录)
-
## Consumer
-*地址*:/apisix/admin/consumers/{username}
+Consumer 是某类服务的消费者,需要与用户认证体系配合才能使用。Consumer 使用 `username` 作为唯一标识,仅支持使用 HTTP `PUT` 方法创建 Consumer。
-*说明*:Consumer 是某类服务的消费者,需与用户认证体系配合才能使用。Consumer 使用 `username` 作为唯一标识,只支持使用 HTTP `PUT` 方法创建 Consumer。
+### 请求地址 {#consumer-uri}
-### 请求方法
+Consumer 资源请求地址:/apisix/admin/consumers/{username}
-| 名字 | 请求 uri | 请求 body | 说明 |
+### 请求方法 {#consumer-request-methods}
+
+| 名称 | 请求 URI | 请求 body | 描述 |
| ------ | ---------------------------- | --------- | ------------ |
-| GET | /apisix/admin/consumers | 无 | 获取资源列表 |
-| GET | /apisix/admin/consumers/{id} | 无 | 获取资源 |
-| PUT | /apisix/admin/consumers | {...} | 创建资源 |
-| DELETE | /apisix/admin/consumers/{id} | 无 | 删除资源 |
+| GET | /apisix/admin/consumers | 无 | 获取资源列表。 |
+| GET | /apisix/admin/consumers/{id} | 无 | 获取资源。 |
+| PUT | /apisix/admin/consumers | {...} | 创建资源。 |
+| DELETE | /apisix/admin/consumers/{id} | 无 | 删除资源。 |
-### body 请求参数
+### body 请求参数 {#consumer-body-request-methods}
-| 名字 | 可选项 | 类型 | 说明 | 示例 |
-| ----------- | ------ | -------- | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
-| username | 必需 | 辅助 | Consumer 名称。 | |
-| group_id | 可选 | 辅助 | Consumer Group 名称。 | |
-| plugins | 可选 | Plugin | 该 Consumer 对应的插件配置,它的优先级是最高的:Consumer > Route > Service。对于具体插件配置,可以参考 [Plugins](#plugin) 章节。 | |
-| desc | 可选 | 辅助 | consumer 描述 | |
-| labels | 可选 | 匹配规则 | 标识附加属性的键值对 | {"version":"v2","build":"16","env":"production"} |
-| create_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
-| update_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
+| 名称 | 必选项 | 类型 | 描述 | 示例值 |
+| ----------- | ----- | ------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
+| username | 是 | 辅助 | Consumer 名称。 | |
+| group_id | 否 | 辅助 | Consumer Group 名称。 | |
+| plugins | 否 | Plugin | 该 Consumer 对应的插件配置,它的优先级是最高的:Consumer > Route > Service。对于具体插件配置,请可以参考 [Plugins](#plugin)。 | |
+| desc | 否 | 辅助 | consumer 描述。 | |
+| labels | 否 | 匹配规则 | 标识附加属性的键值对。 | {"version":"v2","build":"16","env":"production"} |
+| create_time | 否 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建。 | 1602883670 |
+| update_time | 否 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建。 | 1602883670 |
-consumer 对象 json 配置内容:
+Consumer 对象 JSON 配置示例:
```shell
{
@@ -592,121 +755,123 @@ consumer 对象 json 配置内容:
}
```
-绑定认证插件有些特别,当它需要与 consumer 联合使用时,需要提供用户名、密码等信息;另一方面,当它与 route/service 绑定时,是不需要任何参数的。因为这时候是根据用户请求数据来反向推出用户对应的是哪个 consumer
+当认证插件与 Consumer 一起使用时,需要提供用户名、密码等信息;当认证插件与 Route 或 Service 绑定时,则不需要任何参数,因为此时 APISIX 是根据用户请求数据来判断用户对应的是哪个 Consumer。
-示例:
+:::note 注意
-```shell
-# 创建 Consumer ,指定认证插件 key-auth ,并开启特定插件 limit-count
-$ curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
-{
- "username": "jack",
- "plugins": {
- "key-auth": {
- "key": "auth-one"
- },
- "limit-count": {
- "count": 2,
- "time_window": 60,
- "rejected_code": 503,
- "key": "remote_addr"
+从 APISIX v2.2 版本开始,同一个 Consumer 可以绑定多个认证插件。
+
+:::
+
+### 使用示例 {#consumer-example}
+
+- 创建 Consumer,并指定认证插件 `key-auth`,并开启指定插件 `limit-count`:
+
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/consumers \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -i -d '
+ {
+ "username": "jack",
+ "plugins": {
+ "key-auth": {
+ "key": "auth-one"
+ },
+ "limit-count": {
+ "count": 2,
+ "time_window": 60,
+ "rejected_code": 503,
+ "key": "remote_addr"
+ }
}
- }
-}'
-HTTP/1.1 200 OK
-Date: Thu, 26 Dec 2019 08:17:49 GMT
-...
+ }'
+ ```
-{"node":{"value":{"username":"jack","plugins":{"key-auth":{"key":"auth-one"},"limit-count":{"time_window":60,"count":2,"rejected_code":503,"key":"remote_addr","policy":"local"}}},"createdIndex":64,"key":"\/apisix\/consumers\/jack","modifiedIndex":64},"prevNode":{"value":"{\"username\":\"jack\",\"plugins\":{\"key-auth\":{\"key\":\"auth-one\"},\"limit-count\":{\"time_window\":60,\"count\":2,\"rejected_code\":503,\"key\":\"remote_addr\",\"policy\":\"local\"}}}","createdIndex":63,"key":"\/ap [...]
-```
+ ```
+ HTTP/1.1 200 OK
+ Date: Thu, 26 Dec 2019 08:17:49 GMT
+ ...
-从 `v2.2` 版本之后,同一个 consumer 可以绑定多个认证插件。
+ {"key":"\/apisix\/consumers\/jack","value":{"username":"jack","update_time":1666260780,"plugins":{"limit-count":{"key_type":"var","count":2,"rejected_code":503,"show_limit_quota_header":true,"time_window":60,"key":"remote_addr","allow_degradation":false,"policy":"local"},"key-auth":{"key":"auth-one"}},"create_time":1666260780}}
+ ```
-### 应答参数
+### 应答参数 {#consumer-response-parameters}
目前是直接返回与 etcd 交互后的结果。
-[Back to TOC](#目录)
-
## Upstream
-*地址*:/apisix/admin/upstreams/{id}
+Upstream 是虚拟主机抽象,对给定的多个服务节点按照配置规则进行负载均衡。Upstream 的地址信息可以直接配置到 `Route`(或 `Service`) 上,当 Upstream 有重复时,需要用“引用”方式避免重复。
-*说明*:Upstream 是虚拟主机抽象,对给定的多个服务节点按照配置规则进行负载均衡。Upstream 的地址信息可以直接配置到 `Route`(或 `Service`) 上,当 Upstream 有重复时,就需要用“引用”方式避免重复了。
+### 请求地址 {#upstream-uri}
-### 请求方法
+Upstream 资源请求地址:/apisix/admin/upstreams/{id}
-| 名字 | 请求 uri | 请求 body | 说明 |
-| ------ | ----------------------------------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| GET | /apisix/admin/upstreams | 无 | 获取资源列表 |
-| GET | /apisix/admin/upstreams/{id} | 无 | 获取资源 |
-| PUT | /apisix/admin/upstreams/{id} | {...} | 根据 id 创建资源 |
-| POST | /apisix/admin/upstreams | {...} | 创建资源,id 由后台服务自动生成 |
-| DELETE | /apisix/admin/upstreams/{id} | 无 | 删除资源 |
-| PATCH | /apisix/admin/upstreams/{id} | {...} | 标准 PATCH ,修改已有 Upstream 的部分属性,其他不涉及的属性会原样保留;如果你要删除某个属性,将该属性的值设置为 null 即可删除;特别地,当需要修改属性的值为数组时,该属性将全量更新 |
-| PATCH | /apisix/admin/upstreams/{id}/{path} | {...} | SubPath PATCH,通过 {path} 指定 Upstream 需要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。 |
+### 请求方法 {#upstream-request-methods}
-### body 请求参数
+| 名称 | 请求 URI | 请求 body | 描述 |
+| ------ | ----------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| GET | /apisix/admin/upstreams/{id} | 无 | 获取资源。 |
+| PUT | /apisix/admin/upstreams/{id} | {...} | 创建指定 id 的资源。 |
+| POST | /apisix/admin/upstreams | {...} | 创建资源,id 由后台服务自动生成。 |
+| DELETE | /apisix/admin/upstreams/{id} | 无 | 删除资源。 |
+| PATCH | /apisix/admin/upstreams/{id} | {...} | 标准 PATCH ,修改已有 Upstream 的部分属性,其他不涉及的属性会原样保留;如果需要删除某个属性,可将该属性的值设置为 `null`;**注意**:当需要修改属性的值为数组时,该属性将全量更新。|
+| PATCH | /apisix/admin/upstreams/{id}/{path} | {...} | SubPath PATCH,通过 `{path}` 指定 Upstream 需要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。 |
-APISIX 的 Upstream 除了基本的负载均衡算法选择外,还支持对上游做主被动健康检查、重试等逻辑,具体看下面表格。
+### body 请求参数 {#upstream-body-request-methods}
-| 名字 | 可选项 | 类型 | 说明 | 示例 |
+APISIX 的 Upstream 除了基本的负载均衡算法选择外,还支持对上游做主被动健康检查、重试等逻辑。详细信息如下:
+
+| 名称 | 必选项 | 类型 | 描述 | 示例 |
| -------------- | ---------------------------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
-| type | 必需 | 枚举 | 负载均衡算法 | | |
-| nodes | 必需,不能和 `service_name` 一起用 | Node | 哈希表或数组。当它是哈希表时,内部元素的 key 是上游机器地址列表,格式为`地址 +(可选的)端口`,其中地址部分可以是 IP 也可以是域名,比如 `192.168.1.100:80`、`foo.com:80`等。对于哈希表的情况,如果 key 是 IPv6 地址加端口,则必须用中括号将 IPv6 地址括起来。value 则是节点的权重。当它是数组时,数组中每个元素都是一个哈希表,其中包含 `host`、`weight` 以及可选的 `port`、`priority`。`nodes` 可以为空,这通常用作占位符。客户端命中这样的上游会返回 502。 | `192.168.1.100:80`, `[::1]:80` |
-| service_name | 必需,不能和 `nodes` 一起用 | string | 服务发现时使用的服务名,见[集成服务发现注册中心](./discovery.md) | `a-bootiful-client` |
-| discovery_type | 必需,如果设置了 `service_name` | string | 服务发现类型,见 [集成服务发现注册中心](./discovery.md) | `eureka` |
-| key | 条件必需 | 匹配类型 | 该选项只有类型是 `chash` 才有效。根据 `key` 来查找对应的 node `id`,相同的 `key` 在同一个对象中,永远返回相同 id,目前支持的 Nginx 内置变量有 `uri, server_name, server_addr, request_uri, remote_port, remote_addr, query_string, host, hostname, arg_***`,其中 `arg_***` 是来自 URL 的请求参数,[Nginx 变量列表](http://nginx.org/en/docs/varindex.html) | |
-| checks | 可选 | health_checker | 配置健康检查的参数,详细可参考[health-check](./tutorials/health-check.md) | |
-| retries | 可选 | 整型 | 使用底层的 Nginx 重试机制将请求传递给下一个上游,默认启用重试且次数为后端可用的 node 数量。如果指定了具体重试次数,它将覆盖默认值。`0` 代表不启用重试机制。 | |
-| retry_timeout | 可选 | number | 限制是否继续重试的时间,若之前的请求和重试请求花费太多时间就不再继续重试。`0` 代表不启用重试超时机制。 | |
-| timeout | 可选 | 超时时间对象 | 设置连接、发送消息、接收消息的超时时间,以秒为单位 | |
-| hash_on | 可选 | 辅助 | `hash_on` 支持的类型有 `vars`(Nginx 内置变量),`header`(自定义 header),`cookie`,`consumer`,默认值为 `vars` |
-| name | 可选 | 辅助 | 标识上游服务名称、使用场景等。 | |
-| desc | 可选 | 辅助 | 上游服务描述、使用场景等。 | |
-| pass_host | 可选 | 枚举 | 请求发给上游时的 host 设置选型。 [`pass`,`node`,`rewrite`] 之一,默认是`pass`。`pass`: 将客户端的 host 透传给上游; `node`: 使用 `upstream` node 中配置的 host; `rewrite`: 使用配置项 `upstream_host` 的值。 | |
-| upstream_host | 可选 | 辅助 | 指定上游请求的 host,只在 `pass_host` 配置为 `rewrite` 时有效。 | |
-| scheme | 可选 | 辅助 | 跟上游通信时使用的 scheme。对于 7 层代理,需要是 ['http', 'https', 'grpc', 'grpcs'] 其中的一个。对于 4 层代理,需要是 ['tcp', 'udp', 'tls'] 其中的一个。默认是 'http'。细节见下文。 |
-| labels | 可选 | 匹配规则 | 标识附加属性的键值对 | {"version":"v2","build":"16","env":"production"} |
-| create_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
-| update_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
-| tls.client_cert | 可选,不能和 `tls.client_cert_id` 一起使用 | https 证书 | 设置跟上游通信时的客户端证书,细节见下文 | |
-| tls.client_key | 可选,不能和 `tls.client_cert_id` 一起使用 | https 证书私钥 | 设置跟上游通信时的客户端私钥,细节见下文 | |
-| tls.client_cert_id | 可选,不能和 `tls.client_cert`、`tls.client_key` 一起使用 | SSL | 设置引用的 ssl id,详见 [SSL](#ssl) | |
-|keepalive_pool.size | 可选 | 辅助 | 动态设置 `keepalive` 指令,细节见下文 |
-|keepalive_pool.idle_timeout | 可选 | 辅助 | 动态设置 `keepalive_timeout` 指令,细节见下文 |
-|keepalive_pool.requests | 可选 | 辅助 | 动态设置 `keepalive_requests` 指令,细节见下文 |
-
-`type` 可以是以下的一种:
-
-- `roundrobin`: 带权重的 roundrobin
-- `chash`: 一致性哈希
-- `ewma`: 选择延迟最小的节点,计算细节参考 https://en.wikipedia.org/wiki/EWMA_chart
-- `least_conn`: 选择 `(active_conn + 1) / weight` 最小的节点。注意这里的 `active connection` 概念跟 Nginx 的相同:它是当前正在被请求使用的连接。
+| type | 是 | 枚举 | 负载均衡算法。 | | |
+| nodes | 是,与 `service_name` 二选一。 | Node | 哈希表或数组。当它是哈希表时,内部元素的 key 是上游机器地址列表,格式为`地址 +(可选的)端口`,其中地址部分可以是 IP 也可以是域名,比如 `192.168.1.100:80`、`foo.com:80`等。对于哈希表的情况,如果 key 是 IPv6 地址加端口,则必须用中括号将 IPv6 地址括起来。`value` 则是节点的权重。当它是数组时,数组中每个元素都是一个哈希表,其中包含 `host`、`weight` 以及可选的 `port`、`priority`。`nodes` 可以为空,这通常用作占位符。客户端命中这样的上游会返回 `502`。 | `192.168.1.100:80`, `[::1]:80` |
+| service_name | 是,与 `nodes` 二选一。 | string | 服务发现时使用的服务名,请参考 [集成服务发现注册中心](./discovery.md)。 | `a-bootiful-client` |
+| discovery_type | 是,与 `service_name` 配合使用。 | string | 服务发现类型,请参考 [集成服务发现注册中心](./discovery.md)。 | `eureka` |
+| key | 条件必需 | 匹配类型 | 该选项只有类型是 `chash` 才有效。根据 `key` 来查找对应的节点 `id`,相同的 `key` 在同一个对象中,则返回相同 id。目前支持的 NGINX 内置变量有 `uri, server_name, server_addr, request_uri, remote_port, remote_addr, query_string, host, hostname, arg_***`,其中 `arg_***` 是来自 URL 的请求参数,详细信息请参考 [NGINX 变量列表](http://nginx.org/en/docs/varindex.html)。 | |
+| checks | 否 | health_checker | 配置健康检查的参数,详细信息请参考 [health-check](health-check.md)。 | |
+| retries | 否 | 整型 | 使用 NGINX 重试机制将请求传递给下一个上游,默认启用重试机制且次数为后端可用的节点数量。如果指定了具体重试次数,它将覆盖默认值。当设置为 `0` 时,表示不启用重试机制。 | |
+| retry_timeout | 否 | number | 限制是否继续重试的时间,若之前的请求和重试请求花费太多时间就不再继续重试。当设置为 `0` 时,表示不启用重试超时机制。 | |
+| timeout | 否 | 超时时间对象 | 设置连接、发送消息、接收消息的超时时间,以秒为单位。 | |
+| hash_on | 否 | 辅助 | `hash_on` 支持的类型有 `vars`(NGINX 内置变量),`header`(自定义 header),`cookie`,`consumer`,默认值为 `vars`。 |
+| name | 否 | 辅助 | 标识上游服务名称、使用场景等。 | |
+| desc | 否 | 辅助 | 上游服务描述、使用场景等。 | |
+| pass_host | 否 | 枚举 | 请求发给上游时的 `host` 设置选型。 [`pass`,`node`,`rewrite`] 之一,默认是 `pass`。`pass`: 将客户端的 host 透传给上游; `node`: 使用 `upstream` node 中配置的 `host`; `rewrite`: 使用配置项 `upstream_host` 的值。 | |
+| upstream_host | 否 | 辅助 | 指定上游请求的 host,只在 `pass_host` 配置为 `rewrite` 时有效。 | |
+| scheme | 否 | 辅助 | 跟上游通信时使用的 scheme。对于 7 层代理,可选值为 [`http`, `https`, `grpc`, `grpcs`]。对于 4 层代理,可选值为 [`tcp`, `udp`, `tls`]。默认值为 `http`,详细信息请参考下文。 |
+| labels | 否 | 匹配规则 | 标识附加属性的键值对。 | {"version":"v2","build":"16","env":"production"} |
+| create_time | 否 | 辅助 | epoch 时间戳,单位为秒。如果不指定则自动创建。 | 1602883670 |
+| update_time | 否 | 辅助 | epoch 时间戳,单位为秒。如果不指定则自动创建。 | 1602883670 |
+| tls.client_cert | 否,不能和 `tls.client_cert_id` 一起使用 | https 证书 | 设置跟上游通信时的客户端证书,详细信息请参考下文。 | |
+| tls.client_key | 否,不能和 `tls.client_cert_id` 一起使用 | https 证书私钥 | 设置跟上游通信时的客户端私钥,详细信息请参考下文。 | |
+| tls.client_cert_id | 否,不能和 `tls.client_cert`、`tls.client_key` 一起使用 | SSL | 设置引用的 SSL id,详见 [SSL](#ssl)。 | |
+|keepalive_pool.size | 否 | 辅助 | 动态设置 `keepalive` 指令,详细信息请参考下文。 |
+|keepalive_pool.idle_timeout | 否 | 辅助 | 动态设置 `keepalive_timeout` 指令,详细信息请参考下文。 |
+|keepalive_pool.requests | 否 | 辅助 | 动态设置 `keepalive_requests` 指令,详细信息请参考下文。 |
+
+`type` 详细信息如下:
+
+- `roundrobin`: 带权重的 Round Robin。
+- `chash`: 一致性哈希。
+- `ewma`: 选择延迟最小的节点,请参考 [EWMA_chart](https://en.wikipedia.org/wiki/EWMA_chart)。
+- `least_conn`: 选择 `(active_conn + 1) / weight` 最小的节点。此处的 `active connection` 概念跟 NGINX 的相同,它是当前正在被请求使用的连接。
- 用户自定义的 balancer,需要可以通过 `require("apisix.balancer.your_balancer")` 来加载。
-`hash_on` 比较复杂,这里专门说明下:
+`hash_on` 详细信息如下:
-1. 设为 `vars` 时,`key` 为必传参数,目前支持的 Nginx 内置变量有 `uri, server_name, server_addr, request_uri, remote_port, remote_addr, query_string, host, hostname, arg_***`,其中 `arg_***` 是来自 URL 的请求参数,[Nginx 变量列表](http://nginx.org/en/docs/varindex.html)
-2. 设为 `header` 时,`key` 为必传参数,其值为自定义的 header name,即 "http\_`key`"
-3. 设为 `cookie` 时,`key` 为必传参数,其值为自定义的 cookie name,即 "cookie\_`key`"。请注意 cookie name 是**区分大小写字母**的。例如:"cookie_x_foo" 与 "cookie_X_Foo" 表示不同的 `cookie`。
-4. 设为 `consumer` 时,`key` 不需要设置。此时哈希算法采用的 `key` 为认证通过的 `consumer_name`。
-5. 如果指定的 `hash_on` 和 `key` 获取不到值时,就是用默认值:`remote_addr`。
+- 设为 `vars` 时,`key` 为必传参数,目前支持的 NGINX 内置变量有 `uri, server_name, server_addr, request_uri, remote_port, remote_addr, query_string, host, hostname, arg_***`,其中 `arg_***` 是来自 URL 的请求参数。详细信息请参考 [NGINX 变量列表](http://nginx.org/en/docs/varindex.html)。
+- 设为 `header` 时,`key` 为必传参数,其值为自定义的 Header name,即 "http\_`key`"。
+- 设为 `cookie` 时,`key` 为必传参数,其值为自定义的 cookie name,即 "cookie\_`key`"。请注意 cookie name 是**区分大小写字母**的。例如:`cookie_x_foo` 与 `cookie_X_Foo` 表示不同的 `cookie`。
+- 设为 `consumer` 时,`key` 不需要设置。此时哈希算法采用的 `key` 为认证通过的 `consumer_name`。
+- 如果指定的 `hash_on` 和 `key` 获取不到值时,使用默认值:`remote_addr`。
以下特性需要 APISIX 运行于 [APISIX-Base](./FAQ.md#如何构建-APISIX-Base-环境?):
-`scheme` 可以设置成 `tls`,表示 "TLS over TCP"。
-
-`tls.client_cert/key` 可以用来跟上游进行 mTLS 通信。
-他们的格式和 SSL 对象的 `cert` 和 `key` 一样。
+- `scheme` 可以设置成 `tls`,表示 `TLS over TCP`。
+- `tls.client_cert/key` 可以用来跟上游进行 mTLS 通信。他们的格式和 SSL 对象的 `cert` 和 `key` 一样。
+- `tls.client_cert_id` 可以用来指定引用的 SSL 对象。只有当 SSL 对象的 `type` 字段为 client 时才能被引用,否则请求会被 APISIX 拒绝。另外,SSL 对象中只有 `cert` 和 `key` 会被使用。
+- `keepalive_pool` 允许 Upstream 有自己单独的连接池。它下属的字段,比如 `requests`,可以用于配置上游连接保持的参数。该特性需要 APISIX 运行于 [APISIX-Base](./FAQ.md#如何构建-apisix-base-环境) 中。
-`tls.client_cert_id` 可以用来指定引用的 SSL 对象。只有当 SSL 对象的 `type` 字段为 client 时才能被引用,否则请求会被 APISIX 拒绝。另外,SSL 对象中只有 `cert`和`key` 会被使用。
-
-`keepalive_pool` 允许 upstream 对象有自己单独的连接池。
-它下属的字段,比如 `requests`,可以用了配置上游连接保持的参数。
-这个特性需要 APISIX 运行于 [APISIX-Base](./FAQ.md#如何构建-apisix-base-环境)。
-
-**upstream 对象 json 配置内容:**
+Upstream 对象 JSON 配置示例:
```shell
{
@@ -729,204 +894,248 @@ APISIX 的 Upstream 除了基本的负载均衡算法选择外,还支持对上
}
```
-**具体示例:**
+### 使用示例 {#upstream-example}
-示例一:创建一个 upstream 并对 `nodes` 的数据做修改
+#### 创建 Upstream 并对 `nodes` 的数据进行修改 {#create-upstream}
-```shell
-# 创建一个 upstream
-$ curl http://127.0.0.1:9180/apisix/admin/upstreams/100 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -i -X PUT -d '
-{
- "type":"roundrobin",
- "nodes":{
- "127.0.0.1:1980": 1
- }
-}'
-HTTP/1.1 201 Created
-...
+1. 创建 Upstream:
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/upstreams/100 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -i -X PUT -d '
+ {
+ "type":"roundrobin",
+ "nodes":{
+ "127.0.0.1:1980": 1
+ }
+ }'
+ ```
-# 给 Upstream 增加一个 node
-$ curl http://127.0.0.1:9180/apisix/admin/upstreams/100 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "nodes": {
+ ```
+ HTTP/1.1 201 Created
+ ...
+ ```
+
+2. 在 Upstream 中添加一个节点:
+
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/upstreams/100 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "nodes": {
+ "127.0.0.1:1981": 1
+ }
+ }'
+ ```
+
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
+
+ 执行成功后,`nodes` 将更新为:
+
+ ```
+ {
+ "127.0.0.1:1980": 1,
"127.0.0.1:1981": 1
}
-}'
-HTTP/1.1 200 OK
-...
+ ```
-执行成功后,nodes 将更新为:
-{
- "127.0.0.1:1980": 1,
- "127.0.0.1:1981": 1
-}
+3. 更新 Upstream 中单个节点的权重:
+
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/upstreams/100 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "nodes": {
+ "127.0.0.1:1981": 10
+ }
+ }'
+ ```
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
-# 给 Upstream 更新一个 node 的权重
-$ curl http://127.0.0.1:9180/apisix/admin/upstreams/100 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "nodes": {
+ 执行成功后,`nodes` 将更新为:
+
+ ```
+ {
+ "127.0.0.1:1980": 1,
"127.0.0.1:1981": 10
}
-}'
-HTTP/1.1 200 OK
-...
+ ```
-执行成功后,nodes 将更新为:
-{
- "127.0.0.1:1980": 1,
- "127.0.0.1:1981": 10
-}
+4. 删除 Upstream 中的一个节点:
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/upstreams/100 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "nodes": {
+ "127.0.0.1:1980": null
+ }
+ }'
+ ```
-# 给 Upstream 删除一个 node
-$ curl http://127.0.0.1:9180/apisix/admin/upstreams/100 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "nodes": {
- "127.0.0.1:1980": null
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
+
+ 执行成功后,`nodes` 将更新为:
+
+ ```
+ {
+ "127.0.0.1:1981": 10
}
-}'
-HTTP/1.1 200 OK
-...
+ ```
-执行成功后,nodes 将更新为:
-{
- "127.0.0.1:1981": 10
-}
+5. 更新 Upstream 的 `nodes`:
+ ```shell
+ curl http://127.0.0.1:9180/apisix/admin/upstreams/100/nodes \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
+ {
+ "127.0.0.1:1982": 1
+ }'
+ ```
-# 替换 Upstream 的 nodes
-$ curl http://127.0.0.1:9180/apisix/admin/upstreams/100/nodes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PATCH -i -d '
-{
- "127.0.0.1:1982": 1
-}'
-HTTP/1.1 200 OK
-...
+ ```
+ HTTP/1.1 200 OK
+ ...
+ ```
-执行成功后,nodes 将不保留原来的数据,整个更新为:
-{
- "127.0.0.1:1982": 1
-}
+ 执行成功后,`nodes` 将不再保留原来的数据:
-```
+ ```
+ {
+ "127.0.0.1:1982": 1
+ }
+ ```
-示例二:将客户端请求代理到上游 `https` 服务
+#### 将客户端请求代理到上游 `https` 服务 {#proxy-https}
-1、创建 route 并配置 upstream 的 scheme 为 `https`。
+1. 创建 Route 并配置 Upstream 的 Scheme 为 `https`:
-```shell
-$ curl -i http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
-{
- "uri": "/get",
- "upstream": {
- "type": "roundrobin",
- "scheme": "https",
- "nodes": {
- "httpbin.org:443": 1
+ ```shell
+ curl -i http://127.0.0.1:9180/apisix/admin/routes/1 \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
+ {
+ "uri": "/get",
+ "upstream": {
+ "type": "roundrobin",
+ "scheme": "https",
+ "nodes": {
+ "httpbin.org:443": 1
+ }
}
- }
-}'
-```
+ }'
+ ```
-执行成功后,请求与上游通信时的 scheme 将为 `https`。
+ 执行成功后,请求与上游通信时的 Scheme 将为 `https`。
-2、 发送请求进行测试。
+2. 发送请求进行测试:
-```shell
-$ curl http://127.0.0.1:9080/get
-{
- "args": {},
- "headers": {
- "Accept": "*/*",
- "Host": "127.0.0.1",
- "User-Agent": "curl/7.29.0",
- "X-Amzn-Trace-Id": "Root=1-6058324a-0e898a7f04a5e95b526bb183",
- "X-Forwarded-Host": "127.0.0.1"
- },
- "origin": "127.0.0.1",
- "url": "https://127.0.0.1/get"
-}
-```
+ ```shell
+ curl http://127.0.0.1:9080/get
+ ```
+
+ ```shell
+ {
+ "args": {},
+ "headers": {
+ "Accept": "*/*",
+ "Host": "127.0.0.1",
+ "User-Agent": "curl/7.29.0",
+ "X-Amzn-Trace-Id": "Root=1-6058324a-0e898a7f04a5e95b526bb183",
+ "X-Forwarded-Host": "127.0.0.1"
+ },
+ "origin": "127.0.0.1",
+ "url": "https://127.0.0.1/get"
+ }
+ ```
-请求成功,表示代理上游 `https` 生效了。
+ 请求成功,表示代理上游 `https` 生效了。
-**注意:**
+ :::tip 提示
-节点可以配置自己的优先级。只有在高优先级的节点不可用或者尝试过,才会访问一个低优先级的节点。
+ 每个节点均可以配置优先级,只有在高优先级的节点不可用或者尝试过,才会访问一个低优先级的节点。
-由于默认的优先级是 0,我们可以给一些节点配置负数的优先级来作为备份。
-举个例子:
+ :::
-```json
-{
- "uri": "/hello",
- "upstream": {
- "type": "roundrobin",
- "nodes": [
- {"host": "127.0.0.1", "port": 1980, "weight": 2000},
- {"host": "127.0.0.1", "port": 1981, "weight": 1, "priority": -1}
- ],
- "checks": {
- "active": {
- "http_path": "/status",
- "healthy": {
- "interval": 1,
- "successes": 1
- },
- "unhealthy": {
- "interval": 1,
- "http_failures": 1
+ 由于上游节点的默认优先级是 `0`,你可以将一些节点的优先级设置为负数,让其作为备份节点。例如:
+
+ ```JSON
+ {
+ "uri": "/hello",
+ "upstream": {
+ "type": "roundrobin",
+ "nodes": [
+ {"host": "127.0.0.1", "port": 1980, "weight": 2000},
+ {"host": "127.0.0.1", "port": 1981, "weight": 1, "priority": -1}
+ ],
+ "checks": {
+ "active": {
+ "http_path": "/status",
+ "healthy": {
+ "interval": 1,
+ "successes": 1
+ },
+ "unhealthy": {
+ "interval": 1,
+ "http_failures": 1
+ }
}
}
}
}
-}
-```
+ ```
-节点 `127.0.0.2` 只有在 `127.0.0.1` 不可用或者尝试过之后才会被访问。
-所以它是 `127.0.0.1` 的备份。
+ 节点 `127.0.0.2` 只有在 `127.0.0.1` 不可用或者尝试过之后才会被访问,因此它是 `127.0.0.1` 的备份。
-### 应答参数
+### 应答参数 {#upstream-response-parameters}
目前是直接返回与 etcd 交互后的结果。
-[Back to TOC](#目录)
-
## SSL
-*地址*:/apisix/admin/ssls/{id}
+你可以使用该资源创建 SSL 证书。
-*说明*:SSL.
+### 请求地址 {#ssl-uri}
-### 请求方法
+SSL 资源请求地址:/apisix/admin/ssls/{id}
-| 名字 | 请求 uri | 请求 body | 说明 |
-| ------ | ---------------------- | --------- | ------------------------------- |
-| GET | /apisix/admin/ssls | 无 | 获取资源列表 |
-| GET | /apisix/admin/ssls/{id} | 无 | 获取资源 |
-| PUT | /apisix/admin/ssls/{id} | {...} | 根据 id 创建资源 |
-| POST | /apisix/admin/ssls | {...} | 创建资源,id 由后台服务自动生成 |
-| DELETE | /apisix/admin/ssls/{id} | 无 | 删除资源 |
+### 请求方法 {#ssl-request-methods}
-### body 请求参数
+| 名称 | 请求 URI | 请求 body | 描述 |
+| ------ | ----------------------- | --------- | ------------------------------- |
+| GET | /apisix/admin/ssls | 无 | 获取资源列表。 |
+| GET | /apisix/admin/ssls/{id} | 无 | 获取资源。 |
+| PUT | /apisix/admin/ssls/{id} | {...} | 创建指定 id 的资源。 |
+| POST | /apisix/admin/ssls | {...} | 创建资源,id 由后台服务自动生成。 |
+| DELETE | /apisix/admin/ssls/{id} | 无 | 删除资源。 |
-| 名字 | 可选项 | 类型 | 说明 | 示例 |
+### body 请求参数 {#ssl-body-request-methods}
+
+| 名称 | 必选项 | 类型 | 描述 | 示例 |
| ----------- | ------ | -------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------ |
-| cert | 必需 | 证书 | https 证书 | |
-| key | 必需 | 私钥 | https 证书私钥 | |
-| certs | 可选 | 证书字符串数组 | 当你想给同一个域名配置多个证书时,除了第一个证书需要通过 cert 传递外,剩下的证书可以通过该参数传递上来 | |
-| keys | 可选 | 私钥字符串数组 | certs 对应的证书私钥,注意要跟 certs 一一对应 | |
-| client.ca | 可选 | 证书 | 设置将用于客户端证书校验的 CA 证书。该特性需要 OpenResty 1.19+ | |
-| client.depth | 可选 | 辅助 | 设置客户端证书校验的深度,默认为 1。该特性需要 OpenResty 1.19+ | |
-| snis | 必需 | 匹配规则 | 非空数组形式,可以匹配多个 SNI | |
-| labels | 可选 | 匹配规则 | 标识附加属性的键值对 | {"version":"v2","build":"16","env":"production"} |
-| create_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
-| update_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
-| type | 可选 | 辅助 | 标识证书的类型,缺省为 `server`。 | `client` 表示证书是客户端证书,APISIX 访问上游时使用;`server` 表示证书是服务端证书,APISIX 验证客户端请求时使用 |
-| status | 可选 | 辅助 | 是否启用此 SSL,缺省 `1`。 | `1` 表示启用,`0` 表示禁用 |
-
-ssl 对象 json 配置内容:
+| cert | 是 | 证书 | HTTP 证书。 | |
+| key | 是 | 私钥 | HTTPS 证书私钥 | |
+| certs | 否 | 证书字符串数组 | 当你想给同一个域名配置多个证书时,除了第一个证书需要通过 `cert` 传递外,剩下的证书可以通过该参数传递上来。 | |
+| keys | 否 | 私钥字符串数组 | `certs` 对应的证书私钥,需要与 `certs` 一一对应。 | |
+| client.ca | 否 | 证书 | 设置将用于客户端证书校验的 `CA` 证书。该特性需要 OpenResty 为 1.19 及以上版本。 | |
+| client.depth | 否 | 辅助 | 设置客户端证书校验的深度,默认为 1。该特性需要 OpenResty 为 1.19 及以上版本。 | |
+| snis | 是 | 匹配规则 | 非空数组形式,可以匹配多个 SNI。 | |
+| labels | 否 | 匹配规则 | 标识附加属性的键值对。 | {"version":"v2","build":"16","env":"production"} |
+| create_time | 否 | 辅助 | epoch 时间戳,单位为秒。如果不指定则自动创建。 | 1602883670 |
+| update_time | 否 | 辅助 | epoch 时间戳,单位为秒。如果不指定则自动创建。 | 1602883670 |
+| type | 否 | 辅助 | 标识证书的类型,默认值为 `server`。 | `client` 表示证书是客户端证书,APISIX 访问上游时使用;`server` 表示证书是服务端证书,APISIX 验证客户端请求时使用。 |
+| status | 否 | 辅助 | 当设置为 `1` 时,启用此 SSL,默认值为 `1`。 | `1` 表示启用,`0` 表示禁用 |
+
+SSL 对象 JSON 配置示例:
```shell
{
@@ -937,205 +1146,210 @@ ssl 对象 json 配置内容:
}
```
-更多的配置示例见 [证书](./certificate.md)。
+更多的配置示例,请参考[证书](./certificate.md)。
-[Back to TOC](#目录)
+## Global Rules
-## Global Rule
+Global Rule 可以设置全局运行的插件,设置为全局规则的插件将在所有路由级别的插件之前优先运行。
-*地址*:/apisix/admin/global_rules/{id}
+### 请求地址 {#global-rule-uri}
-*说明*:设置全局运行的插件。这一类插件在所有路由级别的插件之前优先运行。
+Global Rule 资源请求地址:/apisix/admin/global_rules/{id}
-### 请求方法
+### 请求方法 {#global-rule-request-methods}
-| 名字 | 请求 uri | 请求 body | 说明 |
+| 名称 | 请求 URI | 请求 body | 描述 |
| ------ | -------------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| GET | /apisix/admin/global_rules | 无 | 获取资源列表 |
-| GET | /apisix/admin/global_rules/{id} | 无 | 获取资源 |
-| PUT | /apisix/admin/global_rules/{id} | {...} | 根据 id 创建资源 |
-| DELETE | /apisix/admin/global_rules/{id} | 无 | 删除资源 |
-| PATCH | /apisix/admin/global_rules/{id} | {...} | 标准 PATCH ,修改已有 Global Rule 的部分属性,其他不涉及的属性会原样保留;如果你要删除某个属性,将该属性的值设置为 null 即可删除;特别地,当需要修改属性的值为数组时,该属性将全量更新 |
-| PATCH | /apisix/admin/global_rules/{id}/{path} | {...} | SubPath PATCH,通过 {path} 指定 Global Rule 要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。 |
-
-### body 请求参数
+| GET | /apisix/admin/global_rules | 无 | 获取资源列表。 |
+| GET | /apisix/admin/global_rules/{id} | 无 | 获取资源。 |
+| PUT | /apisix/admin/global_rules/{id} | {...} | 将创建指定 id 的资源。 |
+| DELETE | /apisix/admin/global_rules/{id} | 无 | 删除资源。 |
+| PATCH | /apisix/admin/global_rules/{id} | {...} | 标准 PATCH ,修改已有 Global Rule 的部分属性,其他不涉及的属性会原样保留;如果你要删除某个属性,将该属性的值设置为 null 即可删除;**注意**:当需要修改属性的值为数组时,该属性将全量更新。 |
+| PATCH | /apisix/admin/global_rules/{id}/{path} | {...} | SubPath PATCH,通过 `{path}` 指定 Global Rule 要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。 |
-| 名字 | 可选项 | 类型 | 说明 | 示例 |
-| ----------- | ------ | ------ | --------------------------------------------- | ---------- |
-| plugins | 必需 | Plugin | 详见 [Plugin](terminology/plugin.md) | |
-| create_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
-| update_time | 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 | 1602883670 |
+### body 请求参数 {#global-rule-body-request-parameters}
-[Back to TOC](#目录)
+| 名称 | 必选项 | 类型 | 描述 | 示例值 |
+| ----------- | ------ | ------ | ------------------------------------------------- | ---------- |
+| plugins | 是 | Plugin | 插件配置。详细信息请参考 [Plugin](terminology/plugin.md)。 | |
+| create_time | 否 | 辅助 | epoch 时间戳,单位为秒,如果不指定则自动创建。 | 1602883670 |
+| update_time | 否 | 辅助 | epoch 时间戳,单位为秒,如果不指定则自动创建。 | 1602883670 |
## Consumer Group
-*地址*:/apisix/admin/consumer_groups/{id}
+你可以使用该资源配置一组可以在 Consumer 间复用的插件。
-*说明*:配置一组可以在 Consumer 间复用的插件。
+### 请求地址 {#consumer-group-uri}
-### 请求方法
+Consumer Group 资源请求地址:/apisix/admin/consumer_groups/{id}
-| 名字 | 请求 uri | 请求 body | 说明 |
-| ------ | ---------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| GET | /apisix/admin/consumer_groups | 无 | 获取资源列表 |
-| GET | /apisix/admin/consumer_groups/{id} | 无 | 获取资源 |
-| PUT | /apisix/admin/consumer_groups/{id} | {...} | 根据 id 创建资源 |
-| DELETE | /apisix/admin/consumer_groups/{id} | 无 | 删除资源 |
-| PATCH | /apisix/admin/consumer_groups/{id} | {...} | 标准 PATCH ,修改已有 Consumer Group 的部分属性,其他不涉及的属性会原样保留;如果你要删除某个属性,将该属性的值设置为 null 即可删除;特别地,当需要修改属性的值为数组时,该属性将全量更新 |
-| PATCH | /apisix/admin/consumer_groups/{id}/{path} | {...} | SubPath PATCH,通过 {path} 指定 Consumer Group 要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。 |
+### 请求方法 {#consumer-group-request-methods}
-### body 请求参数
+| 名称 | 请求 URI | 请求 body | 描述 |
+| ------ | ----------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| GET | /apisix/admin/consumer_groups | 无 | 获取资源列表。 |
+| GET | /apisix/admin/consumer_groups/{id} | 无 | 获取资源。 |
+| PUT | /apisix/admin/consumer_groups/{id} | {...} | 将创建指定 id 的资源。 |
+| DELETE | /apisix/admin/consumer_groups/{id} | 无 | 删除资源。 |
+| PATCH | /apisix/admin/consumer_groups/{id} | {...} | 标准 PATCH,修改已有 Consumer Group 的部分属性,其他不涉及的属性会原样保留;如果你要删除某个属性,将该属性的值设置为 null 即可删除;**注意**:当需要修改属性的值为数组时,该属性将全量更新。 |
+| PATCH | /apisix/admin/consumer_groups/{id}/{path} | {...} | SubPath PATCH,通过 `{path}` 指定 Consumer Group 要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。 |
-| 名字 | 可选项 | 类型 | 说明 | 示例 |
-|---------|---------|----|-----------|----|
-|plugins | 必需 |Plugin| 详见 [Plugin](terminology/plugin.md) ||
-|desc | 可选 | 辅助 | 标识描述、使用场景等 |customer xxxx|
-|labels | 可选 | 辅助 | 标识附加属性的键值对 |{"version":"v2","build":"16","env":"production"}|
-|create_time| 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 |1602883670|
-|update_time| 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 |1602883670|
+### body 请求参数 {#consumer-group-body-request-parameters}
-[Back to TOC](#目录)
+| 名称 | 必选项 | 类型 | 描述 | 示例值 |
+|--------- |--------- |------|----------------------------------------------- |------|
+|plugins | 是 |Plugin| 插件配置。详细信息请参考 [Plugin](terminology/plugin.md)。 | |
+|desc | 否 | 辅助 | 标识描述、使用场景等。 | Consumer 测试。|
+|labels | 否 | 辅助 | 标识附加属性的键值对。 |{"version":"v2","build":"16","env":"production"}|
+|create_time| 否 | 辅助 | epoch 时间戳,单位为秒,如果不指定则自动创建。 |1602883670|
+|update_time| 否 | 辅助 | epoch 时间戳,单位为秒,如果不指定则自动创建。 |1602883670|
## Plugin Config
-*地址*:/apisix/admin/plugin_configs/{id}
+你可以使用 Plugin Config 资源创建一组可以在路由间复用的插件。
-*说明*:配置一组可以在路由间复用的插件。
+### 请求地址 {#plugin-config-uri}
-### 请求方法
+Plugin Config 资源请求地址:/apisix/admin/plugin_configs/{id}
-| 名字 | 请求 uri | 请求 body | 说明 |
+### 请求方法 {#plugin-config-request-methods}
+
+| 名称 | 请求 URI | 请求 body | 描述 |
| ------ | ---------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| GET | /apisix/admin/plugin_configs | 无 | 获取资源列表 |
-| GET | /apisix/admin/plugin_configs/{id} | 无 | 获取资源 |
-| PUT | /apisix/admin/plugin_configs/{id} | {...} | 根据 id 创建资源 |
-| DELETE | /apisix/admin/plugin_configs/{id} | 无 | 删除资源 |
-| PATCH | /apisix/admin/plugin_configs/{id} | {...} | 标准 PATCH ,修改已有 Plugin Config 的部分属性,其他不涉及的属性会原样保留;如果你要删除某个属性,将该属性的值设置为 null 即可删除;特别地,当需要修改属性的值为数组时,该属性将全量更新 |
+| GET | /apisix/admin/plugin_configs | 无 | 获取资源列表。 |
+| GET | /apisix/admin/plugin_configs/{id} | 无 | 获取资源。 |
+| PUT | /apisix/admin/plugin_configs/{id} | {...} | 根据 id 创建资源。 |
+| DELETE | /apisix/admin/plugin_configs/{id} | 无 | 删除资源。 |
+| PATCH | /apisix/admin/plugin_configs/{id} | {...} | 标准 PATCH ,修改已有 Plugin Config 的部分属性,其他不涉及的属性会原样保留;如果你要删除某个属性,将该属性的值设置为 null 即可删除;**注意**:当需要修改属性的值为数组时,该属性将全量更新。 |
| PATCH | /apisix/admin/plugin_configs/{id}/{path} | {...} | SubPath PATCH,通过 {path} 指定 Plugin Config 要更新的属性,全量更新该属性的数据,其他不涉及的属性会原样保留。 |
-### body 请求参数
-
-| 名字 | 可选项 | 类型 | 说明 | 示例 |
-|---------|---------|----|-----------|----|
-|plugins | 必需 |Plugin| 详见 [Plugin](terminology/plugin.md) ||
-|desc | 可选 | 辅助 | 标识描述、使用场景等 |customer xxxx|
-|labels | 可选 | 辅助 | 标识附加属性的键值对 |{"version":"v2","build":"16","env":"production"}|
-|create_time| 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 |1602883670|
-|update_time| 可选 | 辅助 | 单位为秒的 epoch 时间戳,如果不指定则自动创建 |1602883670|
+### body 请求参数 {#plugin-config-body-request-parameters}
-[Back to TOC](#目录)
+| 名称 | 必选项 | 类型 | 描述 | 示例值 |
+|--------- |---------|----|-----------|----|
+|plugins | 是 |Plugin| 更多信息请参考 [Plugin](terminology/plugin.md)。||
+|desc | 否 | 辅助 | 标识描述、使用场景等。 |customer xxxx|
+|labels | 否 | 辅助 | 标识附加属性的键值对。 |{"version":"v2","build":"16","env":"production"}|
+|create_time| 否 | 辅助 | epoch 时间戳,单位为秒,如果不指定则自动创建。 |1602883670|
+|update_time| 否 | 辅助 | epoch 时间戳,单位为秒,如果不指定则自动创建。 |1602883670|
## Plugin Metadata
-*地址*:/apisix/admin/plugin_metadata/{plugin_name}
+你可以使用 Plugin Metadata 资源配置插件元数据。
-*说明*: 插件元数据。
+### 请求地址 {#plugin-metadata-uri}
-### 请求方法
+Plugin Config 资源请求地址:/apisix/admin/plugin_metadata/{plugin_name}
-| Method | 请求 URI | 请求 body | 说明 |
+### 请求方法 {#plugin-metadata-request-methods}
+
+| Method | 请求 URI | 请求 body | 描述 |
| ------ | ------------------------------------------- | --------- | ------------------------- |
-| GET | /apisix/admin/plugin_metadata/{plugin_name} | 无 | 获取资源 |
-| PUT | /apisix/admin/plugin_metadata/{plugin_name} | {...} | 根据 plugin name 创建资源 |
-| DELETE | /apisix/admin/plugin_metadata/{plugin_name} | 无 | 删除资源 |
+| GET | /apisix/admin/plugin_metadata/{plugin_name} | 无 | 获取资源。 |
+| PUT | /apisix/admin/plugin_metadata/{plugin_name} | {...} | 根据 `plugin name` 创建资源。 |
+| DELETE | /apisix/admin/plugin_metadata/{plugin_name} | 无 | 删除资源。 |
-### body 请求参数
+### body 请求参数 {#plugin-metadata-body-request-parameters}
-一个根据插件 ({plugin_name}) 的 `metadata_schema` 定义的数据结构的 json object 。
+根据插件 (`{plugin_name}`) 的 `metadata_schema` 定义的数据结构的 JSON 对象。
-例子:
+### 使用示例 {#plugin-metadata-example}
```shell
-$ curl http://127.0.0.1:9180/apisix/admin/plugin_metadata/example-plugin -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -i -X PUT -d '
+curl http://127.0.0.1:9180/apisix/admin/plugin_metadata/example-plugin \
+-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -i -X PUT -d '
{
"skey": "val",
"ikey": 1
}'
+```
+
+```
HTTP/1.1 201 Created
Date: Thu, 26 Dec 2019 04:19:34 GMT
Content-Type: text/plain
```
-[Back to TOC](#目录)
-
## Plugin
-*地址*:/apisix/admin/plugins/{plugin_name}
+你可以通过该资源获取插件列表。
-*说明*: 插件
+### 请求地址 {#plugin-uri}
-### 请求方法
+Plugin 资源请求地址:/apisix/admin/plugins/{plugin_name}
-| 名字 | 请求 uri | 请求 body | 说明 |
-| ----------- | ----------------------------------- | ---------- | ------------- |
-| GET | /apisix/admin/plugins/list | 无 | 获取资源列表 |
-| GET | /apisix/admin/plugins/{plugin_name} | 无 | 获取资源 |
-| GET | /apisix/admin/plugins?all=true | 无 | 获取所有插件的所有属性 |
+### 请求方法 {#plugin-request-methods}
-### body 请求参数
+| 名称 | 请求 URI | 请求 body | 描述 |
+| ----------- | ----------------------------------- | ---------- | ------------- |
+| GET | /apisix/admin/plugins/list | 无 | 获取资源列表。 |
+| GET | /apisix/admin/plugins/{plugin_name} | 无 | 获取资源。 |
+| GET | /apisix/admin/plugins?all=true | 无 | 获取所有插件的所有属性。 |
+| GET | /apisix/admin/plugins?all=true&subsystem=stream| 无 | 获取所有 Stream 插件的属性。|
-获取插件 ({plugin_name}) 数据结构的 json object 。
+### 使用示例 {#plugin-example}
-例子:
+获取插件 (`{plugin_name}`) 数据结构的 JSON 对象。
-```shell
-$ curl "http://127.0.0.1:9180/apisix/admin/plugins/list" -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
-["zipkin","request-id",...]
+- 获取插件列表
-$ curl "http://127.0.0.1:9180/apisix/admin/plugins/key-auth" -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
-{"$comment":"this is a mark for our injected plugin schema","properties":{"header":{"default":"apikey","type":"string"},"hide_credentials":{"default":false,"type":"boolean"},"_meta":{"properties":{"filter":{"type":"array","description":"filter determines whether the plugin needs to be executed at runtime"},"disable":{"type":"boolean"},"error_response":{"oneOf":[{"type":"string"},{"type":"object"}]},"priority":{"type":"integer","description":"priority of plugins by customized order"}},"ty [...]
-```
+ ```shell
+ curl "http://127.0.0.1:9180/apisix/admin/plugins/list" \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
+ ```
-*地址*:/apisix/admin/plugins?all=true
+ ```shell
+ ["zipkin","request-id",...]
+ ```
-*说明*: 所有插件的所有属性,每个插件包括 `name`, `priority`, `type`, `schema`, `consumer_schema` 和 `version`。
+- 获取指定插件的属性
-默认情况下,这个接口只返回 http 插件。如果你需要 stream 插件,需要用 `/apisix/admin/plugins?all=true&subsystem=stream`。
+ ```shell
+ curl "http://127.0.0.1:9180/apisix/admin/plugins/key-auth" \
+ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1'
+ ```
-### 请求方法
+ ```json
+ {"$comment":"this is a mark for our injected plugin schema","properties":{"header":{"default":"apikey","type":"string"},"hide_credentials":{"default":false,"type":"boolean"},"_meta":{"properties":{"filter":{"type":"array","description":"filter determines whether the plugin needs to be executed at runtime"},"disable":{"type":"boolean"},"error_response":{"oneOf":[{"type":"string"},{"type":"object"}]},"priority":{"type":"integer","description":"priority of plugins by customized order"}} [...]
+ ```
-| Method | 请求 URI | 请求 body | 说明 |
-| ------ | ------------------------------ | --------- | -------- |
-| GET | /apisix/admin/plugins?all=true | 无 | 获取资源 |
+:::tip
-### 请求参数
+你可以使用 `/apisix/admin/plugins?all=true` 接口获取所有插件的所有属性,每个插件包括 `name`,`priority`,`type`,`schema`,`consumer_schema` 和 `version`。
-| 名称 | 说明 | 默认 |
-| ---- | ----------------------- | -----|
-| subsystem | 插件所属的子系统 | http |
+默认情况下,该接口只返回 HTTP 插件。如果你需要获取 Stream 插件,需要使用 `/apisix/admin/plugins?all=true&subsystem=stream`。
-[Back to TOC](#目录)
+:::
## Stream Route
-*API*:/apisix/admin/stream_routes/{id}
+Stream Route 是用于 TCP/UDP 动态代理的路由。详细信息请参考 [TCP/UDP 动态代理](./stream-proxy.md)。
-*Description*:Stream Route 是用于 TCP/UDP 动态代理的路由。参见 [TCP/UDP 动态代理](./stream-proxy.md) 一节。
+### 请求地址 {#stream-route-uri}
-### 请求方法
+Plugin 资源请求地址:/apisix/admin/stream_routes/{id}
-| 名字 | 请求 uri | 请求 body | 说明 |
-| ------ | -------------------------------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| GET | /apisix/admin/stream_routes | 无 | 获取资源列表 |
-| GET | /apisix/admin/stream_routes/{id} | 无 | 获取资源 |
-| PUT | /apisix/admin/stream_routes/{id} | {...} | 根据 id 创建资源 |
-| POST | /apisix/admin/stream_routes | {...} | 创建资源,id 由后台服务自动生成 |
-| DELETE | /apisix/admin/stream_routes/{id} | 无 | 删除资源 |
+### 请求方法 {#stream-route-request-methods}
-### body 请求参数
+| 名称 | 请求 URI | 请求 body | 描述 |
+| ------ | --------------------------------- | --------- | -------------------------------------------------- |
+| GET | /apisix/admin/stream_routes | 无 | 获取资源列表。 |
+| GET | /apisix/admin/stream_routes/{id} | 无 | 获取资源。 |
+| PUT | /apisix/admin/stream_routes/{id} | {...} | 创建指定 id 的资源。 |
+| POST | /apisix/admin/stream_routes | {...} | 创建资源,id 由后台服务自动生成。 |
+| DELETE | /apisix/admin/stream_routes/{id} | 无 | 删除资源。 |
-| 名字 | 可选项 | 类型 | 说明 | 示例 |
-| ---------------- | ------| -------- | ------| -----|
-| upstream | 可选 | Upstream | 启用的 Upstream 配置,详见 [Upstream](terminology/upstream.md) | |
-| upstream_id | 可选 | Upstream | 启用的 upstream id,详见 [Upstream](terminology/upstream.md) | |
-| remote_addr | 可选 | IP/CIDR | 过滤选项:如果客户端 IP 匹配,则转发到上游 | "127.0.0.1/32" 或 "127.0.0.1" |
-| server_addr | 可选 | IP/CIDR | 过滤选项:如果 APISIX 服务器 IP 与 server_addr 匹配,则转发到上游 | "127.0.0.1/32" 或 "127.0.0.1" |
-| server_port | 可选 | 整数 | 过滤选项:如果 APISIX 服务器 port 与 server_port 匹配,则转发到上游 | 9090 |
-| sni | 可选 | Host | 服务器名称指示 | "test.com" |
-| protocol.name | 可选 | 字符串 | xRPC 框架代理的协议的名称 | "redis" |
-| protocol.conf | 可选 | 配置 | 协议特定的配置 | |
+### body 请求参数{#stream-route-body-request-parameters}
-点击 [此处](./stream-proxy.md#more-route-match-options),了解更多有关过滤器如何工作的信息。
+| 名称 | 必选项 | 类型 | 描述 | 示例值 |
+| ---------------- | ------| -------- | ------------------------------------------------------------------------------| ------ |
+| upstream | 否 | Upstream | Upstream 配置,详细信息请参考 [Upstream](terminology/upstream.md)。 | |
+| upstream_id | 否 | Upstream | 需要使用的 Upstream id,详细信息请 [Upstream](terminology/upstream.md)。 | |
+| remote_addr | 否 | IP/CIDR | 过滤选项:如果客户端 IP 匹配,则转发到上游 | "127.0.0.1/32" 或 "127.0.0.1" |
+| server_addr | 否 | IP/CIDR | 过滤选项:如果 APISIX 服务器的 IP 与 `server_addr` 匹配,则转发到上游。 | "127.0.0.1/32" 或 "127.0.0.1" |
+| server_port | 否 | 整数 | 过滤选项:如果 APISIX 服务器的端口 与 `server_port` 匹配,则转发到上游。 | 9090 |
+| sni | 否 | Host | 服务器名称。 | "test.com" |
+| protocol.name | 否 | 字符串 | xRPC 框架代理的协议的名称。 | "redis" |
+| protocol.conf | 否 | 配置 | 协议特定的配置。 | |
-[Back to TOC](#目录)
+你可以查看 [Stream Proxy](./stream-proxy.md#更多-route-匹配选项) 了解更多过滤器的信息。