DEV Community

Kaike Castro
Kaike Castro

Posted on

3 1 1 1 1

Criando APIs em Go e utilizando KrakenD para unir informações

Olá, pessoal! Hoje vou compartilhar com vocês como criar duas APIs em Go e utilizar o KrakenD para fazer o merge de informações. Vamos lá!

Configuração do ambiente

Certifique-se de ter o Go instalado em seu sistema. Você pode baixar a versão mais recente do site oficial. Além disso, vamos utilizar o KrakenD como nosso gateway API. Você pode encontrar o KrakenD em https://www.krakend.io/.

Criando as APIs

Vamos criar duas APIs simples em Go. Para fins de demonstração, uma API fornecerá informações de usuários e a outra fornecerá informações de produtos. Vamos chamá-las de "user-api" e "product-api", respectivamente.

Dentro do diretório do projeto, crie uma pasta chamada "user-api" e outra chamada "product-api". Em cada pasta, crie um arquivo "main.go" com o seguinte conteúdo:

user-api/main.go:

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)

type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}

func getUser(w http.ResponseWriter, r *http.Request) {
    user := User{
        ID:   1,
        Name: "John Doe",
    }

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(user)
}

func main() {
    http.HandleFunc("/user", getUser)
    log.Fatal(http.ListenAndServe(":8080", nil))
}


Enter fullscreen mode Exit fullscreen mode

product-api/main.go:

package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)

type Product struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}

func getProduct(w http.ResponseWriter, r *http.Request) {
    product := Product{
        ID:   1,
        Name: "Sample Product",
    }

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(product)
}

func main() {
    http.HandleFunc("/product", getProduct)
    log.Fatal(http.ListenAndServe(":8081", nil))
}


Enter fullscreen mode Exit fullscreen mode

Configurando o KrakenD

Agora, vamos configurar o KrakenD para fazer o merge das informações das duas APIs. Crie um arquivo chamado "krakend.json" na raiz do projeto com o seguinte conteúdo:

{
  "version": 2,
  "endpoints": [
    {
      "endpoint": "/user",
      "backend": [
        {
          "url_pattern": "/user",
          "host": ["http://localhost:8080"]
        }
      ]
    },
    {
      "endpoint": "/product",
      "backend": [
        {
          "url_pattern": "/product",
          "host": ["http://localhost:8081"]
        }
      ]
    }
  ]
}


Enter fullscreen mode Exit fullscreen mode

Executando o KrakenD

Agora, vamos executar o KrakenD para iniciar nosso gateway API. Abra o terminal e navegue até o diretório raiz do projeto. Em seguida, execute o seguinte comando:

krakend run -c krakend.json
Enter fullscreen mode Exit fullscreen mode

O KrakenD irá ler o arquivo de configuração e iniciar o servidor.

Testando a API

Agora, você pode testar a API acessando os seguintes endpoints:

Além disso, você pode acessar as seguintes URLs através do KrakenD:

O KrakenD irá fazer o merge das informações obtidas das APIs "user-api" e "product-api" e fornecer os dados combinados.

Conclusão

Espero que este tutorial tenha sido útil para você entender como criar APIs em Go e utilizar o KrakenD para unir informações de diferentes fontes. Divirta-se explorando as possibilidades que essa combinação oferece. Até a próxima!

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more