es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Hay alguna forma de enviar metadatos en la configuración del endpoint de Krakend?

Estoy utilizando Krakend como API-Gateway y mi configuración se ve así:

{
  "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
}

Quiero pasar algunos metadatos por endpoint y acceder a ellos en mi plugin predefinido.
En este caso, el plugin authenticator.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para pasar metadatos por punto final en la configuración de Krakend dada, podemos agregar campos personalizados debajo de cada punto final. Aquí tienes un ejemplo de cómo agregar un campo metadata debajo del punto final existente:

    "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",
        "metadata": {
          "example": "valor de metadatos"
        }
      }
    ]
    

    En este ejemplo, hemos agregado un campo llamado metadata al punto final existente. Puedes agregar cualquier campo personalizado bajo metadata.

    Para acceder a estos metadatos en el complemento authenticator, necesitamos modificar el código en el complemento para leer este campo. Aquí tienes un ejemplo de cómo leer el campo metadata en el complemento authenticator:

    package main
    
    import (
      "fmt"
    
      "github.com/devopsfaith/krakend/config"
      "github.com/devopsfaith/krakend/plugin"
    )
    
    func init() {
      plugin.Register("authenticator", func() plugin.Plugin {
        return &Authenticator{}
      })
    }
    
    type Authenticator struct{}
    
    func (a *Authenticator) DecodeConfig(cfg *config.ExtraConfig) error {
      endpoints, ok := cfg.Endpoints.([]interface{})
      if !ok {
        return nil
      }
    
      for _, endpoint := range endpoints {
        endpointConfig, ok := endpoint.(map[string]interface{})
        if !ok {
          continue
        }
    
        metadata, ok := endpointConfig["metadata"].(map[string]interface{})
        if ok {
          fmt.Println("valor de metadatos:", metadata["example"])
        }
      }
    
      return nil
    }
    
    func (a *Authenticator) Handler() config.Handler {
      return nil
    }
    

    En este complemento Authenticator modificado, hemos agregado un método DecodeConfig que lee el campo metadata para cada punto final. En este ejemplo, simplemente estamos imprimiendo el valor de metadata en la consola. Puedes modificar este código para hacer lo que quieras con el valor de metadata.

Comments are closed.