Careers Xpand IT Careers Xpand IT
Contact Us
marketing.talent@careers.xpand-it.com
Careers Xpand ITCareers Xpand IT
  • Procurar Oportunidades
    • Oportunidades de Emprego
    • Estudantes & Universidades
  • Life at Xpand IT
    • Trabalhar na Xpand IT
    • Os nossos Valores
  • Recursos
    • Blog
    • Webinares e Conteúdos
    • ITalks lives @Instagram
  • Quem Somos
    • Equipas de Produto & Tecnologia
    • Equipas Corporativas
    • O que fazemos
    • Imprensa
  • Contactos
  • Português
  • Inglês
Info
Junta-te a nósJunta-te a nósJunta-te a nós
Search website
Search
Close

GraphQL o que é? Conhece a alternativa para construir API

  1. Home
  2. Blog Xtech Community
GraphQL o que é? Conhece a alternativa para construir API
21-06-2021
Tempo de leitura: 6 minutos

GraphQL o que é? Conhece a alternativa para construir API

por Rodrigo Almeida, Middleware Developer @ Xpand IT

GraphQL é uma linguagem de consulta para API, em open source, criada pelo Facebook em 2015. Sendo agnóstica a bases e fontes de dados, pode ser utilizada eficazmente em qualquer contexto onde uma API for utilizada, permitindo ao utilizador lidar com a necessidade de rapidez, flexibilidade e eficiência na comunicação cliente-servidor. Então, como é que GraphQL consegue isto? Há muitas formas de implementar uma arquitetura à sua volta.

  • Servidor GraphQL com uma base de dados ligada. Este é um único servidor Web que implementa a especificação GraphQL, quando um request é lido e processado pelo servidor, vai buscar a informação necessária à base de dados. Em seguida, constrói o objeto de resposta tal como descrito na especificação e devolve-o ao utilizador. Pode ser utilizado com qualquer protocolo de rede disponível, quer seja TCP, WebSockets, etc.
  • GraphQL como uma camada integrando múltiplos sistemas. Este é um ponto particularmente convincente para empresas com infraestruturas legacy e diferentes API com um elevado nível de manutenção. Uma API pode unificar estes sistemas existentes, escondendo a sua complexidade, o que permite o desenvolvimento de novas aplicações clientes que simplesmente comunicam com o servidor  para obterem os dados necessários. O servidor é então responsável por ir buscar os dados ao sistema existente e adicioná-los na resposta.
Fonte: HebergementWebs.com

 

  • Abordagem Híbrida. Tem uma base de dados, mas ainda comunica com sistemas legacy ou outros sistemas de terceiros.

Características

Fundamentalmente, GraphQL permite ao utilizador especificar que dados necessita de uma API, utilizando a recolha de dados declarativos. Isto significa que em vez de ter múltiplos endpoints a devolver dados estruturados, envia um único POST request para o servidor no qual descreve todos os requisitos de dados usando um sistema de strong type para definir as capacidades da API. Todos os types expostos numa API são escritos utilizando a Linguagem de Definição de Esquema GraphQL, que define como o utilizador pode aceder aos dados. Aqui está um exemplo de como se pode fazer uso da SDL para definir um type simples, neste caso, type Person com informação básica (o caracter “!” após o type faz com que o campo tenha de ser obrigatoriamente preenchido).

type Person {

  name: String!

  age: Int!

  id: String!

}

Podemos também começar a construir relações entre types, digamos que Person pode ser associada a uma ou mais contas bancárias , como no exemplo abaixo, e, assim, acrescentar informações adicionais.

type Account {

  currency: String!

  details: Person!

}

A seguir, precisamos de acrescentar o outro extremo da relação de volta ao type Person:

type Person {

  name: String!

  age: Int!

  id: String!

  accounts: [Account!]!

}

Quando se trata de ir buscar dados, GraphQL funciona de forma diferente do REST, uma vez que a estrutura dos dados não é fixa e o utilizador é obrigado a enviar mais informações ao servidor para expressar as suas necessidades. Digamos por exemplo que queremos devolver todos os nomes de Persons armazenados na base de dados:

{

  allPersons {

    name

  }

}

allPersons, neste caso, é o campo raiz da consulta, tudo o que se segue é o payload e o único campo especificado nesse payload é o name de Person. Uma resposta de exemplo seria a seguinte:

{

  "allPersons": [

    { "name": "name1" },

    { "name": "name2" },

    { "name": "name3" }

  ]

}

Se quisermos informação adicional, podemos fazer algo um pouco mais elaborado:

{

  allPersons {

    name

    age

    account {

      currency

    }

  }

}

Por último, também podes criar, modificar ou apagar dados utilizando Mutations. Vamos criar uma nova Person:

mutation {

  createPerson(name: "name4", age: 99) {

    name

    age

    id

  }

}

Neste caso, não só estamos a criar uma nova Person, mas também a consultar informações enquanto enviamos mutations, permitindo aos utilizadores recuperar novas informações do servidor numa única chamada. Outra característica interessante de GraphQL é que os types têm ID únicos gerados pelo servidor quando novos objetos são criados, daí que também se possa pedir o ID específico de Person quando é criada e não é necessário passá-la como um argumento.

GraphQL vs REST

REST tem sido o standard quando se trata de construir e desenhar API, tendo como principais pontos fortes a sua longevidade e capacidade de abstração.

Por outro lado, também apresenta uma especificação rigorosa e uma das principais razões para a utilização de GraphQL reside na inflexibilidade de REST para acompanhar as exigências em rápida mudança por parte dos clientes que consomem essas API.

Uma das razões pela qual o Facebook usa GraphQL é para minimizar a quantidade de dados que precisa de ser transferida através da rede. Sendo esta rede social acedida em grande medida através de mobile, surge então a necessidade de conseguir carregar os dados de forma eficiente, o que é possível com esta arquitetura. As representações de recursos definidas pelo servidor como é o caso de REST não servem este objetivo. Uma outra desvantagem de REST por oposição a GraphQL é o facto de não conseguir responder a diferentes estruturas e plataformas front-end no lado do cliente, tornando difícil a construção de uma API que se adapte aos requisitos de todos os types. Os programadores também têm de criar os endpoints da API tendo em conta as visualizações em front-end, e as alterações às visualizações em front-end requerem alterações ao ponto final da API. Esta falta de flexibilidade significa uma iteração mais lenta do produto.

As API REST frequentemente devolviam mais dados do que aqueles que o cliente precisava (overfetching). Em alternativa, o cliente tinha de fazer múltiplas chamadas API para obter todos os dados de que precisava (underfetching). Ambos os problemas podem tornar-se inconvenientes para uma empresa que enfrenta desafios de desempenho ou escalabilidade, uma vez que com cada mudança no front-end há o risco de haver mais ou menos dados necessários do que antes. Portanto, o back-end também precisa de ser ajustado para acomodar as novas necessidades de dados. Isto dificulta a produtividade e atrasa o desenvolvimento do próprio produto.

GraphQL tem as ferramentas que permitem aos programadores conceber chamadas API que satisfaçam os seus requisitos de dados específicos. Desta forma, o GraphQL resolve os desafios de excesso e de falta de procura.

Abaixo podes observar como REST e GraphQL lidam com a obtenção de dados. REST precisa de informação de 3 endpoints diferentes, estes poderiam ser /users/<id> para ir buscar os dados iniciais do utilizador. Em segundo lugar, é provável que haja um /users/<id>/posts endpoint que devolve todos os posts para um utilizador e o terceiro endpoint será então o /users/<id>/followers que retorna uma lista de seguidores por utilizador. GraphQL, por outro lado, só precisa de realizar uma consulta para devolver todas as informações necessárias.

Fonte: WSO2.com

REST

Fonte: WSO2.com

GraphQL

Outro ponto em que o GraphQL brilha é no rastreio de logs e análise, dando informação detalhada sobre que dados são lidos pelos utilizadores e solicitados no back-end, uma vez que cada utilizador pode especificar que informação pretende ir buscar. Isto ajuda a compreender como os dados disponíveis estão a ser utilizados e também melhora a API, uma vez que se pode diminuir campos específicos que não estão a ser utilizados sem grandes problemas, ajudando a reduzir “congestionamentos” nos sistemas. Em REST, uma vez que todos os dados são sempre devolvidos, o proprietário da aplicação não vai conhecer de imediato a utilização de elementos de cada dado específico.

GraphQL, por outro lado, utiliza consultas, e, assim, é possível recuperar dados específicos, pelo que é possível acompanhar o desempenho do sistema ao nível destes resolvers, e descobrir se o sistema necessita de afinação no desempenho.

Reflexões finais

GraphQL não tornou REST obsoleto, nem o deve substituir totalmente, uma vez que ainda existem algumas áreas em que REST se revela superior, como por exemplo a transferência de ficheiros, HTTP caching para evitar a recuperação de recursos, debug de proxies, etc.

Então, por que não utilizar ambos? Uma opção seria, por exemplo, utilizar um endpoint GraphQL para uma API REST e utilizar esse endpoint GraphQL, ou ter uma GraphQL API mascarada como gateway para outras API REST. Trata-se de usar a tecnologia certa para a situação certa.

Em suma, é importante destacar esta nova alternativa ao REST para criar API.

Categories:
  • Blog Xtech Community
Tags:
  • API
Anterior Seguinte
  • Popular
  • Recente
