Go 使用 API 网关监视和度量 REST API详解

一旦我们开发了 API,我们就需要将它公开给外界。在这一过程中,我们部署了它们。但这是否足够?我们不需要跟踪我们的 API 吗?哪些客户端正在连接?请求的延迟是多少,等等?有许多其他的后 API 开发步骤,一个人应该遵循,使他们的 API 生产等级。它们是认证、日志记录、速率限制等等。添加这些特性的最佳方法是使用 API 网关。在本章中,我们将探索一个名为的开源 API 网关。开源软件比云提供商更可取,因为它可以降低供应商锁定的风险。所有 API 网关在实现上不同,但执行相同的任务。

在本章中,我们将介绍以下主题:

您可以在获取本章的代码示例 https://github.com/narenaryan/gorestful/tree/master/chapter11 。本章中文件的使用在相应章节中进行了说明。您还可以从存储库导入 Postman 客户端集合(JSON 文件)来测试 API,我们将在本章中介绍。

假设一家名为 XYZ 的公司为其内部目的开发了 API。它以两种方式公开 API 供外部使用:

  • 使用来自已知客户端的认证公开它
  • 将其作为 API 作为服务公开

在第一种情况下,该 API 由公司内部的其他服务使用。因为它们是内部的,所以我们不限制访问。但是在第二种情况下,由于 API 的详细信息是提供给外部世界的,因此我们需要一个中间人来检查和验证请求。此代理是 API 网关。API 网关是位于客户端和服务器之间的代理,在传递特定条件时将请求转发给服务器。

现在,XYZ 有一个用 Go 和 Java 编写的 API。适用于任何 API 的常见事项有:

  • 认证
  • 请求和响应的日志记录

如果没有 API 网关,我们需要编写另一个服务器来跟踪 API 的请求和认证等内容。当新的 API 不断添加到组织中时,实现和维护是非常繁忙的。为了解决这些基本问题,API 网关是一个很好的中间件。

基本上,API 逃逸可以实现以下功能:

  • 登录中
  • 安全
  • 交通管制
  • 转变

日志记录是跟踪请求和响应的方法。如果我们需要一个组织级日志记录,而不是 Go kit 中的应用程序级日志记录,那么我们应该启用 API 网关中的日志记录。安全性是认证的工作方式。它可以是基本认证、基于令牌的认证、OAuth2.0 等等。必须限制有效客户/客户端对 API 的访问。

当 API 是付费服务时,流量控制起作用。当一个组织将数据作为 API 出售时,它需要限制每个客户端的操作。例如,客户端每月可以发出 10000 个 API 请求。可以根据客户选择的计划设置费率。这是一个非常重要的特性。转换就像在请求到达应用服务器之前修改请求,或者在将响应发送回客户端之前修改响应。请看下图:

我们可以看到如何将前面的功能添加到 web 服务中。从图中,API 网关可以将请求重定向到任何给定的内部服务器。客户端看到所有 API 都在组织的单个实体下。

Kong 是一个开源 API 网关和微服务管理层,提供高性能和可靠性。它是两个值得一提的库的组合。一个是OpenResty,另一个是Nginx。孔是这两个主要组成部分的包装。OpenResty 是一个成熟的 web 平台,它集成了 Nginx 和 Lua。Lua 是另一种类似于 Go 的编程语言。孔是用卢阿语写的。我们使用 Kong 作为部署 Go-REST 服务的工具。我们讨论的主要主题是:

  • 安装 Kong 和 Kong 数据库
  • 将我们的 API 添加到香港
  • 使用插件
  • 登陆香港
  • 香港的利率限制

Kong 需要一个数据库来运行。它可以是 Cassandra 或 PostgreSQL。因为我们已经熟悉 PostgreSQL,所以我们选择了它。在哪里安装?举例来说,我们可以在本地机器上安装它们,但有一个缺点;它会把我们的机器弄坏。为了测试设置,我们将使用 Docker。Docker 可以创建容器化应用程序,并在可预测的隔离环境中运行它们。

使用 Kong,我们可以将 API 隐藏在网关下。我们可以为我们的 API 创建消费者(客户端)。Kong 通过 RESTAPI 完成所有工作。香港有两种空气污染指数:

  • 应用程序 API(在端口8000上运行)
  • 管理 API(在端口8001上运行)

使用应用程序 API,我们可以访问我们的 web 服务。管理员 API 允许我们在网关下添加/删除 API。我们将在接下来的章节中更详细地了解这些内容。有关香港的更多详情,请访问https://getkong.org/

