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çãoIniciamos 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çãoEm 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 TartifletteNos 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 DNATartiflette é 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)
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 .