RESTful API’s, o que é e por onde começar?

Se o título desse post te chamou a atenção é por que você é mais uma das pessoas que já tentou aprender e entender as famigeradas RESTful API’s mas por um motivo ou outro até hoje continua na dúvida, achando por exemplo que elas se resumem a apenas novos métodos HTTP que podem ser usados quando são feitas requisições de um cliente a um servidor na WEB.

Pois bem, vou aproveitar e tocar em alguns pontos que talvez vão te fazer despertar para um estudo mais aprofundado sobre esse assunto.

1) API Application

Com o advento da Web, é cada dia mais comum termos aplicações que funcionem única e exclusivamente pela Internet, sendo consumidas por navegadores em desktops ou mesmo através de dispositivos móveis.

Percebemos então que qualquer forma de acesso a uma determinada aplicação será feito, nesses casos, através da Web e isso será independente de plataforma seja ela Desktop ou Mobile.

Por outro lado, grandes empresas precisam fazer com que seus softwares de gestão (estoque, contabilidade, ERP, redes sociais) sejam alimentados com dados para que eles funcionem, e se essa alimentação fosse padronizada e quem sabe até automatizada a dificuldade para manter toda a empresa informada e funcionando seria resolvida.

Com essas duas problemáticas (sofwares sendo acessados pela Web e empresas precisando alimentar seus sistemas com dados) começou-se a pensar em uma solução de sofware que permitisse a conversa entre sistemas ou mesmo entre sistema e usuário.

Durante anos várias alternativas surgiram, e de uma forma geral essas aplicações ficaram conhecidas como API Applications, visto que todo funcionamento baseia-se em fornecer um ponto de acesso entre a aplicação e seu cliente seja ele um usuário ou uma aplicação.

Entendemos então que as API Application permitem uma interoperabilidade entre aplicações, ou seja, a coversação entre elas e entre ela e os usuários.

2) Representações

Agora que já sabemos o que é uma API Application permite a interoperabilidade entre usuários e aplicações, isso nos dá a oportunidade de entender a importância de se ter algo padronizado e de preferência de fácil representação e compreensão por parte de humanos e máquinas.

Isso pode soar um pouco estranho, mas veja esses três exemplos:

1)

<endereco>
<rua>
Rua Recife
</rua>
<cidade>
Paulo Afonso
</cidade>
</endereco>

2)

{ "endereco": 
{
"rua": "Rua Recife",
"cidade": "Paulo Afonso"
}
}

3)

endereco:
rua: Rua Recife
cidade: Paulo Afonso

Qual deles você escolheria para informar o endereço em uma carta? Provavelmente o último por ser de fácil entendimento. E é exatamente isso, as 3 representações são válidas pois nosso entendimento ao final será o mesmo, ou seja, a semântica é a mesma.

Por outro lado, você deve concordar comigo que a primeira representação (formato XML) é mais verbosa, exigindo um esforço extra por parte de quem está escrevendo. No segundo exemplo (formato JSON) já é algo mais leve de ser escrever e o último (formato YAML) é praticamente como escrevemos no dia a dia e esse é o primeiro passo para a padronização que precisamos para permitir a comunicação interoperável.

O mais legal, é que essas 3 representações são válidas atualmente, ou seja, homens e máquinas podem ler, escrever e entender esses formatos.

3) REST

O HTTP é o principal protocolo de comunicação para sistema Web e sobrevive há mais de 20 anos, e em todo esse tempo sofreu algumas atualizações. Nos anos 2000 um dos principais autores do protocolo HTTP, Roy Fielding, sugeriu o uso de novos métodos HTTP para assim resolver problemas com a semântica quando requisições HTTP eram feitas.

Esses novos métodos sugeridos permitiram o uso do HTTP de uma forma muito mais próxima da nossa realidade, dando sentido às requisições HTTP que antes não era conseguido.

Veja os exemplos (requisições em formatos fictícios):

GET http://www.meusite.com/usuarios

DELETE http://www.musite.com/usuarios/jackson

POST http://www.musite.com/usuarios — data {nome: joaquim}

Pela simples leitura (mesmo o método GET DELETE sendo em inglês) é possível inferir que no primeiro caso estamos pegando (GET) todos os usuários do site, ou seja, teremos uma lista de todos os usuários que estão cadastrados no sistema/site. Já no segundo caso estamos apagando (DELETE) o usuário Jackson. No último exemplo usando o método POSTpercebemos o envio de dados extras para cadastrar um novo usuário.

Enfim, veja o quão simples ficou expressar o que queremos fazer ao acessar um determinado endereço usando verbos específicos para URLs específicas e usando dados padronizados quando necessário.

Resumindo, no fundo isso são princípios do REST e até aqui você deve ter percebido que tudo faz sentido, a representação padronizada, os verbos/métodos usados bem como as URLs.

4) Por onde começar?

Apesar de tudo que vimos, aprender e entender REST está muito além de saber apenas qual método usar quando se faz uma requisição, na verdade está muito mais intrinsecamente ligado a dar semântica às requisições feitas ao servidor e isso aparentemente parece fácil, mas em um estudo um pouco mais rebuscado você perceberá que isso é só a ponta do iceberg.

Daí a pergunta que não se quer calar é… Por onde começar?

A reposta, é até simples, conceitualmente você pode aprender tudo indo direto nas documentações oficiais (RFC’s), mas, claro, isso pode demandar um bom tempo de aprendizado e é por isso que resolvi fazer um curso que vai te dar esse atalho.

O curso foi desenvolvido para ajudar a todos que estão inciando no mundo REST, dando uma visão geral e também uma prática necessária ao conhecimento de aplicações REST.

Enfim, se interessou? Então acessa aí abaixo um dos nossos cursos relacionados a REST! 😉

RoR API Cover

Desenvolvendo RESTful APIs com Ruby on Rails

Aprenda a criar uma aplicação completa com Ruby on Rails API-only O curso visa mostrar aos alunos como construir aplicações ...
Leia Mais
REST API Cover

Entendendo e documentando RESTful APIs

Entenda de uma vez por todas RESTful APIs O curso visa mostrar aos alunos os conceitos sobre RESTful APIs, bem ...
Leia Mais

É isso, gente! Até a próxima!