Em uma das postagens anteriores, discutimos, em breve, como é usar a API do GitHub V3. Esta versão foi projetada para ser interface como qualquer outra API REST. Existem pontos de extremidade para todos os recursos que você precisa acessar e/ou modificar. Existem pontos de extremidade 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/ usuários/ você pode tentar substituir seu nome de usuário em vez de e entrar no URL em um navegador para ver o que a API responde com.
Github API V4, por outro lado, usa grafql onde o QL significa linguagem de consulta. GraphQL é uma nova maneira de projetar suas APIs. Assim como existem muitos serviços da web oferecidos como APIs REST não apenas as oferecidas pelo GitHub, existem muitos serviços da Web que permitem interagir com eles via grafql.
A diferença mais forte que você notará entre GraphQL e REST API é que o GraphQL pode funcionar em um único ponto de extremidade da API. No caso do GitHub API V4, este ponto final é https: // api.Github.com/grafql e é isso. Você não precisa se preocupar em anexar seqüências longas no final de um URI raiz ou fornecer um parâmetro de sequência de consulta para obter informações extras. Você simplesmente envia um argumento de JSON para esta API, pedindo apenas as coisas que você precisa, e você receberá uma carga útil JSON com exatamente as mesmas informações que você solicitou. Você não precisa lidar com a filtragem de informações indesejadas ou sofre de sobrecarga de desempenho por causa de grandes respostas.
O que é API REST?
Bem, o REST significa transferência de estado representacional e API significa interface de programação de aplicativos. Uma API REST, ou uma API 'RESTful', tornou-se o principal design-filosofia por trás da maioria dos aplicativos clientes-servidores modernos. A idéia emerge da necessidade de segregar vários componentes de um aplicativo como a interface do usuário 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 interagindo com eles e quando executar uma ação (como pressionar um botão Enviar), uma solicitação de envio é enviada juntamente com todas as informações contextuais que o servidor da web precisa processar essa solicitação ( como nome de usuário, tokens, etc). O aplicativo faz transições 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, descanso sobre o HTTP geralmente usa o modelo CRUD, que significa criar, ler, atualizar e excluir e http, como postar, obter, colocar e excluir ajudá -lo a executar essas operações e essas operações sozinhas. Técnicas antigas de intrusão, como as injeções de SQL, não são uma possibilidade com algo como uma API de repouso bem escrita (embora o descanso não seja uma panacéia de segurança).
Também ajuda muito os desenvolvedores da interface do usuário! Como tudo o que você recebe de uma solicitação HTTP é típico de um fluxo de texto (formatado como JSON, às vezes), você pode implementar facilmente uma página da web para navegadores ou um aplicativo (em seu idioma preferido) sem se preocupar com a arquitetura do lado 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, pois você 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 está escrito em Go, Ruby ou Python. Seja um navegador, aplicativo ou CLI. Apenas 'vê' o pedido e responde adequadamente.
O que é grafql?
Como em qualquer coisa no mundo dos computadores, as APIs de REST ficaram maiores e mais complexas e, ao mesmo tempo, as pessoas queriam implementá -las e consumi -las de uma maneira mais rápida e simples. É por isso que o Facebook teve a idéia de grafql e, posteriormente, de origem aberta. O QL no GraphQL significa linguagem de consulta.
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 responde exatamente com os dados que você pediu, sem nada excesso.
Dê uma olhada neste pedido de descanso e em sua resposta correspondente. Esta solicitação deve ver apenas a biografia pública de um usuário.
Solicitação: Get https: // API.Github.com/usuários/
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/usuários/octocat ",
"html_url": "https: // github.com/octocat ",
"seguidores_url": "https: // API.Github.com/usuários/octocat/seguidores ",
"seguinte_url": "https: // api.Github.com/usuários/octocat/seguindo /outros_user ",
"gists_url": "https: // API.Github.com/usuários/occocat/gists /gist_id ",
"Starred_url": "https: // API.Github.com/usuários/occocat/estrelado /proprietário /repo ",
"Subscrições_url": "https: // API.Github.com/usuários/octocat/assinaturas ",
"Organizações_url": "https: // API.Github.com/usuários/octocat/orgs ",
"Repos_url": "https: // API.Github.com/usuários/octocat/repos ",
"Events_url": "https: // API.Github.com/usuários/octocat/events /privacidade ",
"recebeu_events_url": "https: // api.Github.com/usuários/Octocat/recebeu_events ",
"Tipo": "Usuário",
"site_admin": false,
"Nome": "O Octocat",
"Empresa": "Github",
"Blog": "http: // www.Github.com/blog ",
"Localização": "São Francisco",
"Email": NULL,
"Hirable": NULL,
"Bio": NULL,
"Public_repos": 8,
"Public_gists": 8,
"Seguidores": 2455,
"A seguir": 9,
"Created_at": "2011-01-25T18: 44: 36z",
"Update_at": "2018-11-22T16: 00: 23z"
Eu 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. Enquanto o pedido foi simples, pense em todas as informações extras que você está recebendo dessa resposta. Se você processar dados de um milhão de usuários e filtrar todos os dados desnecessários usando, isso não é eficiente. Você está desperdiçando largura de banda, memória e computação em obter, armazenar e filtrar todos os milhões de pares de valores-chave extras que você nunca irá
Além disso, a estrutura da resposta não é algo que você sabe de antemão. Essa resposta JSON é equivalente ao objeto de dicionário em Python, ou um objeto em JavaScript. Outros terminais responderão com objetos JSON que podem ser compostos de objetos aninhados, lista aninhada no 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 endpoint para endpoint.
O GraphQL não depende de verbos HTTP, como posta. Em vez disso, existe apenas um tipo de tipo de solicitação HTTP e endopint para todas as operações relacionadas ao CRUD. No caso do github, isso envolve solicitações de postagem de tipo com apenas um endpoint https: // api.Github.com/grafql
Sendo uma solicitação de postagem, ele pode carregar um JSON como um corpo de texto através do qual serão nossas operações grafql. Essas operações podem ser de tipo consulta Se tudo o que quiser, é ler algumas informações, ou pode ser um mutação Caso os dados precisem ser modificados.
Para fazer chamadas de API grafql, você pode usar o GitHub's GraphQL Explorer. Dê uma olhada neste grafql consulta Para buscar o mesmo tipo de dados (biografia pública de um usuário) que fizemos acima do uso de descanso.
Solicitação: Post https: // API.Github.com/grafql
consulta
Usuário (Login: "Ranvo")
Bio
Resposta:
"dados":
"do utilizador":
"Bio": "entusiastas da tecnologia e ciência. Estou em todos os tipos de coisas não relacionadas de
servidores para física quântica.\ r \ nocionalmente, 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 então você pede o valor de um atributo desse usuário, neste caso esse atributo é Bio. O servidor da API procura as informações específicas exatas e responde com isso e nada mais.
Por outro lado, o GraphQL também permite fazer uma única solicitação e extrair informações que levariam vários pedidos na API de REST tradicional. Lembre -se de que todas as solicitações do GraphQL são feitas para apenas um terminal da API. Tome, por exemplo. Exigiria que dois obtenham resquestas.
Solicitações de descanso: obtenha https: // api.Github.coma/
Obtenha https: // API.Github.coma/chaves
Solicitação grafql: post https: // api.Github.com/grafql/
consulta
Usuário (Login: "Ranvo")
Bio
PublicKeys (Last: 1)
arestas
nó
chave
Resposta GraphQL:
"dados":
"do utilizador":
"Bio": "entusiastas da tecnologia e ciência. Estou em todos os tipos de coisas não relacionadas de
servidores para física quântica.\ r \ nocionalmente, escrevo postagens de blog sobre os interesses acima.",
"Publickeys":
"arestas": [
"nó":
"key": "ssh-ed25519 aaaac3nzac1lzdi1nte5aaaih31mvjrydzeh8od8jvafpruigl65swilykpegbungot"
]
Existem objeto aninhado, mas se você olhar para o seu pedido, eles praticamente correspondem à sua solicitação para que você possa saber e, em certo sentido, moldar a estrutura da resposta que obtém .
GraphQL vem com sua própria curva de aprendizado, que é muito íngreme, ou não é íngreme, dependendo de quem é que você está perguntando. Do ponto de vista objetivo, posso colocar os seguintes fatos para você. É flexível como você viu acima, é introspectivo - ou seja, você pode consultar a API do GraphQL sobre a própria API. Mesmo se você não for construir seu servidor de API usando -o, é provável que você precise interagir com uma API que permite apenas grafql.
Você pode aprender um pouco mais sobre seus técnicos aqui e se quiser fazer chamadas de API grafql de sua estação de trabalho local, use graphiql.