Go语言 有办法在krakend端点配置中发送元数据吗?

kmbjn2e3  于 10个月前  发布在  Go
关注(0)|答案(2)|浏览(76)

我使用Krakend作为API网关,我的配置看起来像这样:

{
  "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插件。

4nkexdtk

4nkexdtk1#

你正在尝试使用一个http服务器插件,它应该在路由器层,又名之前,它击中krakend enpoints。这是全球性的定义。
由于您试图为每个端点提供不同的配置,因此可以考虑使用http-client plugins
通过这种方式,您可以从每个端点的extra_config获取元数据。

endpoints: [
{
  "output_encoding": "no-op",
  "backend": [
    {
      "encoding": "no-op",
      "host": [
        "127.0.0.1:8080"
      ],
      "url_pattern": "/api/v1/address/{id}",
      "method": "GET",
      "extra_config": {
        "plugin/http-client": {
          "name": "krakend-client-example",
          "krakend-client-example": {
            "metadata_example_1": "example"
          }
        }
      }
    }
  ],
  "endpoint": "/api/v1/addresses/{id}",
  "method": "GET"
},
]
ercv8c1e

ercv8c1e2#

你想要实现的是完全可能的,并且是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) {
``

相关问题