Code FightersProduto

A fantástica palavra de GraphQL

Tendo o GraphQL como estrela da publicação, precisamos contextualizar um pouco sobre o tema.

GraphQL é uma linguagem baseada em querys com foco em APIs, criada pelo Facebook em 2012, no qual tornou-a open source em 2015, e o processamento destas queries dá-se em tempo de execução. Ou seja, os dados retornados dependem diretamente da query feita. Aí você deve estar se perguntando:“mas isso não é evidente? REST também faz isso, é só mudar o select no server-side”. Sim, é evidente, mas o que torna o GraphQL único é que quem faz a query é o cliente, e não o servidor. Desta forma, sim, haverá queries iguais, mas também queries únicas e sob demanda para cada necessidade.

Por que estamos migrando

Nós possuímos – e continuaremos possuindo até que haja uma migração completa dos produtos que a consomem – uma API REST, como é frequentemente encontrada e disponibilizada por diversas empresas. Contudo chegou um momento no qual a mesma não supria mais as exigências de alguns produtos. É o caso, por exemplo, da extensão da Conviso Platform para o Burp.

Em algumas situações era preciso utilizar mais de um endpoint para conseguir uma determinada informação ou realizar uma operação e, em algumas destas situações, havia-se a necessidade de intercalar entre versões da própria API, tornando rotinas de consulta, manipulação ou até mesmo automação mais trabalhosas e menos performáticas. Também necessitávamos de uma documentação mais completa e que pudesse ser atualizada conforme o próprio desenvolvimento e disponibilização de recursos da mesma, afinal de que adianta termos uma caixa de ferramentas se você não sabe utilizá-la?

Outra demanda que possuíamos, era a necessidade de manipular o conteúdo exibido/retornado ao cliente com mais facilidade, ou seja, uma paginação mais dinâmica, quantidade de itens por página definida pelo usuário, etc. Levando todos os pontos citados anteriormente em consideração, concluiu-se que GraphQL era a solução mais viável para as nossas demandas no momento dado nosso contexto interno. Sendo assim, iniciou-se o processo de mudança/migração para essa nova tecnologia, e daremos mais detalhes sobre este processo no tópico a seguir.

Como implementamos o GraphQL

Considerando as tecnologias disponíveis para implementarmos o GraphQL, buscava-se quais teriam o menor impacto e/ou esforço, pois a nova API não poderia impactar nas nossas operações já existentes, assim como havia a necessidade de entregarmos recursos o quanto antes. Desta forma, concluímos que a melhor opção seria manter-se próximo ao que já possuíamos na Conviso Platform Ou seja, utilizarmos Ruby e suas preciosas gems para realizarmos o processo da forma mais sutil possível.

Utilizando a abordagem de menor esforço/impacto, visamos reutilizar de forma parcial ou integralmente recursos que já possuíamos na Conviso Platform. Como, por exemplo, regras de negócio, autenticação, sessão, entre outros, tornando assim o tempo de desenvolvimento de novos recursos mais curto e, consequentemente, tendo uma curva de aprendizado desta tecnologia menor, visto que é possível criar associações com algo já existente. Vale ressaltar que neste processo não foi possível reaproveitarmos tudo. Houve e sempre haverá refatoração de código, pois o intuito é sempre melhorarmos os processos e as operações.

Para consolidarmos e testarmos as gems, realizamos provas de conceito em alguns cenários. Ou seja, foram implementadas queries na API GraphQL e realizados benchmarks em alguns critérios, como velocidade, usabilidade, etc. Um dos benchmarks que apresentou um resultado surpreendente foi o de velocidade, pois realizamos uma consulta nos projetos que funcionários da Conviso possuem acesso, e tal consulta está disponível a seguir.

query{
	listProjects{
		id
		occurrences{
	id
		}
	}
}

Nesta query pode-se identificar que são consultados todos os id’s dos projetos e, destes projetos, todos os id’s das ocorrências vinculadas – vulnerabilidades e notificações reportadas. Essa query nos retornou mais de 7600 projetos e suas respectivas ocorrências, porém levou uma média de 30 segundos para processar todas essas informações.

Vantagens

Em pouco tempo de uso, já foi possível identificar algumas das vantagens que o GraphQL tem a oferecer e vamos contar um pouco sobre algumas delas a seguir:

Velocidade

É sempre um terreno delicado quando se fala de benchmarks de velocidade, pois há muitos fatores que podem vir a interferir. É o caso, por exemplo, da latência de conexão, processamento do servidor, entre outros. Contudo, como visto anteriormente, mais de 7600 projetos e suas respectivas ocorrências foram retornadas em uma média de 30-40 segundos.

Agilidade no desenvolvimento

Houve redução de forma drástica no desenvolvimento e na curva de aprendizado de novas operações.

Documentação

Como GraphQL é fortemente tipado e a documentação é elaborada no próprio código, durante o desenvolvimento não há mais como deixá-la para ser feita posteriormente. Ou seja, conforme os recursos vão sendo desenvolvidos, os mesmos vão sendo documentados e serão disponibilizados de maneira conjunta. Vale ressaltar que clientes de GraphQL costumam disponibilizar uma documentação interativa durante a sua utilização. Porém também é possível oferecê-la de uma maneira mais popular como a nossa documentação pública.

Conclusão e trabalhos futuros

Levando em consideração todos os aspectos apresentados e melhorias vistas com a utilização do GraphQL, continuaremos a migrar os recursos, bem como nossos produtos e serviços para consumirem e utilizarem a nova API. Haverá também a necessidade de ampliarmos os recursos disponíveis através da mesma, desta forma, todo desenvolvimento passará a ser e utilizar GraphQL.

Conteúdos relevantes:

Nova call to action
About author

Articles

Ruby on Rails developer focused on secure development, passionate about technology, beer and travel.
Related posts
Code FightersSegurança de Aplicação

Segurança em GraphQL

Para iniciar, GraphQL é uma linguagem de consulta de API poderosa e flexível que tem ganhado…
Read more
Code FightersSegurança de Aplicação

Como integrar o Semgrep no CI/CD e enviar os resultados para a Conviso Platform

Atualmente, é uma prática muito comum integrar verificações de segurança durante a fase de…
Read more
Code FightersSegurança de Aplicação

Escrevendo código seguro - Um guia de boas práticas

Escrever código seguro envolve a adoção de um conjunto de boas práticas de desenvolvimento de…
Read more

Deixe um comentário

Descubra mais sobre Conviso AppSec

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continue reading