Três dicas para criar um CV de engenharia informática de sucesso
Mai 08, 20

Três dicas para criar um CV de engenharia informática de sucesso

A minha primeira experiência profissional nos estágios de verão da Xpand IT
Set 20, 19

A minha primeira experiência profissional nos estágios de verão da Xpand IT

Como começar a trabalhar em IT? – live instagram
Abr 27, 21

Como começar a trabalhar em IT? – live instagram

Como ser um bom developer? Não é apenas sobre código
Fev 03, 20

Como ser um bom developer? Não é apenas sobre código

Sete conselhos que um junior developer deve saber
Set 16, 19

Sete conselhos que um junior developer deve saber

Teletrabalho: boas práticas para trabalhar em casa (miúdos incluídos)
Mar 31, 20

Teletrabalho: boas práticas para trabalhar em casa (miúdos incluídos)

Cinco razões para continuar a trabalhar na mesma empresa de TI
Jan 22, 20

Cinco razões para continuar a trabalhar na mesma empresa de TI

Data Engineer ou Data Scientist? Descobre a carreira que faz match contigo
Nov 09, 20

Data Engineer ou Data Scientist? Descobre a carreira que faz match contigo

Comecei um novo desafio profissional em teletrabalho. Foi assim a minha experiência
Mai 14, 20

Comecei um novo desafio profissional em teletrabalho. Foi assim a minha experiência

Metodologias ágeis: cinco lições a partir do coaching a diferentes equipas
Dez 26, 19

Metodologias ágeis: cinco lições a partir do coaching a diferentes equipas

10 hacks em Javascript que os developers devem conhecer
Mai 17, 22

10 hacks em Javascript que os developers devem conhecer

10 top skills procuradas num Senior Developer
Abr 21, 22

10 top skills procuradas num Senior Developer

A importância de UX e as suas aplicações no futuro – live instagram
Abr 18, 22

A importância de UX e as suas aplicações no futuro – live instagram

Angular vs React: qual escolher? Conhece aplicações práticas
Mar 14, 22

Angular vs React: qual escolher? Conhece aplicações práticas

5 razões para trabalhares numa consultora de IT
Fev 09, 22

5 razões para trabalhares numa consultora de IT

De Native para Flutter: a opinião de um mobile developer
Jan 07, 22

De Native para Flutter: a opinião de um mobile developer

Termos e Condições de Participação no Passatempo Auscultadores Bluetooth
Dez 20, 21

Termos e Condições de Participação no Passatempo Auscultadores Bluetooth

Como aplicar deployments no Tableau Server através de uma abordagem DevOps?
Dez 14, 21

Como aplicar deployments no Tableau Server através de uma abordagem DevOps?

4 lições que aprendi sobre liderança ao correr uma meia-maratona
Nov 17, 21

4 lições que aprendi sobre liderança ao correr uma meia-maratona

Middleware: tudo o que precisas de saber enquanto software engineer
Nov 10, 21

Middleware: tudo o que precisas de saber enquanto software engineer

pin

Portugal

pin

United Kingdom

pin

Sweden

Carreira em IT logo Xpand IT
Subscrever Newsletter
  • Procurar Oportunidades
  • Oportunidades de Emprego
  • Estudantes & Universidades
  • Life at Xpand IT
  • Trabalhar na Xpand IT
  • Os nossos valores
  • Recursos
  • Blog
  • Webinares e Conteúdos
  • ITalks lives @Instagram
  • Quem Somos
  • Equipas de Produto & Tecnologia
  • Equipas Corporativas
  • O que fazemos
  • Imprensa
  • Contactos
www.xpand-it.com  2022 | All rights reserved
Legal Privacy Policy Terms Of Use
Lisboa 2020 Logo norte 2020
logo Compete 2020
Logo Portugal 2020
Logos CMMI e Pledge 1


