【问题标题】:Is there a way to send metadata in krakend endpoint configuration?有没有办法在 krakend 端点配置中发送元数据?
【发布时间】:2022-01-04 07:09:25
【问题描述】:

我使用 Krakend 作为 API-Gateway,我的配置如下所示:

{
  "plugin": {
    "folder": "/etc/krakend/plugins/authenticator/",
    "pattern":".so"
  },
  "port": 8080,
  "extra_config": {
    "github_com/devopsfaith/krakend/transport/http/server/handler": {
      "name": "authenticator"
    }
  },

  "endpoints": [
    {
      "output_encoding": "no-op",
      "backend": [
        {
          "encoding": "no-op",
          "host": [
            "127.0.0.1:8080"
          ],
          "url_pattern": "/api/v1/address/{id}",
          "method": "GET"
        }
      ],
      "endpoint": "/api/v1/addresses/{id}",
      "method": "GET"
    }
  ],

  "name": "gateway",
  "timeout": "30s",
  "version": 2
}

我想为每个端点传递一些元数据并在我的预定义插件中访问它。 在这种情况下authenticator 插件。

【问题讨论】:

    标签: go api-gateway krakend


    【解决方案1】:

    您尝试实现的目标是完全可能的,并且是所有组件在 KrakenD 中的工作方式。您的插件可以使用您定义的命名空间访问 KrakenD 配置。例如,您可以像这样设置元数据(我假设您的 Go 代码中有 pluginName = "slifer2015-authenticator" ):

    {
        "endpoints": [
            {
                "output_encoding": "no-op",
                "backend": [
                    {
                        "encoding": "no-op",
                        "host": [
                            "127.0.0.1:8080"
                        ],
                        "url_pattern": "/api/v1/address/{id}"
                    }
                ],
                "endpoint": "/api/v1/addresses/{id}",
                "extra_config": {
                    "github_com/devopsfaith/krakend/transport/http/server/handler": {
                        "name": [
                            "slifer2015-authenticator",
                            "some-other-plugin-here"
                        ],
                        "slifer2015-authenticator": {
                            "Metadata1": "value1",
                            "Metadata2": {
                                "Some": 10,
                                "Thing": 100,
                                "Here": "60s"
                            }
                        }
                    }
                }
            }
        ]
    }
    

    然后,当注册器启动时,您的元数据在 extra 参数中可用,在您选择的键内。

    func (r registerer) registerHandlers(ctx context.Context, extra map[string]interface{}, h http.Handler) (http.Handler, error) {
    ``
    

    【讨论】:

    • 我试过这个,不幸的是它不起作用。它仅在我将extra_config 放在配置的根目录中而不是每个端点时才应用插件:(
    猜你喜欢
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多