Entenda o básico de API
Tags: api, beginners, programming, learning
Published: 2024-04-03 23:45:38

Se você ouve bastante sobre programadores falando sobre API's e fica perdido no assunto, este post é para você.

## O que significa API?

Uma API é usada para definir um conjunto de regras, protocolos que devem ser seguidos, estabelecidos por um software para que usem suas funcionalidades, sem que haja a necessidade de saber como o software foi implementado, criando um meio de comunicação entre dois softwares para conectar soluções e serviços sem que você precise reinventar a roda.

Existem vários tipos de API, como SOAP, REST, RPC, WebSocket, GraphQL, porém, o foco deste post será na mais comumente usada, a API REST.

## Tipos de API

### API pública

Como o nome diz, qualquer pessoa pode usar, está aberta ao público, podendo conter algum tipo de custo envolvido com limites definidos ou não, alguma autorização.

### API privada

São API's internas, usadas somente dentro de uma determinada empresa, conectando seus sistemas, dados, etc.

### API de parceiros

Este tipo de API compartilha acesso para desenvolvedores externos autorizados, colaborando com as parcerias de negócios entre empresas e tendo mais controle sobre quem utiliza.

### Segurança

Entendemos que as API's trocam informações, dados através de requisições e isso pode ser perigoso se não controlado, limitado, afinal, existem dados que somente pessoas autorizadas podem ter acesso, porém como isso é feito?

**Token**

Usado para autorização e fazer a identificação do usuário, verificação de direito de acesso ao realizar uma chamada a API.

**Chave**

Apesar de não ser tão segura quanto o token, a chave é usada para verificar e identificar qual aplicação esta realizando a chamada da API, garantindo que ela tenha os direitos de acesso necessário, monitorando o seu uso.

## API REST

API REST, também conhecida como RESTful, é uma API que segue os princípios de design REST, uma sigla para Representational State Transfer, ou em português, Transferência de Estado Representacional, abaixo vemos seus 6 princípios de design:

1. **Interface uniforme:** As informações passadas da API para a origem da solicitação devem ser sempre iguais, padronizadas, não importando quem a chame, contendo todas as informações necessárias, além de hipertexto e hipermídia disponíveis caso necessário.

2. **Desacoplamento cliente-servidor:** O cliente e o servidor devem ser independentes um do outro, ou seja, nenhum dos dois interagem entre si, apenas utilizando métodos HTTP (Hypertext Transfer Protocol) para troca de dados solicitados.

3. **Sem estado definido:** O servidor não tem permissão para armazenar nenhum dado referente a chamada do cliente, tendo as solicitações separadas e desconectadas. 

4. **Armazenamento em cache:** Realizar armazenamento de recursos, dados, em cache, otimizando o desempenho das chamadas entre cliente e servidor. É importante que os servidores contenham informações sobre as permissões de cache.

5. **Arquitetura de sistemas em camadas:** É uma arquitetura que faz com que o cliente nem o servidor saibam se estão se comunicando com a aplicação final ou intermediária, pois em uma chamada pode existir diversos intermediários para que a solicitação chegue ao servidor final e no cliente que realizou a chamada, como balanceamento de carga, segurança, etc.

6. **Código sob demanda (opcional):** Possibilita o envio de código executável, ou recurso estático do servidor para cliente, sendo assim, o código só é executado sob demanda do cliente.

Vamos ao que interessa, afinal, como funciona uma API REST? Bom, a resposta para essa pergunta é até que simples, veja a imagem abaixo:


![Figura 1: Imagem que descreve o funcionamento de uma API REST](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/87cwhg1te84ypa53knos.png)

Neste tipo de API, a comunicação é feita através de solicitações, requisições a API utilizando métodos do protocolo HTTP. Abaixo, descrevo os principais para criar, ler, atualizar e deletar, o famoso CRUD (_Create, Read, Update and Delete_):

- **GET:** Utilizado para obter um recurso, um dado em especifico, utilizando uma identificação ou até mesmo uma lista deles quando solicitado.

