Estratégias para gerenciar múltiplas versões de APIs

No universo do desenvolvimento de software, as APIs (Application Programming Interfaces) desempenham um papel fundamental na comunicação entre diferentes sistemas. No entanto, à medida que uma API evolui, surge um desafio inevitável: como gerenciar múltiplas versões sem comprometer a experiência dos usuários e sem introduzir instabilidade no sistema?

Neste post, exploraremos as principais estratégias para gerir e versionar APIs de forma eficaz. Vamos discutir diferentes abordagens, suas vantagens e desvantagens, além de apresentar ferramentas que podem facilitar o processo.

Versionamento por URL

O versionamento por URL é uma das abordagens mais comuns e simples. Nesta estratégia, a versão da API é incluída diretamente na URL, como por exemplo:

<https://api.exemplo.com/v1/recursos>
<https://api.exemplo.com/v2/recursos>
Leia mais »

O que é API Gateway

No cenário atual de desenvolvimento de software, onde a arquitetura de microsserviços é amplamente adotada, a gestão e a comunicação entre serviços se tornaram cada vez mais complexas.

Para lidar com esses desafios, surge o conceito de API Gateway. Este componente crucial atua como um ponto central de entrada para todas as requisições que chegam ao seu sistema, oferecendo diversas funcionalidades que simplificam e otimizam a comunicação entre os serviços.

O que é um API Gateway?

Um API Gateway é um servidor que atua como intermediário entre os clientes e os serviços internos de uma aplicação. Ele recebe todas as requisições dos clientes e as roteia para os serviços apropriados, possivelmente após aplicar diversas políticas de segurança, autenticação, autorização, rate limiting, caching, entre outras.

Leia mais »

Integrando aplicações Go com ChatGPT

Com o avanço das tecnologias de inteligência artificial, cada vez mais desenvolvedores buscam integrar suas aplicações com APIs de IA para oferecer funcionalidades avançadas e personalizadas.

Uma dessas APIs é a do ChatGPT, desenvolvida pela OpenAI, que permite gerar texto de forma natural e coerente. Neste post, vou mostrar como você pode integrar uma aplicação Go com a API do ChatGPT para criar uma funcionalidade onde o usuário insere um valor monetário e a aplicação retorna esse valor por extenso.

Pré-requisitos para a Integração

Antes de iniciar a integração, é necessário cumprir alguns pré-requisitos:

  1. Conta na OpenAI: Você precisará de uma conta na OpenAI para acessar a API do ChatGPT.
  2. API Key: Após criar sua conta, você deve gerar uma chave de API (API Key) no painel de controle da OpenAI.
Leia mais »

O que é e como utilizar o package context

No desenvolvimento de aplicações em Go, é comum enfrentar situações em que precisamos gerenciar o tempo de vida de processos, propagar cancelamentos de tarefas ou passar dados entre goroutines.

Para resolver esses problemas, a própria linguagem fornece um package chamado context.

Nesse post, vamos explorar juntos o que é o package context, para que ele serve, onde normalmente é utilizado e como implementá-lo em suas aplicações Go.

Hello Context

O package context foi introduzido na versão 1.7 do Go e é utilizado para gerenciar deadlines, cancelamentos e outros valores através de limites de API e entre goroutines. Sua principal função é gerenciar o tempo de vida de uma operação, especialmente em servidores e aplicativos web, onde operações longas podem ser canceladas se excederem um determinado tempo ou se a solicitação do cliente for cancelada.

Leia mais »

Como criar rotas no Go 1.22+

O package net/http é uma ferramenta essencial para o desenvolvimento de aplicações web. Originalmente, o roteamento no net/http era bastante básico, exigindo que os desenvolvedores criassem suas próprias soluções para mapear URLs a handlers específicos. Isso frequentemente resultava em código adicional para lidar com casos comuns, como métodos HTTP diferentes (GET, POST, DELETE) e a organização de rotas mais complexas.

Melhorias no Roteamento

