Skip to content

Requisições assíncronas (AJAX) para API Github utilizando XMLHttpRequest, Promises e a API Axios. :octocat:

License

Notifications You must be signed in to change notification settings

Gwolner/GithubAvatar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Github avatar

Aplicação web que foca no uso de diferentes formas de requisições assíncronas (AJAX) utilizando uma API do Github de modo que, ao fornecer o nome do usuário, seu avatar seja exibido.

Proposta

O intuito da aplicação é mostrar que apenas o avatar é carregado, sem interferir nos demais elementos presentes na página, como ocorre em alguns sites em que toda a página é recarregada para atualizar um único conteúdo. A aplicação é uma adaptação das prática da Rocketseat sobre AJAX.

Os tipos de requisições assíncronas usadas para exibir o avatar fazem uso do XMLHttpRequest, Promises e API Axios em momentos distíntos e de forma editável, de modo que se possa observar o comportamento de cada tipos.

API Github

O avatar será disponibilizado pela API Github quando forem feitas requisições para a URL abaixo:

https://api.github.com/users/[username]

Onde o [username] deve ser substituido pelo nome de um usuário válido na plataforma.

A consulta retornará várias informações além do avatar. Entratanto, para esta aplicação a imagem de usuário é sufieinte, a fim de não expor outros dados do usuário.

Alternando entre os tipos

No arquivo index.html, antes do fechamento da tag body, existe uma área reservada para importar o arquivo AJAX que se deseja utilizar para carregar o avatar.

17. <!-- Importações JS abaixo-->
18. 
19. 

A linha 18 será usada para importar os arquivos avatarXhr.js e avatarPromises.js, já o arquivo

  • Uso do XMLHttpRequest

Na linha 18, adicionar o arquivo avatarXhr.js.

<script src="avatarXhr.js"></script>
  • Uso das Promises

Na linha 18, adicionar o arquivo avatarXhr.js.

<script src="avatarPromises.js"></script>
  • Usando API Axios

Importar o arquivo axios.min.js na linha 18 e o arquivo avatarAxios.js na linha 19 conforme abaixo.

<script src='https://unpkg.com/axios/dist/axios.min.js'></script>
<script src="avatarXhr.js"></script>

Essa ordem é importante, pois primeiro deverá ser carregado a API Axios para depois ser carregado o código que faz uso dela.

Entendendo o código

Classe XMLHttpRequest

Objeto que dá acesso a funcionalidade do AJAX.

var xhr = new XMLHttpRequest();

Monta a requisição de dados do servidor. Primeiro o método e segundo a URL.

xhr.open("GET", "https://api.github.com/users/gwolner");

Envio da requisição montada acima. Como não vai enviar parâmetros adicionais, usá-se null.

xhr.send(null);

Monitora mudança de status da requisição assincrona:

xhr.onreadystatechange = function() { //Acionar uma função quando o status da requisição for atualizado.
  if (xhr.readyState === 4) { //4 é o valor de quando há resposta do servidor.
    console.log(JSON.parse(xhr.responseText)); //O xhr.responseText retorna um JSON.
  }
};

Classe Promises

Cria-se uma função normal, mas com um return da classe Promise.

let myPromise = function() {
  return new Promise(function(resolve, reject) {
    
    //Código dentro da Promise
    
  });
}

O resolve e reject são funções referenciadas passadas como parâmetro.

O código dentro da Promise é um XMLHttpRequest, porém no seu If/Else usa-se as funções resolve e reject para tratar sucesso e falha, respectivamente, durante a requisição.

xhr.onreadystatechange = function() {
    if (xhr.readyState === 4) {
        if (xhr.status === 200) {
            resolve("Requisição feita com sucesso!");
        } else {
            reject("Falha na requisição!");
        }
    }
};

Observe que a Promise foi criada, mas não chamada. Chamamos a Promisse como qualquer outra função.

myPromise()

Como mencionado anteriormente, a Promise lida com sucesso e falha e para isso a função chamada precisa fazer uso dos métodos THEN e CATCH.

myPromise()
    .then(function(resolve) {
        console.log("Avatar exibido!");
    })
    .catch(function(error) {
        console.warn("Nome de usuário não encontrado!");
    });

O método THEN trata do caso de sucesso (observe que ele tem uma referência à função resolve) e o CATCH trata dos casos de falha (a referência à função reject não é explícita, pois recebe o nome de "error" e não de "reject").

API Axios

Em vez de uma função, chama-se a API Axios, seguida do método de envio que se deseja usar (GET, POST, HEAD, etc) e passando a URL da requisição como parâmetro.

axios.get("https://api.github.com/users/"+username)
  .then(function(resolve){
      console.log("Avatar exibido!");
  })
  .catch(function(error){
      alert("Nome de usuário não encontrado!");
  });

Para mais parâmetros no get(), deve-se usar vírgula após a URL informada.

Analisando requisições

Essa análise pode ser feita dentro do navagador, diretamente na Área do Desenvolvedor (F12).

No Google Chrome

Pode-se verificar a requisição na aba Network, onde o nome da requisição será exibido. Próximo a ela deverá ter a aba Hearders exibindo o status da requisição e na aba Preview pode-se ver a resposta do servidor. Navegue pelas abas para visualiar mais detalhes da requisição.

No Mozilla Firefox

Acesse a aba Rede, verifique se a opção All está selecionada e então clique sobre o nome da requisição. A aba Hearders estará marcada por defaul e na aba Response é possível visualizar a resposta do servidor. Navegue pelas abas para visualiar mais detalhes da requisição.

About

Requisições assíncronas (AJAX) para API Github utilizando XMLHttpRequest, Promises e a API Axios. :octocat:

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published