SlideShare uma empresa Scribd logo
1 de 29
REST NÃO É
SIMPLESMENTE
RETORNAR JSON:
INDO ALÉM COM
APIS REST
Cleber Lopes Campomori
Líder de Conteúdo e Inovação
TreinaWeb
QUAL É O PROBLEMA?
▪ Softwares hoje são distribuídos;
▪ Web, Mobile, Desktop, Jobs...
▪ Softwares hoje precisam ser executados em ambientes
heterogêneos;
▪ Tecnologias e linguagens diferentes
▪ As informações precisam estar ”em todo lugar”;
▪ Os softwares hoje precisam conversar entre si!
▪ Integrações!
E AGORA?!?!?!?
ANTES, ALGUNS CONCEITOS...
URI x URL x URN
▪ URIs identificam um recurso!
▪ Geralmente possibilitam a interação entre recursos disponibilizados
em uma rede;
▪ URIs podem ser de dois ”tipos”:
▪ URLs: dizem respeito à localização do recurso;
▪ URNs: dizem respeito ao nome e identificação de um recurso.
URI x URL x URN
URI
12º. JUG Vale
(URN)
Av. Eng. Francisco José Longo, nº 777
(URL)
URI
teste.txt
(URN)
file:////home/jugvale/teste.txt
(URL)
O PROTOCOLO HTTP
▪ HTTP: HyperText Transfer Protocolo – Protocolo de
Transferência de HiperTexto;
▪ Protocolo de comunicação;
▪ Modelo cliente-servidor;
▪ Definido e ”coordenado” pela W3C;
▪ Está na versão HTTP/2, embora a maioria ainda utilize a versão
HTTP/1.1;
▪ Se baseia em URIs;
▪ A base da Web como conhecemos atualmente.
CARACTERÍSTICAS DO PROTOCOLO
HTTP
▪ Protocolo cliente-servidor
▪ O tráfego de informações ocorre em uma via dupla entre o cliente
(quem solicita alguma coisa) e o servidor (quem deve prover essa
coisa).
▪ A solicitação do cliente é chamada de request;
▪ A resposta do servidor é chamada de response.
Cliente Rede Servidor
Request
Response
CARACTERÍSTICAS DO PROTOCOLO
HTTP
▪ O protocolo não é ”keep-alive” por padrão
▪ Quando o ciclo Request/Response se encerra a conexão também é
encerrada (mas dá pra manter com keep-alive);
▪ As conexões são independentes
▪ Uma conexão não ”se conecta” ou conhece outras conexões
▪ Por decorrência, o protocolo HTTP é stateless
▪ Se a conexão não é mantida e as conexões são independentes,
como guardar informações?
CARACTERÍSTICAS DO PROTOCOLO
HTTP
▪ O protocolo HTTP é semântico
▪ Uma URI pode responder das mais variadas maneiras dependendo
da semântica da requisição;
▪ A natureza dos requests é definida pelo verbo HTTP;
▪ A natureza dos responses é definida pelo status HTTP;
▪ Desenvolvedores que precisam trafegar dados através do protocolo
HTTP DEVEM saber destes conceitos.
CARACTERÍSTICAS DO PROTOCOLO
HTTP
▪ Principais verbos HTTP
Verbo HTTP Semântica Exemplos
GET Recuperação de informações no servidor Uma consulta a uma tabela
POST Inserção de informações no servidor A ação de inserção em um cadastro
PUT Alteração de informações no servidor A ação de alteração em um cadastro
DELETE Deleção de recursos no servidor A ação de deleção em um cadastro
CARACTERÍSTICAS DO PROTOCOLO
HTTP
▪ Principais status HTTP
Status HTTP Semântica Exemplos
1xx Informação: notificação do cliente de que
a requisição está sendo processada
100 (Continue), 101 (Switching
Protocols)...
2xx Sucesso: a requisição foi processada com
sucesso
200 (OK), 202 (Accepted), 206 (Partial
Content)...
3xx Redirecionamento: uma ação adicional
deve ser realizada para completar a
requisição
302 (Found), 305 (Use Proxy), 307
(Temporary Redirect)...
4xx Erro: a requisição não pôde ser atendida 404 (Not Found), 406 (Not
Acceptable), 410 (Gone)...
5xx Erro no servidor: a requisição era válida,
mas o servidor encontrou um erro ao
processá-la
502 (Bad Gateway), 500 (Internal
Server Error), 599 (Network Connect
Timeout)...
BOM, E AGORA?!?!?!?
SOAP: O AVÔ DAS INTERFACES WEB
▪ Simple Object Access Protocol – Protocolo de Acesso Simples a
Objetos;
▪ Definido como protocolo por Dave Winer, Don Box, Bob Atkinson,
and Mohsen Al-Ghosein (Microsoft);
▪ Fortemente baseado em XML;
▪ Se utiliza de vários protocolos de transmissão, pois a transmissão
é transparente
▪ Geralmente é baseado em RPC sob HTTP;
▪ É (bem) usado até hoje (e acredito que vá continuar a ser
utilizado por um bom tempo...)
SOAP: O AVÔ DAS INTERFACES WEB
▪ Estrutura de uma requisição SOAP
Requisição -
Cliente
Rede
Servidor
Request
Response
Envelope SOAP
SOAP
Header
SOAP Body
Envelope SOAP
SOAP
Header
SOAP Body
SOAP Fault
Chamada RPC
SOAP: O AVÔ DAS INTERFACES WEB
▪ Vantagens
▪ O formato de transporte de dados fica transparente no envelope;
▪ Fácil integração com demais tecnologias por se basear em XML;
▪ As chamadas RPC podem tornar os serviços expostos mais ”claros”;
▪ Provê mais ”segurança” pelos mecanismos característicos do XML.
▪ Desvantagens;
▪ Justamente ser baseado em XML: processamento é muito pesado;
▪ Exige uma stack mais complexa;
▪ Verbosidade excessiva
EIS QUE SURGE UM HERÓI...
REST: O ”CARA” DO MOMENTO
▪ É um modelo arquitetural
▪ Não é tecnologia!
▪ Não é framework!
▪ Não é linguagem!
▪ Criado por Roy Fielding
▪ Um dos criadores do protocolo HTTP
▪ Visa utilizar o protocolo HTTP de maneira mais ”efetiva”
▪ Foco em semântica;
▪ Transações mais leves
PILARES PARA UMA API REST
▪ Trata-se de um modelo stateless (HTTP)
▪ Trata-se de um modelo cliente-servidor (HTTP)
▪ Trata-se de uma representação que deve ser ”cacheável”
(HTTP)
▪ É um princípio que é transparente à
tecnologia/linguagem/framework (HTTP)
▪ É baseado em recursos
▪ Pode transmitir dados em qualquer formato!
”PERA” AÍ! PRA SER REST, NÃO TENHO
QUE USAR JSON!??
A VELHA ”TRETA”: XML x JSON
UMA API REST PODE RETORNAR O QUE
QUISER!
▪ ”Bora” usar o Content Negotiation! ☺
REST x RPC (SOAP)
REST RPC/SOAP
Fundação em recursos Fundação em serviços
GET /usuarios /usuarios/getUsuarios
POST /usuarios /usuarios/inserirUsuario
PUT /usuarios/{id}
/usuarios/atualizarUsuario?id={id}
(ou no SOAP body)
DELETE /usuarios/{id}
/usuarios/deletarUsuario?id={id}
(ou no SOAP body)
GET /usuarios/porNome/{nome}
/usuarios/getUsuariosPorNome?nome={nome}
(ou no SOAP body)
O ”CALCANHAR DE AQUILES”:
HATEOAS
▪ Hypermedia as the Engine of Application State – Hipermídia
como Mecanismo de Estado da Aplicação
▪ Sétima arte do REST: sem ele, você não está utilizando REST
direito
▪ Os recursos não são simplesmente tráfego de dados!
▪ Eles também devem fornecer que tipo de ações podem ser realizada
com eles
▪ Hypermedia Driven Application (HDA)
▪ Auxilia no processo de escalabilidade e interface única.
O ”CALCANHAR DE AQUILES”:
HATEOAS
▪ Um problema grave! JSON não dá suporte ”natural” a
hiperlinks como o XML!
▪ Solução no JSON: representação através de um recurso
adicional…
REPRESENTAÇÕES DE RECURSOS
BASEADOS NO HATEOAS
XML
HTTP/1.1 200 OK
Content-Type: application/xml
[...]
<?xml version="1.0"?>
<account rel=”_self" href="https://bank.example.com/account/12345">
<account_number>12345</account_number>
<balance currency="usd">-25.00</balance>
<link rel="deposit” href="https://bank.example.com/account/12345/deposit" />
</account>
REPRESENTAÇÕES DE RECURSOS
BASEADOS NO HATEOAS
JSON
HTTP/1.1 200 OK
Content-Type: application/json
[...]
{
"account_number": 12345,
"balance": {
"currency": "usd”
}
"links": [{
"rel": "deposit",
"href": "https://bank.example.com/account/12345/deposit"
}, {
"rel": ”_self",
"href": "https://bank.example.com/account/12345"
}]
}
CONCLUSÕES...
Cleber Lopes
cleber.campomori@treinaweb.com.br
fb.com/cleber.campomori
linkedin.com/in/clebercampomori
Obrigado! =)

Mais conteúdo relacionado

Mais procurados

Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONMarcio Junior Vieira
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupWagner Roberto dos Santos
 
Criando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPCriando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPRenan Gonçalves
 
Curso de Node.js e MongoDB - 11
Curso de Node.js e MongoDB - 11Curso de Node.js e MongoDB - 11
Curso de Node.js e MongoDB - 11Luiz Duarte
 
Criando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHPCriando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHP2km interativa!
 
APIs REST com Spring Boot
APIs REST com Spring BootAPIs REST com Spring Boot
APIs REST com Spring BootWesley Fuchter
 
Sistemas Distribuídos - Big Web Services
Sistemas Distribuídos - Big Web ServicesSistemas Distribuídos - Big Web Services
Sistemas Distribuídos - Big Web ServicesKeyo Galvao
 

Mais procurados (9)

REST and JEE
REST and JEEREST and JEE
REST and JEE
 
Criando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSONCriando e consumindo webservice REST com PHP e JSON
Criando e consumindo webservice REST com PHP e JSON
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Criando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHPCriando Webservices RESTFul com CakePHP
Criando Webservices RESTFul com CakePHP
 
Conhecendo Ror
Conhecendo RorConhecendo Ror
Conhecendo Ror
 
Curso de Node.js e MongoDB - 11
Curso de Node.js e MongoDB - 11Curso de Node.js e MongoDB - 11
Curso de Node.js e MongoDB - 11
 
