API

  • Cliente (client) - faz um pedido;
  • Garçom (API) - anota o pedido em um bloquinho de notas;
  • Cozinha (server) - recebe o pedido através do bloquinho do garçon.

API (application programming interface) é basicamente um conjunto de rotinas e padrões estabelecidos por uma aplicação, para que outras aplicações possam utilizar essas funconalidades.

  • Responsável por establecer comunicação entre diferentes serviços;
  • Intermediador para troca de informações.

REST

REST (representational state transfer - transferência de estado representativo) é a transferência de dados de uma maneira representativa/didática (json ou xml).

  • A transferência de dados geralmente é feita usando protocolo http (bloquinho de notas do garçom).
  • Determina algumas obrigaçoes na transferência de dados;

Existem 6 necessidades (constraints) para ser RESTful:

  • Client-server: cleinte e servidor precisam estar separados, dessa forma poderemos ter uma portabilidade do nosso sistema (usando React pra web e RN pra mobile, por exemplo);
  • Stateless: Cada requisição que o cliente faz para o servidor, deverá conter todas as informações necessárias pro servidor entender e responder (response) a requisição (request), ele NÃO pode armazenar essas informações - nesse caso ele teria um ESTADO. Exemplo: A sessão do usuário deverá ser enviada em todas as req, para saber se aquele usuário está autenticado e apto a usar os serviços, e o servidor não pode lembrar que o cliente foi atutenticado na req anterior;
  • Cacheable: As respostas para uma requisição deverão ser explicitas ao dizer se aquela req pode ou não ser cacheada pelo cliente;
  • Layered System: Nesse exemplo o graph.facebook é uma API e o youtube é um endpoint (caminho onde quer chegar) https://graph.facebook.com/youtube. O cliente acessa um endpoint, sem precisar saber da compexidade, de quais passos estão sendo necessários para o servidor responder a req, ou quais outras camadas o servidor estará lidando para que a req seja atendida;
  • Code on demand (optional): O servidor manda pro cliente um script que pode ser executado no front. Dá a possibilidade da nossa aplicação pegar códigos (JS por ex.) e executar no cliente;
  • Uniform Interface: Manter o mesmo padrão no desenvolvimento de toda a aplicação.

Boas práticas

  • Utilizar verbos http nas requisições;
  • Não utilizar barras no final de endpoint (por ex. https://localhost:3000/clients/);
  • Não deixar o cliente sem resposta;

Status das respostas

  • 1xx: informação
  • 2xx: sucesso
    • 200: OK
    • 201: CREATED
    • 204: não tem conteúdo PUT POST DELETE
  • 3xx: redirection
  • 4xx: client error
    • 400: bad request
    • 404: not found

Verbos HTTP

  • GET: recebe os dados de um resource
  • POST: envia os dados a serem processados por um resource
  • PUT: atualizas os dados de um resource
  • DELETE: deleta um resource

Passo a passo do projeto:

Iniciar o projeto

npm init -y

Adicionar o express (framework pra trabalhar com servidor http)

npm add express 

Referências de estudo Rocketseat
Dados do arquivo data.json API JSON Placeholder