- 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 (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.
- 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;
- 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
- 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
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