- **POST:** Este é utilizado para envio de informações, arquivos e cadastro de alguns dados para o servidor.

- **PUT:** Atualiza, edita somente as informações ou arquivos que foram enviados ao servidor, utilizando uma identificação, tendo que claro, já terem sido criadas anteriormente, caso não especifique, poderá acabar atualizando tudo, precisa ser usado com cuidado.

- **DELETE:** Este deleta os dados ou arquivos que estavam presentes no servidor, seja especifico utilizando uma identificação do que quer que seja deletado ou deletar tudo de uma vez, assim como o PUT, precisa ser utilizado com cuidado.

> Importante ressaltar que existem outros métodos como HEAD, TRACE, CONNECT e OPTIONS, porém, irei focar somente nesses, caso queira saber mais sobre clique neste link para acessar o texto de autoria de [Rene Junior](https://medium.com/@renejr03).

Utilizado os métodos para se comunicar e definir o que você quer com o servidor, ele te retornará uma resposta ao que foi solicitado, seja positiva ou não, o mais comum será receber a resposta no formato JSON (_Javascript Object Notation_), pois é facilmente lido por nós humanos e por máquinas também.

## Exemplos de API's

Ainda está perdido? Muito texto técnico? Então irei te dar dois exemplos, o primeiro será onde você usa API e não repara e o outro é como funciona uma API comparando com uma situação no mundo fora da internet, como por exemplo ir ao restaurante, vamos aos exemplos:

### Exemplo de API na internet

Este exemplo é bem simples, sabe quando você está fazendo um login ou cadastro em algum site ou aplicativo?


![Figura 2: Figura que tem destacado a integração de login com outros aplicativos.](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t5y02pb1erdqsk0q5yp8.png)

Quando você faz o login ou se cadastra utilizando outros apps, redes sociais, você não sabe mas está utilizando uma API.

A integração de mapas utilizando a API do Google Maps em sites de imóveis, reserva de quarto de hotel, é muito grande também.

### Exemplo de API em um restaurante

Depois que escutei sobre este exemplo, minha percepção de mundo mudou, atribuir situações como analogia a API me fez entender muito melhor e vou explicar para você:

Imagine que você está em um restaurante como cliente (client), você olha o cardápio e deseja fazer um pedido (request com método GET), chama o garçom (API), deixa claro o que você quer, ele vai até a cozinha (server) e trás o que foi pedido de volta para a sua mesa (response).

Eu tirei este exemplo de um vídeo muito bem feito pelo Mayk Brito, do canal da Rocketseat, recomendo que assista para se aprofundar no assunto:

{% embed https://www.youtube.com/watch?v=ghTrp1x_1As&ab_channel=Rocketseat %}

## Onde encontrar API’s

Existem muitas API’s espalhadas pela internet, vou deixar algumas aqui para você ter uma visão mais prática depois de todo esse assunto teórico.

[Rapid API](https://rapidapi.com/hub)
[Public APIs](https://publicapis.dev/)

Existem diversas, como do nosso próprio governo, correios, de redes sociais. Essa parte é com você, pesquise sobre public API’s no Google e se divirta, é ótimo para você que não sabe ainda que tipo de projetos quer fazer ou seguimento de indústria.

Depois de tanta teoria você deve estar querendo saber como por tudo isso em prática, eu trouxe dois exemplos para você, de minha autoria, um em Golang e outro em Java com Spring Boot, sinta-se livre para contribuir com os projetos caso sinta interesse, aqui estão:

[Exemplo em Java](https://github.com/cryslefundes/adopet)
[Exemplo em Golang](https://github.com/cryslefundes/gopportunities)

## Referências

[AWS](https://aws.amazon.com/pt/what-is/api/)
[IBM](https://www.ibm.com/br-pt/topics/rest-apis)
[Red Hat](https://www.redhat.com/pt-br/topics/api/what-is-a-rest-api?)