GraphQL手習い
Categories: TECHNOLOGY
GraphQL何もわからない...初めてなので優しくしてほしい。
require 'graphql/client'
require 'graphql/client/http'
module ZenhubDone
ACCESS_TOKEN = ENV['GITHUB_FOR_ZENHUB_TOKEN']
ENDPOINT = 'https://api.github.com/graphql'
http = GraphQL::Client::HTTP.new(ENDPOINT) do
def headers(context)
{ "Authorization" => "Bearer #{ACCESS_TOKEN}"}
end
end
schema = GraphQL::Client.load_schema(http)
client = GraphQL::Client.new(schema: schema, execute: http)
Query = client.parse <<-GraphQL
query {
viewer {
login
}
}
GraphQL
response = client.query(Query)
=> #<GraphQL::Client::Response:0x00007fd6dad6e5a8
@data=#< viewer=...>,
@errors=#<GraphQL::Client::Errors @messages={} @details={}>,
@extensions=nil,
@original_hash={"data"=>{"viewer"=>{"login"=>"katsumata-ryo"}}}>
end
なんか、何かが取れたっぽいんだけど全然わからない。
とりあえず動いたからなんとなくこれからドキュメント読んでいけばわかりやすくなりそう。RESTと比べると宣言的な感じがする(感じがするだけでなにもわからない)。
GithubのAPIドキュメントみながら試行錯誤してるけど、なんかちょっとずつ見えてきたぞ
# マイルストーン内のIssueをとってくる
Query = client.parse <<-GraphQL
query {
repository(name: "XXXX", owner: "XXXXX") {
milestones(last: 1) {
nodes {
id
title
issues(first: 100) {
nodes {
id
number
title
closed
}
}
pullRequests(first: 100) {
nodes {
id
number
title
closed
}
}
}
totalCount
}
}
}
GraphQL
response = client.query(Query)
=> #<GraphQL::Client::Response:0x00007fd69a8a1448
@data=#< repository=...>,
@errors=#<GraphQL::Client::Errors @messages={} @details={}>,
@extensions=nil,
@original_hash=
{"data"=>
{"repository"=>
{"milestones"=>
{"nodes"=>
[{"id"=>"XXXX",
"title"=>"XXXXX",
"issues"=>
{"nodes"=>
[{"id"=>"xxxxxxx",
"number"=>0000,
"title"=>"XXXXX",
"closed"=>false},
"pullRequests"=>{"nodes"=>[]}}],
"totalCount"=>000}}}}>
Node・Connection とかの概念が体に染み渡るともっとシュッとかけそうな気がする。それにしても宣言的、型みたいだ。
取りたい内容はなんとなく取れてきた。
一通り取れそうな感じになったらドキュメント読んでみよう。
Tweet