Criando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHPCriando e consumindo Web Services (REST) com o CakePHP
Criando e consumindo Web Services (REST) com o CakePHP
 
APIs REST com Spring Boot
APIs REST com Spring BootAPIs REST com Spring Boot
APIs REST com Spring Boot
 
Sistemas Distribuídos - Big Web Services
Sistemas Distribuídos - Big Web ServicesSistemas Distribuídos - Big Web Services
Sistemas Distribuídos - Big Web Services
 

Semelhante a Rest

Webservices em PHP e a liberdade da Web
Webservices em PHP e a liberdade da WebWebservices em PHP e a liberdade da Web
Webservices em PHP e a liberdade da WebAlexandre Andrade
 
Psdc - 2014/01
Psdc - 2014/01Psdc - 2014/01
Psdc - 2014/01Isa Prati
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]Igor Santos
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONMario Guedes
 
Introdução ao ASP .NET Web API
Introdução ao ASP .NET Web APIIntrodução ao ASP .NET Web API
Introdução ao ASP .NET Web APIVinicius Mussak
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixAndré Déo
 
Semantic Data Services: Uma abordagem para leitura e atualização de dados sem...
Semantic Data Services: Uma abordagem para leitura e atualização de dados sem...Semantic Data Services: Uma abordagem para leitura e atualização de dados sem...
Semantic Data Services: Uma abordagem para leitura e atualização de dados sem...Hermano Lira
 
Minicurso - Banco de Dados NoSQL com .Net Core
Minicurso - Banco de Dados NoSQL com .Net CoreMinicurso - Banco de Dados NoSQL com .Net Core
Minicurso - Banco de Dados NoSQL com .Net CoreBruno Roldão
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTMario Guedes
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTArrayOf.io
 
Workshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsWorkshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsHeider Lopes
 
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMASO MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMASHeider Lopes
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSPledsifes
 
Soa – Woa Rest Arquiteturas
Soa – Woa   Rest ArquiteturasSoa – Woa   Rest Arquiteturas
Soa – Woa Rest Arquiteturasrafaslide
 

Semelhante a Rest (20)

Webservices em PHP e a liberdade da Web
Webservices em PHP e a liberdade da WebWebservices em PHP e a liberdade da Web
Webservices em PHP e a liberdade da Web
 
Psdc - 2014/01
Psdc - 2014/01Psdc - 2014/01
Psdc - 2014/01
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSON
 
Introdução ao ASP .NET Web API
Introdução ao ASP .NET Web APIIntrodução ao ASP .NET Web API
Introdução ao ASP .NET Web API
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
 
REST com Python
REST com PythonREST com Python
REST com Python
 
Semantic Data Services: Uma abordagem para leitura e atualização de dados sem...
Semantic Data Services: Uma abordagem para leitura e atualização de dados sem...Semantic Data Services: Uma abordagem para leitura e atualização de dados sem...
Semantic Data Services: Uma abordagem para leitura e atualização de dados sem...
 
Web service
Web serviceWeb service
Web service
 
Minicurso - Banco de Dados NoSQL com .Net Core
Minicurso - Banco de Dados NoSQL com .Net CoreMinicurso - Banco de Dados NoSQL com .Net Core
Minicurso - Banco de Dados NoSQL com .Net Core
 
Web Sphere
Web SphereWeb Sphere
Web Sphere
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o REST
 
Entendendo HTTP para entender o REST
Entendendo HTTP para entender o RESTEntendendo HTTP para entender o REST
Entendendo HTTP para entender o REST
 
Workshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsWorkshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIs
 
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMASO MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
O MUNDO DAS APIS OTIMIZANDO A INTEGRAÇÃO DE SISTEMAS
 
REST-fuuuu
REST-fuuuuREST-fuuuu
REST-fuuuu
 
Introdução à Servlets e JSP
Introdução à Servlets e JSPIntrodução à Servlets e JSP
Introdução à Servlets e JSP
 
Soa – Woa Rest Arquiteturas
Soa – Woa   Rest ArquiteturasSoa – Woa   Rest Arquiteturas
Soa – Woa Rest Arquiteturas
 

Mais de JugVale

Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: IntroduçãoJugVale
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnitJugVale
 
Introdução ao JEE
Introdução ao JEEIntrodução ao JEE
Introdução ao JEEJugVale
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)JugVale
 
Abertura TI No Vale
Abertura TI No ValeAbertura TI No Vale
Abertura TI No ValeJugVale
 
2º encontro do jug vale
2º encontro do jug vale2º encontro do jug vale
2º encontro do jug valeJugVale
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao AndroidJugVale
 
NoSQL com Cassandra
NoSQL com CassandraNoSQL com Cassandra
NoSQL com CassandraJugVale
 

Mais de JugVale (9)

Maven: Introdução
Maven: IntroduçãoMaven: Introdução
Maven: Introdução
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
Webdev
WebdevWebdev
Webdev
 
Introdução ao JEE
Introdução ao JEEIntrodução ao JEE
Introdução ao JEE
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
 
Abertura TI No Vale
Abertura TI No ValeAbertura TI No Vale
Abertura TI No Vale
 
2º encontro do jug vale
2º encontro do jug vale2º encontro do jug vale
2º encontro do jug vale
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
NoSQL com Cassandra
NoSQL com CassandraNoSQL com Cassandra
NoSQL com Cassandra
 

