SlideShare uma empresa Scribd logo
1 de 15
Como tratar múltiplos
JSONPs com o mesmo
callback name?
Vinicius Kiatkoski Neves
@viniciuskneves
Quem sou eu?
● Formado em Engenharia de Controle e
Automação - UFSC
● Desenvolvedor @ Chaordic
● Organizador do VueFloripa
● Amante de Javascript, cerveja e churrasco
no parque
● Minha primeira talk =]
2
Descrição do
problema
● Consumir API do cliente (preço dos
produtos) entre diversos serviços
● API só poderia ser usada com JSONP
(decisão do cliente)
● Outros parceiros usavam a mesma API
● Callback do JSONP não era customizável
3
O que é JSONP?
● Maneira de enviar um JSON sem se preocupar com problemas de CORS
○ JSONP suportar apenas GET
○ CORS suporta todos os verbos HTTP
○ CORS somente IE10+, IE8&9 tem suporte parcial (XDomainRequest)
○ XDomainRequest não aceita HTTP Headers
○ CORS → Maioria bloqueia OPTIONS que é essencial para o funcionamento
○ Solução para problemas na época do IE7
4
● Tag <script> não tem restrição de CORS
● Como funciona:
○ Criamos globalmente uma função que é o callback do JSONP
○ Adicionamos uma tag <script> com source sendo a URL da API com o nome do callback criado
○ Assim que a request terminar, o script irá executar o callback com os dados desejados
O que é JSONP?
5
jQuery e outras
libs encapsulam
tudo
6
Descrição do
problema
● Consumir API do cliente (preço dos
produtos) entre diversos serviços
● API só poderia ser usada com JSONP
(decisão do cliente)
● Outros parceiros usavam a mesma API
● Callback do JSONP não era customizável
7
Qual o problema?
Funções com o mesmo nome no mesmo contexto.
8
Qual a solução?
Múltiplos contextos para poder ter a mesma
função (callback) espalhada entre eles.
9
Como fazer isso no
browser sem abrir
várias abas do
navegador? =]
10
<iframe>
“From the DOM iframe element, scripts can get access to the
window object of the included HTML page via the
contentWindow property.” - MDN
11
Qual a ideia?
● Para cada chamada JSONP, criar um novo <iframe>
● Criar o callback do JSONP dentro do window do <iframe>
● Inserir o script (fazer a chamada) do JSONP dentro do <iframe>
● Do callback criado eu consigo acessar o window anterior para manipular o que for
necessário
12
Resultado dos contextos criados
13
window.top
iframe
contentWindow.X = function (data) {...}
iframe
contentWindow.X = function (data) {...}
Resultado ● Não preciso me preocupar com outros
serviços (internos ou concorrentes)
● Tudo ocorre em paralelo sem problema
algum (melhoramos performance)
● Evitamos um desgaste com o cliente (que
já estava se prolongando a um tempo)
● Conceito simples e coisas isoladas, fácil de
outros membros darem manutenção
14
Obrigado.
15
@viniciuskneves
http://bit.ly/2zrhLOV

Mais conteúdo relacionado

Mais procurados

T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
Carlos Santos
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014
Adler Medrado
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
Carlos Santos
 
Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful API
Fernando Camargo
 
Java script vs vb script
Java script vs vb scriptJava script vs vb script
Java script vs vb script
Nielson Santana
 

Mais procurados (20)

T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)T03_LM3: Javascript (2013-2014)
T03_LM3: Javascript (2013-2014)
 
Precisamos falar sobre MERN stack
Precisamos falar sobre MERN stackPrecisamos falar sobre MERN stack
Precisamos falar sobre MERN stack
 
Design builder em testes
Design builder em testesDesign builder em testes
Design builder em testes
 
Nodejs justdigital
Nodejs justdigitalNodejs justdigital
Nodejs justdigital
 
Phpreact flisol-fb-2014
Phpreact flisol-fb-2014Phpreact flisol-fb-2014
Phpreact flisol-fb-2014
 
Node.js
Node.jsNode.js
Node.js
 
Django Channels - Aplicações real time com Django
Django Channels - Aplicações real time com DjangoDjango Channels - Aplicações real time com Django
Django Channels - Aplicações real time com Django
 
LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04LabMM3 - Aula teórica 04
LabMM3 - Aula teórica 04
 
O Poder do JavaScript
O Poder do JavaScriptO Poder do JavaScript
O Poder do JavaScript
 
Vagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizado
 
PHP GUIA DE REFERÊNCIA - 02 - USANDO PHP
PHP GUIA DE REFERÊNCIA - 02 - USANDO PHPPHP GUIA DE REFERÊNCIA - 02 - USANDO PHP
PHP GUIA DE REFERÊNCIA - 02 - USANDO PHP
 
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
 
Desenvolvendo com IONIC
Desenvolvendo com IONICDesenvolvendo com IONIC
Desenvolvendo com IONIC
 
PhantomJS - O Fantasminha Camarada
PhantomJS - O Fantasminha CamaradaPhantomJS - O Fantasminha Camarada
PhantomJS - O Fantasminha Camarada
 
Web assembly
Web assemblyWeb assembly
Web assembly
 
Deixando de ser moleque com PHP
Deixando de ser moleque com PHPDeixando de ser moleque com PHP
Deixando de ser moleque com PHP
 
Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful API
 
Entendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHPEntendendo Conceitos Caching com PHP
Entendendo Conceitos Caching com PHP
 
Java script vs vb script
Java script vs vb scriptJava script vs vb script
Java script vs vb script
 
