Apresentando o Tartiflette: uma implementação de código-fonte aberto GraphQL para Python 3.6+

Amigos, na véspera das férias de maio, decidimos não bombardear você com artigos técnicos complicados, por isso achamos material interessante e de mais fácil leitura, cuja tradução estamos felizes em compartilhar com você. Este material queremos coincidir com o lançamento do curso "Web-developer in Python" .

O original pode ser encontrado aqui .



A aquisição do Vivendi dailymotion há três anos foi um ponto de virada para nossa organização. Isso nos permitiu repensar o vetor do nosso trabalho, repensar o próprio trabalho do começo ao fim. Aproveitamos a oportunidade para avaliar o movimento diário em geral, para repensar nossa infraestrutura e, mais importante, a arquitetura de nossos produtos.

No final, a auto-análise confirmou o que já sabíamos: queríamos distribuir geograficamente nossa plataforma e desenvolver APIs , aplicativos móveis e de TV. Isso marcou o abandono da atual estrutura monolítica e a adoção de uma abordagem orientada à API. Este artigo descreve o caminho que seguimos.

Critérios e conceitos de validação

Iniciamos o projeto definindo os critérios da API, que acabaram diminuindo para quatro pontos:

  • Fornecendo bom DX (experiência do desenvolvedor), fácil uso e implementação;
  • O cultivo de uma comunidade sólida e crescente , que permita a agregação e o uso de tecnologia difundida;
  • Comportamento semelhante a um gateway em termos de arquitetura de software , com o objetivo de simplificar a transformação de nossa integração de sistemas de um monólito para SOA (arquitetura orientada a serviços);
  • Capacidade de implementar ferramentas de gerenciamento de API, nomeadamente gerenciamento de API, documentação e acesso a dados.

Em seguida, selecionamos vários modelos de API e testamos vários conceitos para entender sua adequação:

  • API Rest com Swagger
  • API do GraphQL com grafeno
  • API com Falcor



Após testes rigorosos, descobrimos que o GraphQL e suas implementações de grafeno atendiam melhor aos nossos critérios quando comparados a outros modelos. Isso permitiu que nossos desenvolvedores de front-end usassem mais facilmente nossa API e, ao mesmo tempo, simplificassem seu uso em aplicativos clientes (por exemplo, React JS e Apollo Client). Em nossa arquitetura, o GraphQL também é mais simples e mais eficiente como gateway de padrão. No final, finalmente decidimos seguir em frente com o GraphQL e o Graphene.

Caminho para a produção

Em abril de 2017, após um intenso desenvolvimento de seis meses, entramos em produção com nossa API. No verão, trocamos todos os produtos de movimento diário (web, celular e TV) para a API do GraphQL.



Quando escolhemos o GraphQL há três anos, ele ainda estava na versão beta e não alcançou a popularidade que tem hoje. Fomos os primeiros grandes jogadores nessa arena e isso tornou nossa reconstrução interna ainda mais agradável.

Nascimento de Tartiflette

Nos primeiros meses de 2018, após mais de seis meses de uso do grafeno, decidimos dar um passo adiante e escrever nosso próprio mecanismo GraphQL. Isso nos permitiu implementar alguns requisitos que não foram atendidos pelo grafeno. Desenvolvemos critérios para nosso próprio mecanismo. Ele deve:

  • Forneça o melhor DX pensante para desenvolvedores de Python;
  • Use SDL (linguagem de definição de esquema);
  • Use asyncio como um mecanismo de execução independente;

Após quase um ano de desenvolvimento e muitas semanas testando nossa infraestrutura (em média, mais de 100 milhões de chamadas foram processadas por dia), estamos orgulhosos de oferecer à comunidade GraphQL nosso próprio mecanismo Tartiflette de código aberto.

Tartiflette DNA

Tartiflette é uma implementação do GraphQL Server construída em Python 3.6+
O esquema do GraphQL é descrito usando a nova linguagem de definição de esquema (SDL) ;
O desempenho é um elemento essencial do nosso trabalho e isso se reflete na Tartiflette ;
Construído com o Zen of Python em mente. Não é muito complicado.

Olá mundo na tartiflette



import asyncio from tartiflette import Engine, Resolver @Resolver("Query.hello") async def resolver_hello(parent, args, ctx, info): return "hello " + args["name"] async def run(): ttftt = Engine(""" type Query { hello(name: String): String } """) result = await ttftt.execute( query='query { hello(name: "Chuck") }' ) print(result) # {'data': {'hello': 'hello Chuck'}} if __name__ == "__main__": loop = asyncio.get_event_loop() loop.run_until_complete(run()) 

Você pode descobrir sobre as novas funcionalidades no manual em tartiflette.io .

O que acontecerá a seguir com a Tartiflette?

A fonte aberta Tartiflette é apenas o primeiro passo. Aqui estão algumas idéias e planos para o futuro do desenvolvimento da Tartiflette:

  • Documentação de "polimento" para usuários e comunidade;
  • Fornecendo mais exemplos e expandindo casos de uso para inspirar você a experimentar os recursos do Tartiflette ;
  • Maior produtividade , principalmente no nível do mecanismo de execução.

E também precisamos de você!



Você pode usar nosso projeto para quase qualquer finalidade e nos ajudar no desenvolvimento da Tartiflette! Verifique a durabilidade, não hesite em procurar erros ou discrepâncias no código e mantenha os comentários para melhorar o produto. Acreditamos verdadeiramente que a Tartiflette se tornará melhor com a colaboração estreita com a comunidade.

Como contribuir para o projeto?

Tartiflette no Github ;
Leia a documentação em tartiflette.io ;
Envie comentários e sugestões para o Slack ;
Participe da comunidade no Twitter .

Source: https://habr.com/ru/post/pt449526/


All Articles