Rest

  • 1. REST NÃO É SIMPLESMENTE RETORNAR JSON: INDO ALÉM COM APIS REST Cleber Lopes Campomori Líder de Conteúdo e Inovação TreinaWeb
  • 2. QUAL É O PROBLEMA? ▪ Softwares hoje são distribuídos; ▪ Web, Mobile, Desktop, Jobs... ▪ Softwares hoje precisam ser executados em ambientes heterogêneos; ▪ Tecnologias e linguagens diferentes ▪ As informações precisam estar ”em todo lugar”; ▪ Os softwares hoje precisam conversar entre si! ▪ Integrações!
  • 5. URI x URL x URN ▪ URIs identificam um recurso! ▪ Geralmente possibilitam a interação entre recursos disponibilizados em uma rede; ▪ URIs podem ser de dois ”tipos”: ▪ URLs: dizem respeito à localização do recurso; ▪ URNs: dizem respeito ao nome e identificação de um recurso.
  • 6. URI x URL x URN URI 12º. JUG Vale (URN) Av. Eng. Francisco José Longo, nº 777 (URL) URI teste.txt (URN) file:////home/jugvale/teste.txt (URL)
  • 7. O PROTOCOLO HTTP ▪ HTTP: HyperText Transfer Protocolo – Protocolo de Transferência de HiperTexto; ▪ Protocolo de comunicação; ▪ Modelo cliente-servidor; ▪ Definido e ”coordenado” pela W3C; ▪ Está na versão HTTP/2, embora a maioria ainda utilize a versão HTTP/1.1; ▪ Se baseia em URIs; ▪ A base da Web como conhecemos atualmente.
  • 8. CARACTERÍSTICAS DO PROTOCOLO HTTP ▪ Protocolo cliente-servidor ▪ O tráfego de informações ocorre em uma via dupla entre o cliente (quem solicita alguma coisa) e o servidor (quem deve prover essa coisa). ▪ A solicitação do cliente é chamada de request; ▪ A resposta do servidor é chamada de response. Cliente Rede Servidor Request Response
  • 9. CARACTERÍSTICAS DO PROTOCOLO HTTP ▪ O protocolo não é ”keep-alive” por padrão ▪ Quando o ciclo Request/Response se encerra a conexão também é encerrada (mas dá pra manter com keep-alive); ▪ As conexões são independentes ▪ Uma conexão não ”se conecta” ou conhece outras conexões ▪ Por decorrência, o protocolo HTTP é stateless ▪ Se a conexão não é mantida e as conexões são independentes, como guardar informações?
  • 10. CARACTERÍSTICAS DO PROTOCOLO HTTP ▪ O protocolo HTTP é semântico ▪ Uma URI pode responder das mais variadas maneiras dependendo da semântica da requisição; ▪ A natureza dos requests é definida pelo verbo HTTP; ▪ A natureza dos responses é definida pelo status HTTP; ▪ Desenvolvedores que precisam trafegar dados através do protocolo HTTP DEVEM saber destes conceitos.
  • 11. CARACTERÍSTICAS DO PROTOCOLO HTTP ▪ Principais verbos HTTP Verbo HTTP Semântica Exemplos GET Recuperação de informações no servidor Uma consulta a uma tabela POST Inserção de informações no servidor A ação de inserção em um cadastro PUT Alteração de informações no servidor A ação de alteração em um cadastro DELETE Deleção de recursos no servidor A ação de deleção em um cadastro
  • 12. CARACTERÍSTICAS DO PROTOCOLO HTTP ▪ Principais status HTTP Status HTTP Semântica Exemplos 1xx Informação: notificação do cliente de que a requisição está sendo processada 100 (Continue), 101 (Switching Protocols)... 2xx Sucesso: a requisição foi processada com sucesso 200 (OK), 202 (Accepted), 206 (Partial Content)... 3xx Redirecionamento: uma ação adicional deve ser realizada para completar a requisição 302 (Found), 305 (Use Proxy), 307 (Temporary Redirect)... 4xx Erro: a requisição não pôde ser atendida 404 (Not Found), 406 (Not Acceptable), 410 (Gone)... 5xx Erro no servidor: a requisição era válida, mas o servidor encontrou um erro ao processá-la 502 (Bad Gateway), 500 (Internal Server Error), 599 (Network Connect Timeout)...
  • 14. SOAP: O AVÔ DAS INTERFACES WEB ▪ Simple Object Access Protocol – Protocolo de Acesso Simples a Objetos; ▪ Definido como protocolo por Dave Winer, Don Box, Bob Atkinson, and Mohsen Al-Ghosein (Microsoft); ▪ Fortemente baseado em XML; ▪ Se utiliza de vários protocolos de transmissão, pois a transmissão é transparente ▪ Geralmente é baseado em RPC sob HTTP; ▪ É (bem) usado até hoje (e acredito que vá continuar a ser utilizado por um bom tempo...)
  • 15. SOAP: O AVÔ DAS INTERFACES WEB ▪ Estrutura de uma requisição SOAP Requisição - Cliente Rede Servidor Request Response Envelope SOAP SOAP Header SOAP Body Envelope SOAP SOAP Header SOAP Body SOAP Fault Chamada RPC
  • 16. SOAP: O AVÔ DAS INTERFACES WEB ▪ Vantagens ▪ O formato de transporte de dados fica transparente no envelope; ▪ Fácil integração com demais tecnologias por se basear em XML; ▪ As chamadas RPC podem tornar os serviços expostos mais ”claros”; ▪ Provê mais ”segurança” pelos mecanismos característicos do XML. ▪ Desvantagens; ▪ Justamente ser baseado em XML: processamento é muito pesado; ▪ Exige uma stack mais complexa; ▪ Verbosidade excessiva
  • 17. EIS QUE SURGE UM HERÓI...
  • 18. REST: O ”CARA” DO MOMENTO ▪ É um modelo arquitetural ▪ Não é tecnologia! ▪ Não é framework! ▪ Não é linguagem! ▪ Criado por Roy Fielding ▪ Um dos criadores do protocolo HTTP ▪ Visa utilizar o protocolo HTTP de maneira mais ”efetiva” ▪ Foco em semântica; ▪ Transações mais leves
  • 19. PILARES PARA UMA API REST ▪ Trata-se de um modelo stateless (HTTP) ▪ Trata-se de um modelo cliente-servidor (HTTP) ▪ Trata-se de uma representação que deve ser ”cacheável” (HTTP) ▪ É um princípio que é transparente à tecnologia/linguagem/framework (HTTP) ▪ É baseado em recursos ▪ Pode transmitir dados em qualquer formato!
  • 20. ”PERA” AÍ! PRA SER REST, NÃO TENHO QUE USAR JSON!??
  • 21. A VELHA ”TRETA”: XML x JSON
  • 22. UMA API REST PODE RETORNAR O QUE QUISER! ▪ ”Bora” usar o Content Negotiation! ☺
  • 23. REST x RPC (SOAP) REST RPC/SOAP Fundação em recursos Fundação em serviços GET /usuarios /usuarios/getUsuarios POST /usuarios /usuarios/inserirUsuario PUT /usuarios/{id} /usuarios/atualizarUsuario?id={id} (ou no SOAP body) DELETE /usuarios/{id} /usuarios/deletarUsuario?id={id} (ou no SOAP body) GET /usuarios/porNome/{nome} /usuarios/getUsuariosPorNome?nome={nome} (ou no SOAP body)
  • 24. O ”CALCANHAR DE AQUILES”: HATEOAS ▪ Hypermedia as the Engine of Application State – Hipermídia como Mecanismo de Estado da Aplicação ▪ Sétima arte do REST: sem ele, você não está utilizando REST direito ▪ Os recursos não são simplesmente tráfego de dados! ▪ Eles também devem fornecer que tipo de ações podem ser realizada com eles ▪ Hypermedia Driven Application (HDA) ▪ Auxilia no processo de escalabilidade e interface única.
  • 25. O ”CALCANHAR DE AQUILES”: HATEOAS ▪ Um problema grave! JSON não dá suporte ”natural” a hiperlinks como o XML! ▪ Solução no JSON: representação através de um recurso adicional…
  • 26. REPRESENTAÇÕES DE RECURSOS BASEADOS NO HATEOAS XML HTTP/1.1 200 OK Content-Type: application/xml [...] <?xml version="1.0"?> <account rel=”_self" href="https://bank.example.com/account/12345"> <account_number>12345</account_number> <balance currency="usd">-25.00</balance> <link rel="deposit” href="https://bank.example.com/account/12345/deposit" /> </account>
  • 27. REPRESENTAÇÕES DE RECURSOS BASEADOS NO HATEOAS JSON HTTP/1.1 200 OK Content-Type: application/json [...] { "account_number": 12345, "balance": { "currency": "usd” } "links": [{ "rel": "deposit", "href": "https://bank.example.com/account/12345/deposit" }, { "rel": ”_self", "href": "https://bank.example.com/account/12345" }] }