Docker 是一个虚拟化工具,它可以创建微型容器形式的操作系统。它就像一台主机上的多个操作系统。开发人员在面临部署问题时通常会抱怨说在我的盒子中工作。Docker 通过以映像的形式定义操作系统环境来消除这些情况。Docker 映像在给定时间具有关于给定操作系统的所有信息。它允许我们复制该环境任意次数。

它最初适用于 Linux,但现在适用于 macOS X 和 Windows。下载和安装 Docker,请访问https://docs.docker.com/engine/installation/ 。对于 Windows 和 Mac,Docker 网站上提供了二进制文件,可以轻松安装。安装后,使用以下命令验证 Docker 安装:

docker -v
Docker version 17.09.0-ce, build afdb6d4

它将给出版本号;始终选择最新的 Docker。现在 Docker 已经准备好了,让我们运行几个命令来安装 Kong。接下来的部分需要一些 Docker 的知识。如果没有足够的信心,请浏览网上精彩的文章,解释 Docker 的基本原理。

我们的最终目标是创建三个容器:

  • 香港资料库
  • 集装箱
  • 香港申请

当这三个容器运行时,它为在 API 网关后面设置 web 服务奠定了基础。

首先,安装 PostgreSQL 数据库。一个条件是我们需要暴露5432端口。用户名和数据库名应为kong,并应作为环境变量传递给容器:

docker run -d --name kong-database \
 -p 5432:5432 \
 -e "POSTGRES_USER=kong" \
 -e "POSTGRES_DB=kong" \
 postgres:9.4

此命令的工作方式如下:

  1. 从 Docker 存储库中获取名为postgres:9.4的图像。
  2. 为名为kong-database的图像命名。
  3. 在名为POSTGRES_USERPOSTGRES_DB的容器中设置环境变量。

这将通过拉取一个 PostgreSQL 映像来创建一个 Docker 容器,该映像托管在DockerHub上)https://hub.docker.com/ 存储库。现在,通过运行另一个 Docker 命令来应用 Kong 所需的迁移:

docker run --rm \
 --link kong-database:kong-database \
 -e "KONG_DATABASE=postgres" \
 -e "KONG_PG_HOST=kong-database" \
 kong:latest kong migrations up

它在先前创建的 PostgreSQL DB 容器上应用迁移。该命令有一个名为--rm的选项,该选项表示,在迁移完成后删除此容器。在安装香港货柜之前,让我们先准备好 Go 服务。这将是一个带有健康检查GETAPI 的简单项目。

现在,转到主机上的任何目录,创建一个名为kongExample的项目:

mkdir kongExample

在该目录中创建一个名为main.go的程序,用于获取GET请求的健康检查(日期和时间):

package main
import (
    "fmt"
    "github.com/gorilla/mux"
    "log"
    "net/http"
    "time"
)
func HealthcheckHandler(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusOK)
    fmt.Fprintf(w, time.Now().String())
}
func main() {
    // Create a new router
    r := mux.NewRouter()
    // Attach an elegant path with handler
    r.HandleFunc("/healthcheck", HealthcheckHandler)
    srv := &http.Server{
        Handler: r,
        Addr: "0.0.0.0:3000",
        // Good practice: enforce timeouts for servers you create!
        WriteTimeout: 15 * time.Second,
        ReadTimeout: 15 * time.Second,
    }
    log.Fatal(srv.ListenAndServe())
}