Recentemente, na versão 1.22 da linguagem, o time de desenvolvimento do Go introduziu melhorias significativas no roteamento do net/http. Estas mudanças têm como objetivo simplificar o desenvolvimento de aplicações web, oferecendo uma API mais poderosa e flexível para definir e gerenciar rotas.

Leia mais »

Arquitetura hexagonal: Como implementar ports

Dando continuidade à série de posts sobre arquitetura hexagonal, nesse post implementaremos os ports do package category.

Se você está chegando agora ou se gostaria de relembrar, até o momento nós já:

Ports para atores Driven

Como é através de ports que o core da aplicação se comunicará com o mundo externo e, os atores do tipo driven são chamados a partir do core, a primeira coisa que vamos fazer é definir uma interface para esse tipo de ator.

type Repository interface {
	FindAll() ([]*Category, error)
	FindById(id string) (*Category, error)
	Save(category *Category) error
	Delete(id string) error
}
Leia mais »

Arquitetura hexagonal: Como implementar uma entity

Dando continuidade à nossa série de posts sobre arquitetura hexagonal, nesse post implementaremos a entity do package category, que faz parte do core da aplicação.

Se você ainda não leu, convido a ler o post onde definimos a organização das pastas e arquivos desse projeto utilizando arquitetura hexagonal.

Definindo Category

Sem mais delongas, a primeira coisa que vou fazer no arquivo entity.go, é definir a struct Category.

type Category struct {
	ID          primitive.ObjectID `bson:"_id" json:"id"`
	Name        string             `bson:"name" json:"name"`
	Description string             `bson:"description" json:"description"`
	CreatedAt   time.Time          `bson:"created_at" json:"created_at"`
	ModifiedAt  time.Time          `bson:"modified_at" json:"modified_at"`
	Active      bool               `bson:"active" json:"active"`
}
Leia mais »

Como implementar uma API com arquitetura hexagonal

Hoje iniciamos mais uma pequena série aqui no blog, onde vamos implementar uma pequena API utilizando arquitetura hexagonal. Essa série será dividida em pelo menos quatro posts, sendo esse primeiro a definição da estrutura de pastas.

Se você ainda não conhece muito bem essa arquitetura, convido você a ler o post onde explico a parte teórica da arquitetura hexagonal.

Agora que estamos todos no mesmo ponto, vamos começar a definir a estrutura de pastas desse pequeno projeto.

pkg

No root do projeto, como já é de costume, precisamos de uma pasta onde ficarão as implementações que podem ser compartilhadas com outros projetos, ou seja, implementações de packages que não tem nenhuma regra de negócio.

Leia mais »

Implementando comunicação com API gRPC

Dando continuidade na implementação de serviços utilizando gRPC, nesse post vamos implementar o lado cliente da comunicação.

Se você ainda não leu o post anterior, onde implementamos a API em gRPC, peço que leia, pois os passos para definição do arquivo proto e geração do código utilizando protoc, foram feitos lá e não precisam ser repetidos.

Conexão com API

Vamos iniciar a implementação do client.go definindo as credenciais de conexão.

creds := grpc.WithTransportCredentials(insecure.NewCredentials())
Leia mais »

Implementando uma API com protobuf e gRPC

Dando continuidade ao post o que é e como utilizar protobufs, nesse post, vamos colocar o conhecimento teórico em prática e fazer uma API utilizando protobuf e gRPC. Embora seja uma API simples, ela te dará uma ótima base para construir aplicações mais complexas.

Dependências

Mas antes de meter a mão na massa, precisamos instalar o protoc e os pluginsprotoc-gen-go e protoc-gen-go-grpc. Para instalar o protoc, independente do OS que você esteja utilizando, recomendo fazer download do binário direto da página de releases do projeto. Após o download, descompacte e mova o programa protoc, que está dentro da pasta bin, em alguma pasta que esteja referenciada ao seu $PATH, por exemplo, a pasta go/bin ou ~/.local/bin. Com o protoc instalado, agora precisamos instalar os dois plugins para gerar código Go. Partindo do princípio que você tem o Go instalado na sua máquina, execute os dois comandos abaixo para instalar os plugins.

$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
Leia mais »