BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias GraphQL: A Linguagem de consulta de dados open source do Facebook

GraphQL: A Linguagem de consulta de dados open source do Facebook

O Facebook abriu o código da linguagem que alimenta centenas de bilhões de chamadas de API por dia permitindo a formação de uma comunidade em torno da linguagem em graphql.org.

Uma consulta com o GraphQL é basicamente uma cadeia de caracteres que é enviada para o servidor, independentemente da complexidade do esquema de dados. O servidor responde em JSON. O GraphQL é fortemente tipado, evita versionamento e fornece a capacidade de evoluir uma consulta facilmente com a evolução de dados.

O InfoQ.com conversou com Lee Byron, um desenvolvedor no Facebook e um dos colaboradores originais do GraphQL.

InfoQ: O GraphQL já existe há alguns anos. Conte um pouco da história e de como a incursão do Facebook na computação móvel levou a adoção do GraphQL?

Lee Byron: A origem do facebook como um site está profundamente enraizada na arquitetura técnica inicial. Até 2012, a Feed de Notícias só poderia ser solicitada e entregue em HTML dos nossos servidores. Durante o esforço para reconstruir do Feed de Notícias com exibição nativa no iOS tivemos que rever essa arquitetura para obter dados brutos.

Começamos com um sistema que se parecia muito com um serviço tradicional RESTful, mas encontramos dificuldades para usá-lo no desenvolvimento iOS, e percebemos o conflito entre o desejo de carregar toda informação em uma única requisição e manter os recursos REST bem isolados.

Em particular histórias do Feed de Notícias que são ações ou agregações de outras histórias do Feed de Notícias (que poderiam ser compartilhamentos ou agregações de outras histórias do Feed de Notícias) nos obrigou a enfrentar esta questão e a repensar a forma como solicitamos os dados.

Em última análise, os esforços simultâneos de descobrir como os dados brutos do Feed de Notícias devem ser moldados e determinar a melhor maneira de solicitar dados através das redes móveis nos levou o GraphQL.

InfoQ: Os dados são intrinsecamente hierárquicos e são um grafo de relacionamentos. O objetivo central do GraphQL é expressar esta relação? Quais são os outros princípios da linguagem?

Lee Byron: Certamente achamos estranho como o código do nosso aplicativo no servidor tratava os dados como objetos e relacionamentos encapsulados em uma representação tabular para mais tarde serem convertidos em objetos e relacionamentos pelo código do cliente móvel. Uma motivação precoce para o GraphQL era expor os dados do servidor de forma clara e fácil de usar.

O GraphQL tem mais alguns princípios importantes. Foi projetado para satisfazer aos requisitos de visualização em produtos e aos desenvolvedores que os constroem, ao invés de modelar um banco de dados ou semânticas de transporte. Isto ajuda a tornar o GraphQL fácil de aprender e de utilizar, mas também abstrai qualquer base de dados particular ou estrutura de transporte permitindo que seja usado de diferentes formas. É também forte e estaticamente tipada, o que ajuda a incentivar a disciplina em torno do design da informação, e apoia uma série de ferramentas interessantes como a verificação de erros, a integração com IDEs e a geração de código.

InfoQ: O formato de dados no servidor ou o armazenamento de dados no servidor tem algum impacto no GraphQL?

Lee Byron: Isso não existe. O GraphQL raramente faz interface direta com mecanismos de armazenamento de dados como MySQL ou Redis. Em vez disso o GraphQL possui interfaces com códigos existentes nos aplicativos. Pode-se pensar no GraphQL como uma espécie de RPC aninhado que chama funções em um servidor de aplicação.

InfoQ: O GraphQL é centralizada para ajudar os desenvolvedores de interface do usuário? O REST e o JSON continuam relevantes e como é que a GraphQL pode ajudar os desenvolvedores de middleware que não se preocupam com interface do usuário?

Lee Byron: Acredito que é um produto centralizado, que pode ajudar muito mais do que apenas aos desenvolvedores de interface do usuário. O GraphQL tem sido muito poderoso devido possuir maior clareza no código no servidor do Facebook. O JSON é definitivamente ainda relevante e é o principal meio de transporte para a GraphQL. Quanto ao REST, o GraphQL substituiu seu uso no Facebook na construção de produtos, no entanto, o REST continua sendo uma ferramenta útil para fornecer APIs públicas.

InfoQ: Qual é o servidor da GraphQL? Explique a tipagem forte e o que está previsto para o GraphQL. O que está faltando hoje?

Lee Byron: O servidor GraphQL é relativamente um conjunto de código pequeno e é responsável por algumas coisas. Por exemplo, fornece utilitários para definir o tipo de sistema e como interagir com o código do servidor. Também aceita e valida consultas GraphQL com segurança e sem ambiguidade para depois serem executadas dentro do sistema de tipos definido. Então é claro que executa a consulta pelo telefone, assim como definido dentro do sistema ao manusear coisa de forma assíncrona, paralelismo e captura de erro.

O roadmap para o futuro tem duas características principais. Em primeiro lugar, melhores ferramentas para os desenvolvedores para realizar tarefas como geração de código e gerenciamento de consultas. O Relay é nossa ferramenta principal e mais importante para os clientes. Em segundo lugar, a melhora do suporte para streaming e push de dados no GraphQL. Temos explorado estas áreas no Facebook e estamos animados para compartilhar nossas experiências de sucesso no futuro.

InfoQ: Além do Facebook, que empresas usam o GraphQL e quão robusta é a comunidade? O que é Nuclide? A que outras ferramentas os desenvolvedores devem prestar atenção?

 

Lee Byron: A GraphQL ainda é uma tecnologia emergente. Lançamos um preview do GraphQL há alguns meses atrás, deste então vimos muito interesse de empresas grandes e pequenas. A Badger Red, uma consultoria sediada no Reino Unido, tem usado GraphQL na criação de aplicativos para o Financial Times. Reindex.io é uma empresa nova oferece GraphQL como serviço. A comunidade não está apenas usando a GraphQL, mas ajudando a construí-la. Lançamos uma versão do GraphQL para JavaScript uns meses atrás e deste então os membros da Comunidade têm construído versão do GraphQL para Java, Ruby, Scala, Go, .NET e Pyton. Estou muito feliz com o progresso em um curto espaço de tempo.

Nuclide é a IDE do Facebook desenvolvida com React Native, construída com o editor Atom do Github. React, Relay, e React Native são ferramentas realmente interessantes que oferecem nova perspectiva sobre a engenharia de produto. DataLoader é outra ferramenta que publicamos recentemente que capta um padrão que usamos no facebook há anos e tem nos ajudado a construir servidores de GraphQL eficientes.

Mais informações sobre o GraphQL e como começar podem ser encontradas aqui.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT