API REST

API REST vs GraphQL

API REST vs GraphQL

TL; versão DR

Em um dos posts anteriores, discutimos, resumidamente, como é usar a API GitHub v3. Esta versão foi projetada para ter interface como qualquer outra API REST. Existem pontos de extremidade para cada recurso que você precisa acessar e / ou modificar. Existem terminais para cada usuário, cada organização, cada repositório e assim por diante. Por exemplo, cada usuário tem seu endpoint de API em https: // api.github.com / users / você pode tentar substituir o seu nome de usuário em vez de e insira o URL em um navegador para ver o que a API responde com.

A API GitHub v4, por outro lado, usa GraphQL, onde QL significa Query Language. GraphQL é uma nova maneira de projetar suas APIs. Assim como há muitos serviços da web oferecidos como APIs REST, não apenas os oferecidos pelo GitHub, existem muitos serviços da web que permitem a interface com eles via GraphQL.

A diferença mais gritante que você notará entre GraphQL e REST API é que GraphQL pode funcionar a partir de um único endpoint de API. No caso da API GitHub v4, este ponto final é https: // api.github.com / graphql e é isso. Você não precisa se preocupar em anexar strings longas no final de um URI raiz ou fornecer um parâmetro de string de consulta para informações extras. Você simplesmente envia um argumento JSON like para esta API, pedindo apenas o que você precisa, e você receberá uma carga JSON de volta com as mesmas informações que você solicitou. Você não tem que lidar com a filtragem de informações indesejadas ou sofrer sobrecarga de desempenho devido a grandes respostas.

O que é REST API?

Bem, REST significa Representational State Transfer e API significa Application Programming Interface. Uma API REST, ou API 'RESTful', tornou-se a principal filosofia de design por trás da maioria dos aplicativos cliente-servidor modernos. A ideia surge da necessidade de segregar vários componentes de um aplicativo, como a IU do lado do cliente e a lógica do lado do servidor.

Portanto, a sessão entre um cliente e um servidor é normalmente sem estado. Depois que a página da web e os scripts relacionados forem carregados, você pode continuar a interagir com eles e quando realizar uma ação (como pressionar um botão de envio), uma solicitação de envio é enviada junto com todas as informações contextuais de que o servidor da web precisa para processar essa solicitação ( como nome de usuário, tokens, etc). O aplicativo faz a transição de um estado para outro, mas sem uma necessidade constante de conexão entre o cliente e o servidor.

REST define um conjunto de restrições entre o cliente e o servidor, e a comunicação só pode acontecer sob essas restrições. Por exemplo, REST sobre HTTP geralmente usa o modelo CRUD, que significa Criar, Ler, Atualizar e Excluir e métodos HTTP como POST, GET, PUT e DELETE ajudam a realizar essas operações e essas operações sozinhas. Técnicas de intrusão antigas, como injeções de SQL, não são uma possibilidade com algo como uma API REST bem escrita (embora seja REST não é uma panacéia de segurança).

Também ajuda muito os desenvolvedores de IU! Como tudo o que você recebe de uma solicitação HTTP é um fluxo de texto típico (às vezes formatado como JSON), você pode implementar facilmente uma página da web para navegadores ou um aplicativo (no idioma de sua preferência) sem se preocupar com a arquitetura do servidor. Você lê a documentação da API para serviços como Reddit, Twitter ou Facebook e pode escrever extensões para eles ou clientes de terceiros no idioma de sua escolha, já que tem a garantia de que o comportamento da API ainda será o mesmo.

Por outro lado, o servidor não se importa se o front-end é escrito em Go, Ruby ou Python. Seja um navegador, aplicativo ou CLI. Ele apenas 'vê' a solicitação e responde apropriadamente.

O que é GraphQL?

Como tudo no mundo dos computadores, as APIs REST ficaram maiores e mais complexas e, ao mesmo tempo, as pessoas queriam implementá-las e consumi-las de maneira mais rápida e simples. É por isso que o Facebook teve a ideia do GraphQL, e mais tarde o abriu. O QL em GraphQL significa Query Language.

O GraphQL permite que os clientes façam solicitações de API muito específicas, em vez de fazer chamadas de API rígidas com parâmetros e respostas predefinidos. É muito mais simples porque o servidor então responde exatamente com os dados que você pediu, sem excesso.

Dê uma olhada nesta solicitação REST e sua resposta correspondente. Esta solicitação visa visualizar apenas a biografia pública de um usuário.

Solicitação: GET https: // api.github.com / users /
Resposta:

"login": "octocat",
"id": 583231,
"node_id": "MDQ6VXNlcjU4MzIzMQ ==",
"avatar_url": "https: // avatars3.githubusercontent.com / u / 583231?v = 4 ",
"gravatar_id": "",
"url": "https: // api.github.com / users / octocat ",
"html_url": "https: // github.com / octocat ",
"Seguidores_url": "https: // api.github.com / usuários / octocat / seguidores ",
"following_url": "https: // api.github.com / users / octocat / following / other_user ",
"gists_url": "https: // api.github.com / users / octocat / gists / gist_id ",
"starred_url": "https: // api.github.com / users / octocat / starred / owner / repo ",
"subscriptions_url": "https: // api.github.com / users / octocat / subscriptions ",
"organization_url": "https: // api.github.com / users / octocat / orgs ",
"repos_url": "https: // api.github.com / users / octocat / repos ",
"events_url": "https: // api.github.com / users / octocat / events / privacy ",
"received_events_url": "https: // api.github.com / users / octocat / received_events ",
"tipo": "Usuário",
"site_admin": falso,
"nome": "O Octocat",
"empresa": "GitHub",
"blog": "http: // www.github.com / blog ",
"local": "São Francisco",
"email": null,
"alugável": nulo,
"bio": nulo,
"public_repos": 8,
"public_gists": 8,
"seguidores": 2455,
"seguindo": 9,
"created_at": "2011-01-25T18: 44: 36Z",
"updated_at": "2018-11-22T16: 00: 23Z"

Usei o nome de usuário octocat, mas você pode substituí-lo pelo nome de usuário de sua escolha e usar cURL para fazer essa solicitação na linha de comando ou no Postman se precisar de uma GUI. Embora a solicitação seja simples, pense em todas as informações extras que você está obtendo com esta resposta. Se você processasse dados de um milhão de usuários e filtrasse todos os dados desnecessários usando, isso não seria eficiente. Você está desperdiçando largura de banda, memória e computação para obter, armazenar e filtrar todos os milhões de pares de chave-valor extras que você nunca vai

Além disso, a estrutura da resposta não é algo que você conhece de antemão. Esta resposta JSON é equivalente a um objeto de dicionário em Python ou um objeto em JavaScript. Outros endpoints responderão com objetos JSON que podem ser compostos de objetos aninhados, lista aninhada dentro do objeto ou qualquer combinação arbitrária de tipos de dados JSON, e você precisará consultar a documentação para obter os detalhes. Quando você está processando a solicitação, você precisa estar ciente desse formato que muda de um ponto final para outro.

GraphQL não depende de verbos HTTP como POST, GET, PUT e DELETE para realizar operações CRUD no servidor. Em vez disso, há apenas um tipo de solicitação HTTP e endopint para todas as operações relacionadas a CRUD. No caso do GitHub, isso envolve solicitações do tipo POST com apenas um ponto de extremidade https: // api.github.com / graphql

Sendo uma solicitação POST, pode carregar consigo um corpo de texto semelhante a JSON, através do qual serão nossas operações GraphQL. Essas operações podem ser do tipo inquerir se tudo o que deseja fazer é ler alguma informação, ou pode ser um mutação no caso de os dados precisarem ser modificados.

Para fazer chamadas da API GraphQL, você pode usar o explorador GraphQL do GitHub. Dê uma olhada neste GraphQL inquerir para buscar o mesmo tipo de dados (biografia pública do usuário) que fizemos acima usando REST.

Solicitação: POST https: // api.github.com / graphql
inquerir
usuário (login: "ranvo")
bio


 
Resposta:
 

"dados":
"do utilizador":
"bio": "Entusiastas de tecnologia e ciência. Eu gosto de todos os tipos de coisas não relacionadas de
servidores para física quântica.\ r \ n Ocasionalmente, escrevo postagens de blog sobre os interesses acima."


Como você pode ver, a resposta consiste apenas no que você pediu, essa é a biografia do usuário. Você seleciona um usuário específico passando o nome de usuário (no meu caso, é ranvo) e, em seguida, você pede o valor de um atributo desse usuário, neste caso, esse atributo é bio. O servidor API procura as informações específicas exatas e responde com isso e nada mais.

Por outro lado, o GraphQL também permite que você faça uma única solicitação e extraia informações que levariam a várias solicitações na API REST tradicional. Lembre-se de que todas as solicitações GraphQL são feitas para apenas um endpoint de API. Considere, por exemplo, o caso de uso em que você precisa solicitar ao servidor de API do GitHub a biografia do usuário e uma de suas chaves SSH. Isso exigiria dois pedidos de GET.

Solicitações REST: GET https: // api.github.com //
OBTER https: // api.github.com //chaves
 
Solicitação GraphQL: POST https: // api.github.com / graphql /
 
inquerir
usuário (login: "ranvo")
bio
publicKeys (último: 1)
arestas

chave





 
Resposta GraphQL:
 

"dados":
"do utilizador":
"bio": "Entusiastas de tecnologia e ciência. Eu gosto de todos os tipos de coisas não relacionadas de
servidores para física quântica.\ r \ n Ocasionalmente, escrevo postagens de blog sobre os interesses acima.",
"publicKeys":
"arestas": [

"nó":
"chave": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH31mVjRYdzeh8oD8jvaFpRuIgL65SwILyKpeGBUNGOT"


]



Existem objetos aninhados, mas se você olhar para sua solicitação, eles praticamente correspondem à sua solicitação para que você possa saber e, de alguma forma, moldar a estrutura da resposta que você obtém .

Conclusão

O GraphQL vem com sua própria curva de aprendizado, que é muito íngreme, ou nem um pouco íngreme, dependendo de quem você está perguntando. De um ponto de vista objetivo, posso apresentar os seguintes fatos para você. É flexível, como você viu acima, é introspectivo - ou seja, você pode consultar a API GraphQL sobre a própria API. Mesmo se você não for construir seu servidor de API usando-o, é provável que você tenha que fazer interface com uma API que permita apenas GraphQL.

Você pode aprender um pouco mais sobre seus aspectos técnicos aqui e se quiser fazer chamadas da API GraphQL de sua estação de trabalho local, use o Graphiql.

O botão do meio do mouse não funciona no Windows 10
O botão do meio do mouse ajuda você a percorrer longas páginas da web e telas com muitos dados. Se isso parar, você vai acabar usando o teclado para r...
Como alterar os botões esquerdo e direito do mouse no PC com Windows 10
É normal que todos os dispositivos de mouse de computador sejam ergonomicamente projetados para usuários destros. Mas existem dispositivos de mouse di...
Emular cliques do mouse passando o mouse usando o mouse sem cliques no Windows 10
Usar um mouse ou teclado na postura errada de uso excessivo pode resultar em muitos problemas de saúde, incluindo tensão, síndrome do túnel do carpo e...