profile picture

GraphQL Intro

06 de outubro de 2023

Onde: Evento interno da ArcoTech

Slides

Código-fonte: https://github.com/mechamobau/books-graphql-example

Esta foi uma palestra apresentada durante o Capítulo de tecnologia na ArcoTech, evento interno com propósito de incentivar a troca de conhecimento entre equipes. Nele foi apresentado o que é GraphQL, sua história, funcionamento e exemplos.

O Facebook anuncia oficialmente em 2007 o suporte nativo do seu site à dispositivos móveis, esta é a matéria do Tech Crunch anunciando. Em 2011. Com a rápida ascensão dos telefones móveis, a versão mobile do Facebook não dá conta da demanda de seus usuários. No documentário é dito que o Mark Zuckerberg disse que a adoção do HTML5 para o Facebook foi a pior descisão da empresa.

Em 2012, o Facebook já ultrapassava a marca de um bilhão de usuários ativos por mês, estabelecendo-se como a rede social mais utilizada mundialmente[1]. No mesmo ano, a Apple lançava o iPhone 5 que recebeu 2 milhões de pedidos em menos de 24 horas[2], mostrando o sucesso que o mobile alcançava entre o público geral. Neste mesmo ano, é decidido que o aplicativo iOS seria refeito do zero. Porém a equipe se depara com diversos problemas, desde o fato de não existir uma API externa para consumo pelo app, até o fato de estruturas como comentários, posts e amizades não estarem abstraídas para consumo via API.

Recomendo muito o documentário da HoneyPot sobre GraphQL:

Baseado nas frutrações anteriores, a equipe iOS junto com a equipe de News Feed se juntou para refazer a API. Nick um dos engenheiros do News Feed lança uma RFC falando sobre uma ideia de como facilitar a integração entre o app e a nova API.

O Nick lança essa RFC propondo como poderia funcionar essa nova linguagem, que ele chama de "SuperGraph", e dois engenheiros se juntam o Lee Byron e Dan Schafer.

Print da RFC aberta pelo Nick explicando uma solução que ele chamava na época de SuperGraph, se tornando o GraphQL

Em nosso exemplo, definimos nosso schema GraphQL de uma forma simples simulando uma aplicação que armazena livros baseados em autores, veja a seguir:

    input NewBookInput {
        title: String!
        author: String!
    }

    input NewAuthorInput {
        name: String!
    }

    type SuccessResponse {
        message: Boolean
    }

    type Author {
        id: ID!
        name: String!
    }

    type Book {
        id: ID!
        title: String
        author: Author
    }

E para definir as queries e mutations, basta usar os tipos Query e Mutation:

    type Query {
        books: [Book]
        book(id: ID!): Book
        authors: [Author]
        author(id: ID!): Author
    }
    
    type Mutation {
        createBook(input: NewBookInput): Book
        createAuthor(input: NewAuthorInput): Author
        deleteAuthor(authorID: String): SuccessResponse
    }

Com isto finalizamos o conteúdo, se gostou manda pra uma pessoa amiga que talvez se interesse por GraphQL e pode me procurar no Twitter (X) @mechamobau. Um abraço!