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

Introdução ao GraphQL: Uma nova forma de criar ...

Introdução ao GraphQL: Uma nova forma de criar APIs (Mercado Pago)

Esta talk foi apresentada para o time de "Plugins e Partners" do Mercado Pago, em 10/09/2020.

Avatar for Fernando Henriques

Fernando Henriques

September 10, 2020
Tweet

More Decks by Fernando Henriques

Other Decks in Programming

Transcript

  1. Nova forma de criar APIs? Foi criada em 2012 e

    lançada publicamente em 2015, mas...
  2. GraphQL ➔ Criada pelo Facebook ➔ Open-source ➔ Linguagem de

    consulta de dados ➔ Não é um protocolo para APIs, mas funciona como um ➔ Agnóstico: independe de linguagem ou banco de dados ➔ É uma spec! Protocolo para APIs? Padrão arquitetural?
  3. Quem solicita decide o que quer receber (somente o que

    precisa) Essa é a premissa básica, motivo de sua criação
  4. No REST não é assim Em uma API REST é

    preciso criar um novo endpoint para receber uma resposta com estrutura de dados diferente
  5. • Representational State Transfer • Verbos HTTP (GET, POST, PUT,

    DELETE, HEAD…) • Resource based URLs - Endpoint (/movie/10) • RESTful: capacidade de determinado sistema aplicar os conceitos REST REST (ful) API
  6. ★ Baixo custo de mudança ★ Mais poder para o

    front-end Duas grandes vantagens do GraphQL
  7. 1. Single endpoint 2. Well defined contract (tem schema, é

    tipado - o REST é schemaless, não tem contrato) 3. No more overfetching 4. No more underfetching (vários endpoints para uma feature) Conceitos fundamentais do GraphQL
  8. • Documentação: auto-documentação através do Schema ◦ Chamada de introspection

    retorna o Schema • Legibilidade da API: sem “salada” de URLs • Menos tráfego de dados no cliente: payload menor • Tempo de desenvolvimento do back-end focado em regras de negócio e qualidade, e não em “ajudar” o front-end Problemas comuns que o GraphQL resolve
  9. Int: A signed 32‐bit integer Float: A signed double-precision floating-point

    value String: A UTF‐8 character sequence Boolean: True ou false ID: Unique identifier (não legível para humanos) Tipos primitivos Tipos e schema Enum, custom scalar, listas e non-null
  10. ★ Sobrecarga de responsabilidades no front-end funciona para todos os

    times e projetos? ★ Nada impede o dev de escrever (é até fácil) uma query com potencial destrutivo para sua app (ex.: sem paginação) ★ HTTP Cache comprometido GraphQL não é bala de prata