REST é a bola vez quando falamos sobre API. As maioria dos serviços que encontramos na web fornece interfaces deste tipo para que possamos desenvolver integrações. Será mesmo que estas APIs podem ser consideradas RESTful? O que é preciso para que uma API seja considerada RESTful? Você sabia que este padrão já existe a mais de 15 anos? Nesta palestra vamos nos aprofundar no tema e entender os conceitos e constraints de um sistema RESTful para que possamos explorar suas vantagens na hora de arquitetar nossa próxima API web.
8. Alguns mitos
● REST é um protocolo
● Se é API então é REST
● Se é JSON então é REST
● Se é CRUD então é REST
● Se usa os métodos HTTP
(GET/POST/PUT/DELETE) então é REST
13. História
● 1989 - Primeira
conexão HTTP
○ Tim Berners-Lee
○ CERN
(Organisation
européenne pour la
recherche
nucléaire) "PROPERTY OF CERN"
14. História
● 1990 - Formalização do HTTP
○ Internet Engineering Task Force (IETF)
○ World Wide Web Consortium (W3C)
● 1997 - HTTP/1.1
○ Participação de Roy Fielding
● 2000 - "Architectural Styles and the Design of
Network-based Software Architectures"
○ Dissertação de doutorado de Roy Fielding
○ REST
16. O que é REST
● Acrônimo para:
REpresentational State Transfer
● pt-br:
Transferência de Estado Representacional
● Estilo Arquitetural
○ Não é um protocolo
25. Transferência de Estado Representacional
● Queremos acessar o meu perfil no Twitter
[RECURSO]
● Estado inicial: www.twitter.com/
● Clicamos em "ver perfil" [LINK]
● Um servidor web retorna uma página HTML
[REPRESENTAÇÃO]
● Estado final: https://twitter.com/xima
28. 2. Stateless
● Ausência de estado: o servidor não deve
guardar o estado do cliente.
● A requisição deve conter tudo que é
necessário para o servidor processar a
resposta.
29. 3. Cache
● O cliente deve ser informado sobre as
propriedades de cache de um recurso para
que possa decidir quando deve ou não utilizar
cache.
30. 4. Interface Uniforme
● 4 sub-preceitos
○ Identificação de recursos (URI).
○ Manipulação de recursos a partir de suas
representações.
○ Mensagens auto descritivas.
○ HATEOAS
31. 5. Sistema em camadas
● O cliente não precisa saber sobre as camadas
entre ele o servidor.
● Camadas da internet (HTTP/TCP/IP)
● Caching
○ Browser
○ Servidor
○ Banco de dados
32. 6. Código sob demanda
● O cliente deve ser capaz de atualizar partes
de seu código dinamicamente.
● Não é obrigatório.
34. APIs HTTP e os preceitos do REST
● Cliente - Servidor
● Stateless
● Cache
● Interface Uniforme
○ Identificação de recursos, manipulação de
recursos a partir de suas representações,
mensagens auto descritivas, HATEOAS.
● Sistema em camadas
● Código sob demanda
35. APIs e HATEOAS
"REST APIs must be hypertext-driven"
Roy T. Fielding
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
38. Evolutibilidade é a capacidade de
adicionar, remover ou modificar
funcionalidades sem modificar interfaces
https://twitter.com/fielding/status/684109534659411968
39. Não temos controle sobre o mundo!
As regras de negócio mudam o tempo
todo e o sistema evolui
https://twitter.com/fielding/status/647491186937036800
40. REST foi pensado para que os
desenvolvedores estejam preparados
para mudanças.
https://twitter.com/fielding/status/684110775313551360
42. Precisamos de protocolos!
(mas não precisamos
reescrever os já existentes)
https://twitter.com/fielding/status/684111566304743424
43. Os outros dois preceitos
● Manipulação de recursos
○ As representações entregues ao cliente devem
ser suficientes para que ele seja capaz de realizar
modificações nos recursos.
● Mensagens auto descritivas
○ Respostas devem conter todo o conteúdo
necessário para o cliente tomar decisões de como
proceder.
44. Como aplicar
● Pense bem nas representações dos
recursos do sistema.
○ Desenvolva seus Media-Types
● Documente TUDO
○ O que o cliente deve esperar da requisição?
○ Como deve lidar com erros?
○ Como deve lidar com mudanças?
■ Como lidar com um dado não esperado?
45. Como aplicar
● Utilize os padrões já existentes
○ Métodos do HTTP
■ GET/POST/PUT/PATCH/DELETE
○ Status de resposta do HTTP:
■ 200 OK
■ 201 CREATED
■ 404 NOT FOUND
● Defina mensagens de erro claras