Criando APIs em Go e utilizando KrakenD para unir informações
Tags: go, krakend, backend, api
Published: 2023-06-19 02:49:45

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:

```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))
}


```
product-api/main.go:

```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))
}


```

## 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:

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


```

## 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
```
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:

- http://localhost:8080/user: Retorna informações do usuário.
- http://localhost:8081/product: Retorna informações do produto.

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

- http://localhost:8082/user: Retorna informações do usuário através do KrakenD.
- http://localhost:8082/product: Retorna informações do produto 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!