Git Product home page Git Product logo

natasha-m-oliveira / github-blog Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 537 KB

Projeto desenvolvido no bootcamp Ignite da trilha React.js da Rocketseat. Trata-se de uma aplicação web a qual simula um blog através das issues do repositório.

Home Page: https://github-blog-alpha-one.vercel.app

HTML 2.72% TypeScript 97.18% Shell 0.10%
react react-markdown react-syntax-highlighter styled-components swr react-sixt for-portfolio

github-blog's Issues

Axios - um cliente HTTP Full Stack

👋 Introdução

Axios é um cliente HTTP baseado em Promises para fazer requisições. Pode ser utilizado tanto no navegador quando no Node.js.

É um projeto open source, disponível no Github, tem 77 mil stars e 7 mil forks! Muito utilizado e está sendo bem mantido pela comunidade.

Banner

👌 Características

  • Por baixo dos panos faz requisições Ajax no browser via XMLHttpRequests;
  • Faz requisições http no Node.js;
  • Suporta a API de Promises;
  • Intercepta requisições e respostas (request & response);
  • Cancela requisições;
  • Transforma os dados em JSON automaticamente;
  • No lado cliente suporta a proteção contra XRSF;
  • Transforma os dados da requisição e da resposta.

⌨️ Instalação

Usando NPM:

npm install axios

Usando YARN:

yarn add axios

⚙️ Criando uma configuração reutilizável

Com Axios podemos fazer algumas configurações básicas, criar uma baseURL para não precisarmos digitar em cada requisição o endereço do servidor, informando apenas a rota e seus parâmetros.

Geralmente criamos uma pasta services e um arquivo api.js.

Colocamos a configuração abaixo:

src/services/api.js:

import axios from "axios";

// Pode ser algum servidor executando localmente: 
// http://localhost:3000

const api = axios.create({
  baseURL: "https://api.github.com",
});

export default api;

Esse arquivo pode ser reutilizado em projetos com monorepo, com isso o mesmo arquivo poderá será utilizado no Front End, Mobile e Desktop.

Ao invés de criarmos três arquivos em cada projeto, criamos apenas um e compartilhamos entre os projetos.

👨‍💻 Como utilizar o Axios

Para utilizar basta importar o arquivo api.js no arquivo que irá fazer as requisições:

qualquerArquivo.js:

import api from '../services/api'

// Buscando usuários do github
api.get("users/tgmarinho")
  .then((response) =doSomething(response.data))
  .catch((err) ={
    console.error("ops! ocorreu um erro" + err);
  });

// Enviando um Post na rota posts com os parâmetros image, title e content
// Utilizando o método HTTP POST
const response = await api.post("posts", {image, title, content });

// DELETE - Deletando um arquivo por ID
api.delete('files', { id });

// PUT - atualizando apenas o nome
const personUpdated = await api.put(`person/${person.id}`, { name: "Thiago" });

Podemos fazer todos os tipos de requisições HTTP.

Agora ao invés de importar o axios em cada arquivo e usar axios.get("minhaRota") ou axios.post("outraRota"), importamos apenas o arquivo api.js e utilizamos a sintaxe: api.get("minhaRota"), api.delete("outraRota") .

🧗‍♀️ Avançando com Axios

  • Passando o token de autorização nas requisições:

Em requisições que precisam de acessar rotas autenticadas, podemos passar o token da requisição na propriedade Authorization dos headers:

api.defaults.headers.authorization = `Bearer ${token}`;
  • Requisições Simultâneas:

É possível realizar execução de várias requisições simultâneas:

useEffect(() ={
  Promise.all([
    api.get("users/tgmarinho"),
    api.get("users/diego3g"),
    api.get("users/vinifraga")
  ]).then((response) ={
    for (const res of response) {
      const {
        data: { login, bio }
      } = res;

      setUsers((state) =[...state, { login, bio }]);
    }
  });
}, []);

Banner

Interceptadores

  • Podemos criar interceptadores de cada requisição e resposta:
import axios from "axios";

const api = axios.create({
  baseURL: "<https://api.github.com>"
});

let countReq = 0;

// Add a request interceptor
api.interceptors.request.use(
  function (config) {
    if (config.method === "get") {
      ++countReq;
    }
    console.log(
      `Já tivemos ${countReq} requisições do tipo ${config.method.toUpperCase()}`
    );
    return config;
  },
  function (error) {
    // Do something with request error
    return Promise.reject(error);
  }
);

export default api;

/**
Resposta:
Já tivemos 1 requisições do tipo GET 
Já tivemos 2 requisições do tipo GET 
Já tivemos 3 requisições do tipo GET
**/

Exemplo completo: https://codesandbox.io/s/trying-axios-8ezy1

👊 Conclusão

Axios tem se demonstrado bastante versátil, a sua API foi bem projetada. Podemos utilizar a mesma biblioteca em vários ambientes — Front End, Back End, Desktop, Mobile. Isto é, Full Stack, o que agrada bastante.

É uma lib bem leve e uma excelente alternativa à API Fetch do navegador e http do Node.js.

🔗 Links

Alguns exemplos da utilização do Axios:

** Post Original

JavaScript data types and data structures

Programming languages all have built-in data structures, but these often differ from one language to another. This article attempts to list the built-in data structures available in JavaScript and what properties they have. These can be used to build other data structures. Wherever possible, comparisons with other languages are drawn.

Dynamic typing
JavaScript is a loosely typed and dynamic language. Variables in JavaScript are not directly associated with any particular value type, and any variable can be assigned (and re-assigned) values of all types:

let foo = 42;   // foo is now a number
foo = ‘bar’;    // foo is now a string
foo = true;     // foo is now a boolean

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.