我是 krakend 的新手,我有两个连续访问的后端,第一个访问主机(假设是 a.com)从那里获取 id,然后第二个后端具有动态主机,取决于 a.com 响应中的 id(如果 id)是 1 则第二个后端的主机是 b 如果 id 是 2 则第二个后端的主机是 c
如何将 a.com 的响应传递给下一个后端请求
{
"$schema": "https://www.krakend.io/schema/krakend.json",
"version": 3,
"name": "Test Proxying & Microservices",
"timeout": "3000ms",
"cache_ttl": "300s",
"endpoints": [
{
"endpoint": "/protected/{path}",
"extra_config": {
"proxy": {
"sequential": true
}
},
"backend": [
{
"encoding": "no-op",
"@comment": "Authentication Service",
"url_pattern": "/api/v1/allocations",
"method": "GET",
"host": ["https://a.com"],
"disable_host_sanitize": false,
"extra_config": {
"modifier/lua-backend": {
"sources": ["authz.lua"],
"allow_open_libs": true,
"post": "print('Auth Response'); local r = response.load(); r:headers('Accept','*/*'); print(r);authz_proxy_decorator(r)"
}
}
},
{
"@comment": "Genesist Base",
"encoding": "no-op",
"url_pattern": "/{path}",
"host": ["https://{dynamic_host_from_resp0_next_host}.com"],
"extra_config": {
"modifier/lua-backend": {
"sources": ["authz.lua"],
"pre": "print('Backend response, pre-logic:'); local r = request.load(); print(r:headers('Accept')); get_previous_code(r);"
}
}
}
]
}
]
}
我预计如果 a.com 响应 {"host": c} 那么下一个后端将是 c.com
是的,可以使用 KrakenD 的动态路由功能来实现这一点,这是一项仅限企业使用的功能。通过动态路由,使用顺序代理时,后端的主机和 url_pattern 都可以根据来自参数、请求或先前响应的信息动态设置。
您可以在以下位置阅读有关 KrakenD Enterprise 动态路由功能的更多信息: https://www.krakend.io/docs/enterprise/endpoints/dynamic-routing/
此外,您可以在此存储库中找到一个示例,在本例中是关于如何动态设置 url_pattern 的: https://github.com/krakend/examples/tree/main/multiple_post/enterprise
希望这有帮助!