X
This website uses Cookies
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept All”, you consent to the use of all the cookies. However, you may visit Cookie Settings to provide a controlled consent.
By browsing our website, you agree to ourCookie Policy
Cookie settingsACCEPT ALL
Manage consent

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessários
Relatório de Consentimento
Os cookies necessários são essenciais para o nosso website funcionar normalmente. Assegurando anonimanente as funcionalidades básicas
CookieDuraçãoDescrição
__rd_experiment_versionsessãoEste cookie é configurado pelo RD Station garante que o utilizador veja sempre a mesma versão de um teste A/B, preservando a experiência e consistência dos dados.
_GRECAPTCHA5 meses 27 diasEste cookie é configuirado pelo Google reCAPTCHA protege o nosso site contra ataques de spam nos formulários de contacto.
cookielawinfo-checkbox-[CATEGORY]1 anoEste cookie é usado pelo plugin GDPR Cookie Consent guarda o consentimento do visitante da [CATEGORIA].
viewed_cookie_policy1 anoEste cookie usado pelo GDPR Cookie Consent plugin para guardar se o visitante consentiu ou não o use the cookies. Não guarda nenhum dado pessoal.
Performance e Analíticos
Estes cookies são usados em análises estatísticas, permitem-nos analisar o comportamente de navegação no nosso site de forma a melhorar os serviços e campanhas que disponibilizamos.
CookieDuraçãoDescrição
__trf.src1 anoEste cookie é configurado pelo RD Station, guarda a referência da origem da visita ao site.
_fbp3 mesesEste cookie é configurado pelo Facebook para exibir anúncios quando estiver no Facebook ou noutra plataforma digital onde é usada publicidade do Facebook
_ga2 anosEste cookie é configurado pelo Google Analytics, calcula dados de visitantes, sessões, campanhas e acompanha o uso do site. O cookie armazena informações anónimas atribuindo um número aleatório para distinguir visitantes únicos.
_ga_[ID]2 anosEste cookie é configurado pelo Google Analytics é usado para distinguir os visitantes.
_gat_UA-[ID]1 minutoEste cookie é configurado pelo Google Analytics, onde o elemento padrão no nome contém um número que identifica o site. É uma variação do cookie _gat usado para limitar a quantidade de dados registados pelo Google em sites de alto volume de tráfego.
_gid1 diaEste cookie é configurado pelo Google Analytics guarda um ID único que é usado para gerar dados estatísticos sobre como o visitante usa o site
_rdtrk9 anos 8 meses 4 dias 9 horas 21 minutosEste cookie é configurado pelo RD Station, guarda a lista de todas as páginas que o visitante acedeu.
AnalyticsSyncHistory1 mêsEste cookie é usado pelo Linkedin para guardar informação sobre quando ocorreu a sincronização com o cookie lms_analytics para os visitantes dos países selecionados.
bcookie2 anosEste cookie é usado pelo Linkedin para guardar informação sobre quando ocorreu a sincronização com o cookie lms_analytics para os visitantes dos países selecionados.
fr3 mesesEste cookie é usado pelo Facebook permite mostrar anúncios relevantes aos visitantes, analisando o comportamento do visitante noutros websites que possuem pixel do Facebook ou o plugin social do Facebook.
rdtrk1 anoEste cookie é configurado pelo RD Station, guarda a lista de todas as páginas que o visitante acedeu.
UserMatchHistory1 mêsEste cookie usado pelo LinkedIn para sincronizar os ID's dos Ads.
YSCsessãoEste cookie é usado pelo Youtube para guardar as visualizações de videos do youtube embebidos em páginas.
yt-remote-connected-devicesnuncaEste cookie é usado pelo YouTube para guardar as preferências de video do visitante nos videos embebidos.
yt-remote-device-idnuncaEste cookie é usado pelo YouTube para guardar as preferências de video do visitante nos videos embebidos.
yt.innertube::nextIdnuncaEste cookie é usado pelo YouTube regista um ID único para guardar quais os vídeos que o visitante visualizou.
yt.innertube::requestsnuncaUsed by YouTube, registers a unique ID to store data on what videos from YouTube the user has seen.
Outros
Cookies que estão atualmente a ser analisados pela nossa equipa.
CookieDuraçãoDescrição
cookietestsessãoEste cookie está a ser analisado pela nossa equipa.
cxssh_status3 meses 8 diasEste cookie está a ser analisado pela nossa equipa.
Funcionais
Estes cookies são usadas para melhorar a experiência e funcionalidades do nosso website, permitem também guardar as preferências do utlizador para futuras vistas.
CookieDuraçãoDescrição
_icl_visitor_lang_js1 diaEste cookie é configurado pelo WPML WordPress plugin guarda o idioma redirecionado.
bscookie2 anosEste cookie é usado pelo LinkedIn guarda se o utlizador fez login com multi-factor
CONSENT2 anosEste coookie é usado pelo YouTube em videos embebidos e regista dados estatísticos anonimamente.
langsessãoEste cookie é usado pelo LinkedIn para guardar a escolha do idioma do visitante no website linkedin.com.
li_gc2 anosEste cookie é usado pelo Linkedin para guardar o consentimento dos visitantes acerca do uso de cookies não essenciais.
lidc1 diaEste cookie é usado pelo LinkedIn para facilitar a escolha do datacenter.
VISITOR_INFO1_LIVE5 meses 27 diasEste cookie usado pelo YouTube para medir a largura de banda de modo a determinar se o visitante acede à nova ou à antiga interface.
wpml_browser_redirect_testsessãoEste cookie é usado pelo WPML WordPress plugin é usado para testar se os cookies estão ativos no browser.
Salvar e Aceitar
  • Português
  • Inglês