Material de apoio para aprendizagem de desenvolvimento de APIs REST/backend. Além de conceitos, apresentamos como fazer usando o ecossistema Spring Boot.
Uma API é um contrato bem definido para que sistemas possam se comunicar e oferecer “serviços” uns aos outros. Esta é uma definição muito informal, porém precisa e fácil de entender. Quando usamos a API JAVA, por exemplo, temos que seguir exatamente o contrato de como usar cada classe e cada método definido. É o nosso programa falando com outro programa e obtendo um valor a partir desta interação. Quando usamos a API de janelas o sistema operacional ou outra API para controlar algum recurso do sistema, estamos aproveitando funcionalidades já prontas (e complexas) desenvolvidas e testadas por outros programadores. É o nosso programa usando uma API para realizar alguma operação. O mais importante aqui é que a API permite comunicação entre sistemas. É diferente de quando criamos um programa para um ser humano usar. Nesse caso precisamos expor uma interface amigável para olhos humanos. Quando desenvolvemos um programa para outros programas usarem nós desenvolvemos uma API - application programming interface. APIs são soluções prontas para um determinado problema e ao usa-las podemos criar soluções para outros problemas relacionados de forma muito mais simples.
As APIs estão em todos os lugares… Por exemplo, se você quiser, pode armazenar seu codigo e outros dados no github usando a API do github. Imagine que você é dono(a) de uma pousada no litoral norte da Paraíba e quer oferecer para os seus hóspedes a possibilidade de fazer reserva na pousada atraves de empresas como booking, trivago, decolar… Claro que vão existir outras questões contratuais no caminho, mas em termos de TI, o que você precisa fazer para permitir que esses sites enxerguem você é expor uma API que eles possam acessar. E nesse caso, essa API deve ser definida pelo usuário que vai acessar porque nesse caso você quer se “acoplar” a um sistema já definido. Mas podemos pensar em outras situações. Imagine que você trabalha em uma grande empresa de desenvolvimento e que você e seu time (porque ninguém trabalha sozinho nesse mundo!) estão responsáveis por desenvolver diversos sistemas para uma loja virtual, desde o controle de estoques, cadastro de usuários, vendas online, cadastro de fornecedores, compras online (quando compra dos fornecedores), balanços financeiros, etc. Imagine todas as bases de dados que estão envolvidas desse grande sistema: usuários do site de compras, fornecedores, produtos, vendas, compras, balanços, etc. Cada operação desse sistema pode envolver muitas operações menores. Por exemplo, quando ocorre uma venda no site, os dados financeiros da empresa devem ser atualizados e o estoque também. Quando a empresa realiza uma compra de um fornecedor, os dados financeiros e o estoque da loja também precisam ser atualizados. Como faríamos para não duplicar o código de atualização de dados financeiros e de estoque nessas duas operações?
Se você respondeu que criaria APIs está no caminho certo. Que tal uma API especializada só em manter dados financeiros e gerar diferentes tipos de relatórios? E outra API responsável só por gerenciar o estoque, inclusive podendo ter inteligência de sugerir compras e promoções. O bom de ter essas APIs focadas em um determinado nicho é que elas podem ser muito mais “inteligentes”. Esse caminho de solução é o que chamamos de arquitetura em microsserviços e está cada vez mais em uso. Neste curso, por estarmos tratando de uma introdução a APIs (em especial, APIs REST) não focaremos em desenvolvimento de aplicações de microsserviços, mas fica a motivação para depois se aprofundar nesse assunto.
O mais importante aqui nesse momento é saber definir o que é uma API e ter uma noção de diferentes tipos de APIs que existem; além, de, claro estar motivado para aprender mais sobre o assunto. Aqui neste curso estaremos interessados no desenvolvimento de APIs como serviço para construção de aplicações Web. Quando movemos a discussão para este tipo de aplicação é comum ouvirmos que as APIs expoem um contrato que será acessado pelo cliente que é um navegador/browser. Uma API, no entanto, não tem amarras sobre quem pode acessá-la (se é um cliente Web/navegador, se é outra API, se é um robô…).
Como aqui estaremos focados em desenvolvimento de APIs REST e é muito comum usar esse tipo de API para desenvolvimento de aplicações Web, vamos conversar um pouco sobre esse tipo de aplicação, sua arquitetura e padrões de projeto mais usados para desenvolver o backend dessas aplicações. Em se tratando de aplicações Web é comum termos duas partes de desenvolvimento muito bem definidas: a parte do frontend e a parte do backend. Vamos ler um pouco sobre isso?
Mas antes, faça este quiz para verificar seus conhecimentos até o momento.