NOTO

GraphQL手習い

 Date:2020-05-25 00:02:42 +0900
 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