Desvendando as Diferenças: APIs, Web Services, SOAP e HTTP Simplificados
Tags: braziliandevs
Published: 2023-08-11 11:48:52

*Introdução*

Neste artigo irei explorar sobre as APIs (Interfaces de Programação de Aplicativos) que desempenham este papel intermediário para que diferentes sistemas se comuniquem. 

No entanto, o universo da APIs é cercado de terminologias que, as vezes, pode tornar a compreensão complexa, com termos como API interna, API externa, Web API, Web Services, SOAP, HTTP e etc. 

> Este artigo é parte de uma síntese de anotações soltas sobre desenvolvimento web e do Bootcamp que estou fazendo atualmente em desenvolvimento full stack.

Então, vamos começar!
## APIs: A Base da Interconexão

> Uma API (_Application Programming Interface_) é um conjunto de características e regras existentes em uma aplicação que possibilitam interações com essa através de um software - ao contrário de uma interface de usuário humana. A API pode ser entendida como um simples contrato entre a aplicação que a fornece e outros itens, como outros componentes do software, ou software de terceiros. [mdn web docs](https://developer.mozilla.org/pt-BR/docs/Glossary/API)

É importante entender que as APIs servem como pontes entre sistemas e aplicativos, servindo para a troca de informações de forma padronizada.
### Cardápio de restaurante como a API

Desta maneira, vamos pensar numa situação de um cardápio de restaurante. Imagina que você é um cliente (software) e deseja fazer a solicitação de um item do menu (dados) do restaurante (sistema ou aplicativo).

Em vez de você entrar na cozinha e fazer o pedido diretamente aos cozinheiros (código interno do restaurante), você olha para o cardápio (API) que lista os pratos disponíveis para a sua requisição.

Assim como no cardápio terá o detalhamento de cada item como: prato, preço, ingredientes e como fazer o pedido; A API define as regras para que um software faça a solicitação para um sistema ou aplicativo.

Ou seja, a API permite que você, como cliente/usuário, possa fazer a solicitação dos dados e/ou funcionalidades de uma aplicação ou sistema.

### Principais tipos de API

- **API Pública**

> A API é disponibilizada para todos. Terceiros podem desenvolver aplicações que interajam com a sua API e isso pode se tornar uma fonte de inovação. [Red hat](https://www.redhat.com/pt-br/topics/api/what-are-application-programming-interfaces)

Também conhecida como API Externa, estas são projetadas para permitir que diferentes aplicativos ou sistemas interajam uns com os outros, mesmo que não tenham sido desenvolvidas pela mesma equipe ou organização.

Utilizando o mesmo contexto do restaurante, vamos imaginar agora que o restaurante decide oferecer um serviço de entrega.

O restaurante não pode deslocar um atendendo para ficar entregando comida todo o tempo. Então o restaurante passa a fornecer uma lista dos itens disponíveis (dados) com todas as informações necessárias como preço e o endereço de entrega.

Desta maneira, a API externa permite que o serviço de entrega acesse as informações de forma padronizada, para que possam buscar os pedidos e entregar a comida corretamente.

- **API Privada**

> A API é usada apenas internamente. Isso oferece às empresas um maior controle. [Red hat](https://www.redhat.com/pt-br/topics/api/what-are-application-programming-interfaces)

Também conhecida como API Interna, estas são projetadas para comunicação interna entre diferentes módulos de um mesmo sistema ou de uma organização. Essas APIs permitem dividir o código, promovendo a reutilização de código, simplificação e melhorar o gerenciamento sobre os serviços internos da organização.

No contexto do restaurante, vamos pensar agora que possui diversos departamentos diferentes, sendo estes a própria cozinha, o caixa e o atendimento, por exemplo. Estes departamentos precisam se comunicar de maneira organizada para que não gere ruídos e garanta que os pedidos sejam atendidos corretamente.

Desta maneira, usa-se uma API Interna para a comunicação. Após o cliente fazer um pedido, o atendendo alimenta o sistema de pedidos (API interna) onde o cozinheiro consegue saber o momento que tem que começar a preparar o prato solicitado pelo cliente.

Essa troca de informação dentro de um restaurante, sem envolver o cliente, representa a ação de uma API interna.

## Web Services vs. Web APIs: Definindo o Contexto

Existe uma confusão sobre estes dois termos, tanto *Web API* quanto *Web Services*, pois frequentemente lemos ou escutamos as pessoas usando estes termos de forma intercambiável, mas existe nuances entre esses dois conceitos.

- **Web API**

Uma Web API é considerada uma API externa. Sendo esta um tipo específico de API que utilizada os protocolos da web para fornecer serviços/recursos pela internet.

As Web APIs são acessíveis de forma remota por meio da internet, ou seja, permite que aplicativos, sistemas e serviços se comuniquem e interajam com elas.

Desta maneira, muitas vezes, as Web APIs tendem a ter seu foco em fornecer acesso a dados específicos.

- **Web Service**

> Web Service é um sistema de software que suporta interações interoperáveis de máquina para máquina por meio de uma rede. Ele possui uma interface descrita em um formato processável por máquina (especificamente, Linguagem de Definição de Serviço da Web, ou WSDL).
> 
> Web Services desempenham uma tarefa específica ou um conjunto de tarefas. Um Web Service é descrito usando uma notação XML padrão e formal, chamada descrição de serviço, que fornece todos os detalhes necessários para interagir com o serviço, incluindo formatos de mensagem (que detalham as operações), protocolos de transporte e localização.[IBM](https://www.ibm.com/docs/en/cics-ts/5.1?topic=services-what-is-web-service)

É um termo que *inclui* as Web APIs, mas também abrange outros protocolos de comunicação, incluindo aqueles que não são baseados em HTTP.

### Resumindo

| Característica            | Web API                                  | Web Service                                      |
|---------------------------|------------------------------------------|--------------------------------------------------|
| **Protocolo Comum**       | Geralmente usa HTTP/HTTPS                | Pode usar vários protocolos, incluindo SOAP     |
| **Formatos de Dados**     | JSON ou XML                             | Pode usar JSON, XML, SOAP                       |
| **Estilo de Arquitetura** | Pode ser RESTful ou não                  | Pode ser SOAP-based ou RESTful                  |
| **Acessibilidade**        | Acessível via URLs                       | Acessível via URLs (em REST) ou ponto de extremidade (em SOAP) |
| **Segurança**             | Autenticação por tokens, chaves de API   | Pode usar WS-Security (SOAP) ou outras abordagens |

- Todos os Web Services são Web APIs, mas nem todos as Web APIs são Web Services;

## SOAP vs. HTTP: Escolhendo a Abordagem

A escolha **sempre** depende de fatores como: necessidades específicas do projeto, do levantamento de requisitos, da preferência da equipe, por exemplo.

Vamos falar sobre os pontos relevantes na consideração de cada uma:

- **SOAP**

> O SOAP é um protocolo elaborado para facilitar a chamada remota de funções via Internet, permitindo que dois programas se comuniquem de uma maneira tecnicamente muito semelhante à invocação de páginas Web.  [linhadecodigo](http://www.linhadecodigo.com.br/artigo/38/soap-e-webservices.aspx)

1. Segurança e confiabilidade;
2. Integração entre sistemas heterogêneos;
3. Contratos formais.

Em uma situação hipotética onde a segurança e a confiabilidade do seu serviço é primordial, por exemplo, lidando com informações sensíveis, como as financeiras, você pode optar pelo uso do SOAP para garantir robustez em segurança, como criptografia e autenticação. 

- **HTTP**

Protocolo amplamente utilizada para a troca de dados na internet. Muitas Web APIs são construídas sobre o HTTP, usando seus métodos como: GET, POST, PUT e DELETE, e com os dados em formato JSON.

1. Simplicidade;
2. Performance;
3. Comunicação pela Internet.

Dado uma segunda situação hipotética onde existe uma urgência na agilidade sobre a implementação e o foco está na simplicidade e no desempenho, o uso de HTTP usando RESTful pode ser o mais aconselhável. É um cenário onde a troca de dados é praticamente entre um aplicativo *mobile* e um servidor na internet.

## Conclusão

Muito dos assuntos aqui foram tratados de forma simples e generalista, a fim de tentar sintetizar todas essas terminologias e conceitos numa perspectiva de desenvolvimento. 

Buscar entender como todos esses termos estão situados no mesmo conjunto de ideias é importante para sua melhor compreensão nos seus estudos.

Fico por aqui e deixo minhas últimas publicações para caso queira acompanhar outros assuntos que estou estudando e compartilhando no momento.

- Bootcamp da Atlântico Avanti

1. [Entendendo a Relação entre SQL, DML e DDL: Fundamentos de Banco de Dados](https://dev.to/matt1cs/entendendo-a-relacao-entre-sql-dml-e-ddl-fundamentos-de-banco-de-dados-23bi)

- Tecnólogo em ADS: Estrutura de Dados

1. [Explorando as Fundamentais Estruturas de Dados: Recursão](https://dev.to/matt1cs/explorando-as-fundamentais-estruturas-de-dados-recursao-2p6g)
2. [Explorando as Fundamentais Estruturas de Dados: Algoritmos de Ordenação](https://dev.to/matt1cs/explorando-as-fundamentais-estruturas-de-dados-algoritmos-de-ordenacao-50ml)

Até a próxima!

## Sobre o Autor

Meu gosto pela escrita se entrelaça com a vontade de compartilhar o que estou aprendendo ao longo desse percurso. Acredito que cada artigo é uma oportunidade não apenas de solidificar meu conhecimento, mas também de oferecer insights valiosos a outros aprendizes.

Minha esperança é que essas contribuições não apenas auxiliem quem busca conhecimento, mas também me impulsionem na busca por novas oportunidades e desafios na indústria de desenvolvimento de software.