此程序在请求时返回日期和时间。现在,我们需要对这个应用程序进行 Dockerize。停靠意味着创建一个运行的容器。将 Dockerfile 添加到当前目录(同级kongExample

FROM golang
ADD kongExample /go/src/github.com/narenaryan/kongExample
RUN go get github.com/gorilla/mux
RUN go install github.com/narenaryan/kongExample
ENTRYPOINT /go/bin/kongExample

我们在这个 Dockerfile 的帮助下构建了一个容器。它说从 DockerHub 中拉出golang容器(安装 Go 编译器并设置GOPATH会自动处理),然后将这个kongExample项目复制到容器中。为项目安装必要的软件包(在本例中是 Gorilla Mux),然后编译二进制文件并启动服务器。运行以下命令以创建容器:

docker build . -t gobuild

注意docker build命令后面的.-t选项是用名称标记图像。它告诉 Docker 查看当前目录中的 Docker 文件,并按照给定的说明创建 Docker 映像。我们需要实际运行此映像来创建容器:

docker run  -p 3000:3000 --name go-server -dit gobuild

它创建一个名为go-server的容器,并在端口3000上启动 Go web 服务器。现在安装 Kong container,如下图:

**```go docker run -d --name kong \ --link kong-database:kong-database \ --link go-server:go-server \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-database" \ -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \ -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \ -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \ -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \ -p 8000:8000 \ -p 8443:8443 \ -p 8001:8001 \ -p 8444:8444 \ kong:latest


该命令与第一个命令类似,只是我们将公开许多其他港口供香港使用。我们也正在从 DockerHub 中提取`kong:latest`图像。其他是香港要求的环境变量。我们正在将`kong-database`链接到一个名为`kong-database`的主机名,并将`go-server`链接到`go-server`。在 Docker 环境中,主机名是一个有用的实体,可以从一个容器识别和访问另一个容器。Docker 维护一个内部**域名空间**(**DNS**),用于跟踪 Docker 容器到链接名称的 IP 地址。这将启动 Kong 容器并使用名为`kong.conf.default`的默认文件启动 Kong 服务。

现在,如果我们查看正在运行的容器,它将列出三个容器 ID:

```go
docker ps -q
b6cd3ad39f75
53d800fe3b15
bbc9d2ba5679

Docker 容器只是用于运行应用程序的隔离环境。最好在不同的容器中运行微服务,因为它们是松散耦合的,并且一个环境不会干扰另一个环境。

这意味着我们成功地为香港 API 网关建立了基础设施。让我们看看如何在香港添加来自go-server的 API。要查看 Kong 的状态,只需向此 URL 发出GET请求:

curl -X GET http://localhost:8001/status

它返回数据库的状态以及香港的统计数据:

{
  "database": {
    "reachable": true
  },
  "server": {
    "connections_writing": 1,
    "total_requests": 13,
    "connections_handled": 14,
    "connections_accepted": 14,
    "connections_reading": 0,
    "connections_active": 2,
    "connections_waiting": 1
  }
}

Kong 提供了一个直观的 REST API,用于向网关添加自定义 API。为了添加上述 healthcheck API,我们需要向在端口8001上运行的 Kong admin API 发出POST请求。从现在起,我们使用 Postman REST 客户端来显示所有 API 请求。这些 API 请求还可以作为本章存储库中的 JSON 文件集合提供,供读者下载并分别导入其 Postman 客户端。有关导出和导入邮递员收藏的更多信息,请访问https://www.getpostman.com/docs/postman/collections/data_formats

通过 JSON 正文中的以下字段向香港管理员 URLhttp://localhost:8001/apis发出POST请求:

{
    "name": "myapi",
    "hosts": "server1",
    "upstream_url": "http://go-server:3000",
    "uris":["/api/v1"],
    "strip_uri": true,
    "preserve_host": false
}

它将我们的健康检查 API 添加到香港。邮递员屏幕看起来像下面的屏幕截图,包含所有更改。Postman 是一个很棒的工具,它允许 Windows、macOS X 和 Linux 用户发出/测试 HTTP API 请求。您可以在这里下载https://www.getpostman.com/

一旦我们这样做了,我们就会得到带有 API 细节的 JSON 响应。这个新的myapi将被赋予一个 ID:

{
  "created_at": 1509195475000,
  "strip_uri": true,
  "id": "795409ae-89ae-4810-8520-15418b96161f",
  "hosts": [
    "server1"
  ],
  "name": "myapi",
  "http_if_terminated": false,
  "preserve_host": false,
  "upstream_url": "http://go-server:3000",
  "uris": [
    "/api/v1"
  ],
  "upstream_connect_timeout": 60000,
  "upstream_send_timeout": 60000,
  "upstream_read_timeout": 60000,
  "retries": 5,
  "https_only": false
}

对该 URL 的GET请求http://localhost:8001/apis/myapi返回新添加的myapi元数据。

对于我们发布到POSTAPI 的字段,name是 API 的唯一名称。我们需要使用它来识别网关上的 API。hosts是网关可以接受和转发请求的主机列表。上游 URL 是 Kong 将请求转发到的实际地址。由于我们链接了go-server集装箱,一开始我们可以直接从香港参考http://go-server:3000uris字段用于指定相对于上游代理(Go 服务器)获取资源的路径。

例如,如果 URI 为/api/v1,Go 服务器的 API 为/healthcheck,则生成的网关 API 为:

http://localhost:8000/api/v1/healthcheck

preserve_host是说明 Kong 是否应将请求的主机字段更改为上游服务器的主机名的属性。更多信息,请参见https://getkong.org/docs/0.10.x/proxy/#the-保留 _host-property。其他设置如upstream_connect_timeout很简单。

我们将 API 添加到香港。让我们验证它是否正在将我们的健康检查请求转发到 Go 服务器。不要忘记为所有 API 请求添加一个名为Host的头,其值为server1。这是非常重要的。API 调用如以下屏幕截图所示:

我们成功地收到了回复。这是我们main.go程序中HealthcheckHandler返回的响应。

如果收到 404 错误,请从头开始尝试该过程。问题可能是容器未运行或上游 URL 无法从容器访问。另一个严重错误可能是未在请求头中添加主机。这是添加 API 时给定的主机。

此运行状况检查 API 实际上是作为 Go 服务运行的。我们请求 API 网关,它正在将该请求转发给 Go。这证明我们成功地将 API 与 API 网关链接。

这是 API 的补充,是冰山一角。其他的呢?我们将研究 API 网关的每一个特性,并尝试为我们的 API 实现它们。

在香港,除了这个基本的路由之外,还可以使用诸如日志记录和速率限制之类的附加功能。我们需要使用插件使他们能够访问我们的 API。Kong 插件是一个内置组件,允许我们轻松插入任何功能。有许多类型的插件可用。其中,我们将在下一节讨论几个有趣的问题。让我们从日志插件开始。

香港有很多插件可以记录多个目标的请求。目标是收集日志并将其保存到某个位置的系统。以下是可用于日志记录的重要插件:

  • 文件日志
  • 系统日志
  • HTTP 日志

第一个是文件日志记录。如果我们需要 Kong 服务器以 JSON 的形式将请求和响应日志存储到文件中,请使用此插件。我们应该调用 Kong 的 admin REST API(http://localhost:8001/apis/myapi/plugins来实现这一点:

点击发送按钮,网关返回响应,如下所示:

{
  "created_at": 1509202704000,
  "config": {
    "path": "/tmp/file.log",
    "reopen": false
  },
  "id": "57954bdd-ee11-4f00-a7aa-1a48f672d36d",
  "name": "file-log",
  "api_id": "795409ae-89ae-4810-8520-15418b96161f",
  "enabled": true
}

它基本上告诉 Kong,对于名为myapi的给定 API,将每个请求记录到名为/tmp/file.log的文件中。现在,再向 API 网关发出一个健康检查请求(http://localhost:8000/api/v1/healthcheck。此请求的日志将保存在给定的文件路径中。

我们怎么看这些日志?这些日志将保存在容器的/tmp文件夹中。打开码头的新选项卡,并使用以下命令输入集装箱:

docker exec -i -t kong /bin/bash

这将带您进入容器的 bash shell。现在,检查日志文件:

cat /tmp/file.log

您将看到写入文件的冗长 JSON:

{"api":{"created_at":1509195475000,"strip_uri":true,"id":"795409ae-89ae-4810-8520-15418b96161f","hosts":["server1"],"name":"myapi","headers":{"host":["server1"]},"http_if_terminated":false,"https_only":false,"retries":5,"uris":["\/api\/v1"],"preserve_host":false,"upstream_connect_timeout":60000,"upstream_read_timeout":60000,"upstream_send_timeout":60000,"upstream_url":"http:\/\/go-server:3000"},"request":{"querystring":{},"size":"423","uri":"\/api\/v1\/healthcheck","request_uri":"http:\/\/server1:8000\/api\/v1\/healthcheck","method":"GET","headers":{"cache-control":"no-cache","cookie":"session.id=MTUwODY2NTE3MnxOd3dBTkZaUVNqVTBURmRTUlRSRVRsUlpRMHhGU2xkQlZVNDFVMFJNVmxjMlRFNDJUVXhDTWpaWE1rOUNORXBFVkRJMlExSXlSMEU9fNFxTxKgoEsN2IWvrF-sJgH4tSLxTw8o52lfgj2DwnHI","postman-token":"b70b1881-d7bd-4d8e-b893-494952e44033","user-agent":"PostmanRuntime\/3.0.11-hotfix.2","accept":"*\/*","connection":"keep-alive","accept-encoding":"gzip, deflate","host":"server1"}},"client_ip":"172.17.0.1","latencies":{"request":33,"kong":33,"proxy":0},"response":{"headers":{"content-type":"text\/plain; charset=utf-8","date":"Sat, 28 Oct 2017 15:02:05 GMT","via":"kong\/0.11.0","connection":"close","x-kong-proxy-latency":"33","x-kong-upstream-latency":"0","content-length":"58"},"status":200,"size":"271"},"tries":[{"balancer_latency":0,"port":3000,"ip":"172.17.0.3"}],"started_at":1509202924971}

此处记录的 IP 地址是 Docker 分配给容器的内部 IP。此日志还包含有关 Kong 代理、Go 服务器等延迟信息的详细信息。您可以在了解更多关于记录字段格式的信息 https://getkong.org/plugins/file-log/ 。启用其他日志类型的管理 API 类似于file-log

我们从 Postman 向 admin API 发出的POST请求的标题为Content-Type: "application/json"

正如我们提到的,API 网关应该负责对网关后面运行的多个 API 进行认证。香港有很多插件可以提供即时认证。在下一章中,我们将详细了解认证概念。现在,使用这些插件,我们可以通过调用 Kong admin API 为给定 API 添加认证。

如今,基于 API 密钥的认证越来越出名。Kong 提供以下认证模式:

  • 基于 API 密钥的认证
  • OAuth2 认证
  • JWT 认证

为了简单起见,让我们实现基于 API 密钥的认证。简单地说,基于密钥的认证允许外部客户端使用具有唯一令牌的 RESTAPI。在香港,首先启用密钥验证插件。要启用插件,请在 JSON 正文中使用两个内容向http://localhost:8001/apis/myapi/pluginsURL 发出POST请求:

  1. namekey-auth
  2. config.hide_credentialstrue

第二个选项是剥离/隐藏凭证以传递到 Go API 服务器。请看以下屏幕截图:

它返回 JSON 响应,其中包含创建的api_id

    {
      "created_at": 1509212748000,
      "config": {
        "key_in_body": false,
        "anonymous": "",
        "key_names": [
          "apikey"
        ],
        "hide_credentials": true
      },
      "id": "5c7d23dd-6dda-4802-ba9c-7aed712c2101",
      "enabled": true,
      "api_id": "795409ae-89ae-4810-8520-15418b96161f",
      "name": "key-auth"
    }

现在,如果我们尝试发出健康检查 API 请求,我们将收到一个 401 未经授权的错误:

{
  "message": "No API key found in request"
}

那么我们如何使用 API 呢?我们需要创建一个使用者,并授予他访问 API 的权限。该权限是一个 API 密钥。让我们看看如何做到这一点。

为了创建使用者,我们需要创建一个代表使用 API 的用户的使用者。为消费者对 Kong admin API 进行 API 调用。URL 端点将为http://localhost:8001/consumers。请参阅以下屏幕截图:

POST主体应具有username字段。响应将是 JSON,其中包含已创建的使用者:

{
  "created_at": 1509213840000,
  "username": "johnd",
  "id": "df024acb-5cbd-4e4d-b3ed-751287eafd36"
}

现在,如果我们需要向johnd授予 API 权限,请向http://localhost:8001/consumers/johnd/key-auth adminURL 发出POST请求:

这将返回 API 密钥:

{
  "id": "664435b8-0f16-40c7-bc7f-32c69eb6c39c",
  "created_at": 1509214422000,
  "key": "89MH58EXzc4xHBO8WZB9axZ4uhZ1vW9d",
  "consumer_id": "df024acb-5cbd-4e4d-b3ed-751287eafd36"
}

我们可以使用在后续 API 调用中生成的 API 密钥。现在,使用头中的apikey重新进行健康检查,其值是前面响应中的键,并且它成功地返回带有200 OK的日期和时间。请参阅以下屏幕截图:

我们可以限制给定消费者的 API 速率。例如,GitHub 限制客户端每小时发出 5000 个请求。之后,它抛出一个 API 速率限制超出错误。我们可以使用 Kong 的rate-limiting插件为我们的 API 添加类似的速率限制。

我们可以使用以下 API 启用它:http://localhost:8001/apis/myapi/pluginsPOST``nameconfig.hourconsumer_id作为主体参数:

此 API 调用正在创建速率限制规则。consumer_id是用户名johnd的 id。此 JSON 响应有一个ID

{
  "created_at": 1509216578000,
  "config": {
    "hour": 5000,
    "redis_database": 0,
    "policy": "cluster",
    "hide_client_headers": false,
    "redis_timeout": 2000,
    "redis_port": 6379,
    "limit_by": "consumer",
    "fault_tolerant": true
  },
  "id": "b087a740-62a2-467a-96b5-9cee1871a368",
  "enabled": true,
  "name": "rate-limiting",
  "api_id": "795409ae-89ae-4810-8520-15418b96161f",
  "consumer_id": "df024acb-5cbd-4e4d-b3ed-751287eafd36"
}

现在,消费者(johnd对 API 有费率限制。他每小时只能向我们的健康检查 API 提出 5000 个请求。如果超过该值,他将收到以下错误:

{"message":"API rate limit exceeded"}

作为速率控制的一部分,客户端应该如何知道还有多少请求?当客户端向 API 发出请求时,Kong 会在响应上设置几个标题。尝试提出 10 个健康检查请求并检查响应头;您将在响应标题中找到以下内容,这证明了速率限制正在发挥作用:

X-RateLimit-Limit-hour →5000
X-RateLimit-Remaining-hour →4990

通过这种方式,Kong 提供了许多很好的特性,将我们的 API 提升到了一个新的水平。这并不意味着 API 网关是绝对必要的,但它可以让您在不编写一行代码的情况下享受拥有许多酷特性的乐趣。它是一个开源软件,旨在避免重写 web 服务业务逻辑中普遍定义的 API 网关功能。有关负载平衡和请求转换等更多功能,请参阅 Kong 的文档https://konghq.com/plugins/

Kong 附带了一个命令行工具,用于更改 Kong 的行为。它有一组用于启动、停止和修改的命令。默认情况下,Kong 使用配置文件。如果我们需要修改它,我们需要重新启动 Kong 以应用这些更改。因此,所有这些内务处理作业都已连接到 Kong CLI 工具中。基本功能是:

  • kong start:用于启动 Kong 服务器
  • kong reload:用于重新加载 Kong 服务器
  • kong stop:用于停止 Kong 服务器
  • kong check:用于验证给定的配置文件
  • kong health:用于检查数据库等必要服务是否正在运行

有关更多命令,请参阅 Kong CLI 的文档,网址为https://getkong.org/docs/0.9.x/cli/

市场上还有许多其他 API 网关提供商。正如我们前面提到的,所有网关都执行相同类型的功能。企业网关服务提供商(如 AmazonAPI 网关)与 EC2 和 Lambdas 配合得很好。Apigee 是另一种著名的 API 网关技术,是 Google 云的一部分。云提供商的问题是,它们可能导致供应商锁定(无法轻松迁移到其他平台)。由于这个原因,开源替代方案对初创公司总是有好处的。

在本章中,我们从 API 网关的基础知识开始。API 网关尝试做一些事情;它充当 API 的代理。作为代理,它将请求转发到来自不同域的多个 API。在转发过程中,网关可以阻止请求、限制请求速率,还可以转换请求/响应。

Kong 是一个很好的开源 API 网关,可用于 Linux 平台。它有许多特性,如认证、日志记录和速率限制。我们看到了如何在 Docker 容器中安装 Kong、Kong 数据库和 REST 服务。我们使用 Docker 而不是主机,因为容器可以随意销毁和创建。这样就不会有机会搞砸我们的主机系统。在了解了安装之后,我们了解到 Kong 有两种类型的 RESTAPI。一个是管理 API,另一个是应用 API。AdminAPI 是我们用来将 API 添加到网关的 API。应用程序 API 是我们应用程序的 API。我们看到了如何在香港添加 API。然后,我们开始了解 Kong 插件。Kong 插件是可以插入 Kong 的功能部件。日志插件是可用的。认证插件和速率限制插件也在香港提供。

我们向 Postman 客户端发出请求,并看到返回的示例 JSON。对于认证,我们使用基于apikey的消费者。然后我们用一个 Kong 的key-auth插件模拟 GitHub 每小时 5000 个请求。

最后,我们介绍了 Kong CLI,并检查了其他企业 API 网关,如 Apigee 和 Amazon API 网关。在下一章中,我们将更详细地了解认证的工作原理,并尝试在没有 API 网关的情况下保护我们的 API。**

教程来源于Github,感谢apachecn大佬的无私奉献,致敬!

技术教程推荐

重学前端 -〔程劭非(winter)〕

Swift核心技术与实战 -〔张杰〕

Kafka核心源码解读 -〔胡夕〕

Spring Cloud 微服务项目实战 -〔姚秋辰(姚半仙)〕

React Native 新架构实战课 -〔蒋宏伟〕

中间件核心技术与实战 -〔丁威〕

大厂设计进阶实战课 -〔小乔〕

超级访谈:对话毕玄 -〔毕玄〕

结构写作力 -〔李忠秋〕