分享后端响应以在lua脚本Krakend中使用

问题描述 投票:0回答:1

简介

我是 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

api-gateway krakend
1个回答
0
投票

是的,可以使用 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

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.