Meetup #17
Meetup #17Meetup #17
Meetup #17
 

Semelhante a Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJS

Adaptabilidade Web 2
Adaptabilidade Web 2Adaptabilidade Web 2
Adaptabilidade Web 2
guest0516e762
 

Semelhante a Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJS (20)

Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful API
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)
 
FISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHPFISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHP
 
Front end architecture
Front end architectureFront end architecture
Front end architecture
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
React Native - Produtividade e eficiência no desenvolvimento mobile
React Native - Produtividade e eficiência no desenvolvimento mobileReact Native - Produtividade e eficiência no desenvolvimento mobile
React Native - Produtividade e eficiência no desenvolvimento mobile
 
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout  Tempo Real Eventos - Nodejs - Os Primeiros PassosHangout  Tempo Real Eventos - Nodejs - Os Primeiros Passos
Hangout Tempo Real Eventos - Nodejs - Os Primeiros Passos
 
Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?Node.js - Devo adotar na minha empresa?
Node.js - Devo adotar na minha empresa?
 
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
Melhorando o desempenho do seu WordPress [WordCamp Porto Alegre 2015]
 
IBM - Curso Node + Angular - Aula 01
IBM - Curso Node + Angular - Aula 01IBM - Curso Node + Angular - Aula 01
IBM - Curso Node + Angular - Aula 01
 
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
TDC2018SP | Trilha PHP Essencial - O que nao fazer ao atualizar para o PHP 7
 
Intodução ao React
Intodução ao ReactIntodução ao React
Intodução ao React
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Webservices e Computação em Nuvem com PHP
Webservices e Computação em Nuvem com PHPWebservices e Computação em Nuvem com PHP
Webservices e Computação em Nuvem com PHP
 
Adaptabilidade Web 2
Adaptabilidade Web 2Adaptabilidade Web 2
Adaptabilidade Web 2
 
9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem
 
React Native na globo.com
React Native na globo.comReact Native na globo.com
React Native na globo.com
 
Node js
Node jsNode js
Node js
 
AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!AJAX?? Não!! Asynchronous Javascript and... JSON!!
AJAX?? Não!! Asynchronous Javascript and... JSON!!
 

Último

Último (8)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Como tratar múltiplos JSONps com o mesmo callback name? - FloripaJS

  • 1. Como tratar múltiplos JSONPs com o mesmo callback name? Vinicius Kiatkoski Neves @viniciuskneves
  • 2. Quem sou eu? ● Formado em Engenharia de Controle e Automação - UFSC ● Desenvolvedor @ Chaordic ● Organizador do VueFloripa ● Amante de Javascript, cerveja e churrasco no parque ● Minha primeira talk =] 2
  • 3. Descrição do problema ● Consumir API do cliente (preço dos produtos) entre diversos serviços ● API só poderia ser usada com JSONP (decisão do cliente) ● Outros parceiros usavam a mesma API ● Callback do JSONP não era customizável 3
  • 4. O que é JSONP? ● Maneira de enviar um JSON sem se preocupar com problemas de CORS ○ JSONP suportar apenas GET ○ CORS suporta todos os verbos HTTP ○ CORS somente IE10+, IE8&9 tem suporte parcial (XDomainRequest) ○ XDomainRequest não aceita HTTP Headers ○ CORS → Maioria bloqueia OPTIONS que é essencial para o funcionamento ○ Solução para problemas na época do IE7 4
  • 5. ● Tag <script> não tem restrição de CORS ● Como funciona: ○ Criamos globalmente uma função que é o callback do JSONP ○ Adicionamos uma tag <script> com source sendo a URL da API com o nome do callback criado ○ Assim que a request terminar, o script irá executar o callback com os dados desejados O que é JSONP? 5
  • 6. jQuery e outras libs encapsulam tudo 6
  • 7. Descrição do problema ● Consumir API do cliente (preço dos produtos) entre diversos serviços ● API só poderia ser usada com JSONP (decisão do cliente) ● Outros parceiros usavam a mesma API ● Callback do JSONP não era customizável 7
  • 8. Qual o problema? Funções com o mesmo nome no mesmo contexto. 8
  • 9. Qual a solução? Múltiplos contextos para poder ter a mesma função (callback) espalhada entre eles. 9
  • 10. Como fazer isso no browser sem abrir várias abas do navegador? =] 10
  • 11. <iframe> “From the DOM iframe element, scripts can get access to the window object of the included HTML page via the contentWindow property.” - MDN 11
  • 12. Qual a ideia? ● Para cada chamada JSONP, criar um novo <iframe> ● Criar o callback do JSONP dentro do window do <iframe> ● Inserir o script (fazer a chamada) do JSONP dentro do <iframe> ● Do callback criado eu consigo acessar o window anterior para manipular o que for necessário 12
  • 13. Resultado dos contextos criados 13 window.top iframe contentWindow.X = function (data) {...} iframe contentWindow.X = function (data) {...}
  • 14. Resultado ● Não preciso me preocupar com outros serviços (internos ou concorrentes) ● Tudo ocorre em paralelo sem problema algum (melhoramos performance) ● Evitamos um desgaste com o cliente (que já estava se prolongando a um tempo) ● Conceito simples e coisas isoladas, fácil de outros membros darem manutenção 14

Notas do Editor

  1. O que é a Chaordic? Com o que trabalhamos?
  2. Explicar JSONP em seguida
  3. CORS → Headers, Verbos HTTP...
  4. Twitter + Github + link Medium