利用Kong(api网关)打造mock服务器和反向代理服务器于一体
Kong 是一个http api网关,基于openresty。
kong 官网地址: https://konghq.com/
首先我们先安装Kong,为了快速的开始,使用docker来进行安装。 (如果没有安装docker,请先搜索并安装docker 引擎)
1. 安装Kong
- 安装cassandra(kong 需要使用数据库), 所以我们先安装cassandra。
#先创建kong-net 网络
docker network create kong-net
docker run -d --name kong-database \
--network=kong-net \
-p 9042:9042 \
cassandra:3
- 初始化数据库数据并安装Kong
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=cassandra" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
kong:latest kong migrations up
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=cassandra" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=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" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest
- 访问kong的admin api 地址,确认安装kong 成功。
curl -i http://localhost:8001/
2. 设置利用plugin 设置 mock 返回内容
#首先添加一个service
curl -i -X POST http://localhost:8001/services/ --data "name=plugin-testing" --data "url=http://httpbin.org/headers"
#添加一个route, service.id 是上一个步骤添加的service 的service id。(id 是由系统默认生成并返回)
curl -i -X POST http://localhost:8001/routes/ --data "paths[]=/test" --data "hosts[]=mytest.com" --data "service.id=bdbac75d-7cb0-4e7e-a989-1efa617824fb"
# 编写returnmock.lua 文件
cat >> returnmock.lua << eof
return kong.response.exit(200\, "{'jksjdkfjsdf':'jskdjfkjf'}")
eof
#添加一个plugin(这里我们使用Serverless Functions的pre-function 插件), 设置让我们访问mytest.com/test 时, 返回mock的response数据。 (plugin-testing 是我们的service name,第一步创建service时设定的service name)
curl -i -X POST http://localhost:8001/services/plugin-testing/plugins -F "name=pre-function" -F "[email protected]"
关于serverless functions, 有2个plugins, 介绍如下。
Plugin Names
Serverless Functions come as two separate plugins. Each one runs with a different priority in the plugin chain.
pre-function
Runs before other plugins run during access phase.
post-function
Runs after other plugins in the access phase.
3. 这时候我们在本地,先添加 127.0.0.1 mytest.com 到hosts文件中 然后访问 http://mytest.com:51000/test , 然后返回了我们期望的mock内容。 通过接口,我们可以动态的修改mock返回内容,或者去掉返回内容。
curl http://mytest.com:51000/test
#返回数据
{'jksjdkfjsdf':'jskdjfkjf'}
这样我们就完成了一次mock数据返回设置
此篇文章已被阅读1386 次