Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introdução a fetch API

Introdução a fetch API

As requisições HTTP assíncronas revolucionaram as aplicações web há pouco mais de uma década com o AJAX. Porém, a API XMLHttpRequest nunca foi muito prática e era preferível utilizar abstrações de bibliotecas como jQuery. A introdução da API fetch permite trazer a simplicidade das bibliotecas para o JavaScript puro de uma forma prática e moderna. Nessa palestra será mostrada o funcionamento de fetch, como a utilização de promises torna o código mais expressivo, o funcionamento de Headers, Request e Response, manipulação de JSON e o suporte entre os navegadores e polyfills.

Marcel dos Santos

September 12, 2017
Tweet

More Decks by Marcel dos Santos

Other Decks in Programming

Transcript

  1. !// create post request using form data fetch('https:!//httpbin.org/post', { method:

    'post', body: JSON.stringify({ name: 'John Doe', email: '[email protected]', }) }) .then(response !=> response.json()) .then(json !=> console.log('form data (params)', json)); !// create post request using form data fetch('https:!//httpbin.org/post', { method: 'post', body: new FormData(document.getElementById('form-login')) }) .then(response !=> response.json()) .then(json !=> console.log('form data (html)', json)); Marcel Gonçalves dos Santos @marcelgsantos { } Fetch API Introdução a
  2. Exemplo 02 !// create a fetch request, returns a promise

    var req = fetch('https:!//httpbin.org/headers'); !// resolve a promise, print success and status !// text and show json response req.then(function(response) { console.log(‘response (props)’, 
 response.ok, response.statusText); return response.json(); }).then(function(json) { console.log('json response', json); });
  3. Exemplo 03 !// resolve a rejected promise and print error

    fetch('https:!//httpbin.org/headers') .then(function(response) { return response.json(); }).then(function(json) { console.log('json response', json); }).catch(function(error) { console.log('error', error); });
  4. Exemplo 04 !// create a new header using constructor var

    header = new Headers({ 'Content-Type': 'text/plain', 'X-Token': 'my-precious-token' }); console.log('headers', header);
  5. Exemplo 05 !// create a request object var request =

    new Request('https:!//httpbin.org/delay/1', { method: 'GET', mode: 'cors', redirect: 'follow', headers: new Headers({ 'Content-Type': 'text/plain' }) }); console.log('request', request); !// Request {!!...} !// create a fetch using a request object fetch(request) .then(response !=> console.log('response', response));
  6. Exemplo 06 !// create response object var response = new

    Response('hello!', { ok: false, status: 404, statusText: 'NOT FOUND', url: '/' }); console.log('response', response); 
 !// Response {!!...}
  7. Exemplo 07 !// clone response object var cloneObject = newResponse.clone();

    console.log('cloned response', cloneObject); !// Response {!!...}
  8. Exemplo 08 !// response object are returning json fetch('https:!//httpbin.org/ip') .then(response

    !=> response.json()) .then(json !=> console.log('response (json)', json)); !// response object are returning text fetch('https:!//httpbin.org/ip') .then(response !=> response.text()) .then(text !=> console.log('response (text)', text));
  9. Exemplo 09 !// response object are returning blob fetch('https:!//httpbin.org/image/png') .then(response

    !=> response.blob()) .then(blob !=> { console.log('response (blob)', blob); document.querySelector('img').src = URL.createObjectURL(blob); });
  10. Exemplo 10 !// create post request using form data fetch('https:!//httpbin.org/post',

    { method: 'post', body: JSON.stringify({ name: 'John Doe', email: '[email protected]', }) }) .then(response !=> response.json()) .then(json !=> console.log('form data', json));
  11. Exemplo 11 !// create post request using form data fetch('https:!//httpbin.org/post',

    { method: 'post', body: new FormData(document.getElementById('form-login')) }) .then(response !=> response.json()) .then(json !=> console.log('form data (html)', json));
  12. Exemplo 12 !// use async and await (async function() {

    let response = await fetch('https:!//httpbin.org/ip'); let json = await response.json(); console.log(json); })();
  13. Exemplo 13 !// create requests using axios library axios.get('https:!//httpbin.org/ip') .then(response

    !=> console.log(response)); axios.get('https:!//httpbin.org/status/500') .catch(error !=> console.log(error));
  14. Exemplo 14 !// create multiple requests Promise.all([ fetch('https:!//httpbin.org/delay/5') .then(response !=>

    response.json()), fetch('https:!//httpbin.org/delay/2') .then(response !=> response.json()) ]).then(values !=> console.log(values[0], values[1]));
  15. Desvantagens * utilização de polyfill para navegadores antigos * bibliotecas

    como axios são mais expressivas * não implementa cancelamento
  16. Referências * https:/ /davidwalsh.name/fetch * https:/ /fetch.spec.whatwg.org * https:/ /developer.mozilla.org/en-US/

    docs/Web/API/Fetch_API * https:/ /braziljs.org/blog/fetch-api-e- o-javascript/ * https:/ /github.com/github/fetch * http:/ /caniuse.com/#feat=fetch