GraphQL手習い

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 とかの概念が体に染み渡るともっとシュッとかけそうな気がする。それにしても宣言的、型みたいだ。

取りたい内容はなんとなく取れてきた。

一通り取れそうな感じになったらドキュメント読んでみよう。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください