Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitHubで学ぶ RESTとGraphQL API

GitHubで学ぶ RESTとGraphQL API

RESTとGraphQLの違いをGitHubのAPIを用いて説明します。
【 話すこと】
GitHubのREST APIとGraphQL APIの使い方
-> GitHub APIを叩くきっかけを作るのが目標
【話さないこと】
RESTの設計原則やGraphQLのノードやエッジなどの理論

稲岡天駿

March 16, 2023
Tweet

More Decks by 稲岡天駿

Other Decks in Programming

Transcript

  1. 稲岡天駿(いなおか たかとし) • 福岡工業大学 情報工学科 3年生(休学中->今月で退学) • 現在 オルターブース インターン

    -> 4月に入社予定 • データエンジニアカタパルト1期生 よかったらTwitteフォローお願いします
  2. GitHub APIとは GitHub APIを使用すると、リポジトリ、コミット、プルリクエスト、イ シュー、ユーザー、組織など、GitHub上のほぼ全てのリソースにアクセス することができます。 GitHub APIには、v3とv4のバージョンがあります。 GitHub API

    v3は、RESTfulなWeb APIであり、HTTPメソッドを使用し て、リソースを取得、作成、更新、削除することができます。v3では、 JSON形式のデータを使用します。 GitHub API v4はGraphQL APIです。GraphQL APIは、利用者が必要な データを自由に指定できる柔軟なクエリ言語であり、APIから受け取るデー タの量を減らすことができます。v4もJSON形式のデータを使用します。
  3. GitHub REST APIの使用方法 1. APIキーを取得する a. まず、GitHubの設定ページからAPIキーを取得する必要があります。 2. APIエンドポイントを選択する a.

    GitHub REST APIは、様々なエンドポイントを提供しています。APIを使用して取得 したい情報や実行したい操作に応じて、適切なエンドポイントを選択します。 3. HTTPリクエストを送信する a. 選択したAPIエンドポイントに対して、HTTPリクエストを送信します。リクエスト は、HTTPメソッド(GET、POST、PUT、DELETEなど)と、APIエンドポイントの URLから構成されます。 4. レスポンスを受け取る a. GitHub REST APIは、JSON形式でレスポンスを返します。レスポンスを受け取り、 必要に応じて処理します。
  4. GitHub REST APIの使用方法 1. APIキーを取得する a. https://github.com/settings/tokens 2. APIエンドポイントを選択する a.

    base URL: https://api.github.com b. repos i. GET /orgs/{org}/repos ii. POST /orgs/{org}/repos iii. GET /repos/{owner}/{repo} iv. PATCH /repos/{owner}/{repo} v. DELETE /repos/{owner}/{repo} 3. HTTPリクエストを送信する a. GET https://api.github.com/user のリクエストを送信してみる! (docs: https://docs.github.com/ja/rest/users/users?apiVersion=2022-11-28#list-users) 4. レスポンスを受け取る a. JSONデータが帰ってくる
  5. GitHub GraphQL APIの使用方法 1. APIキーを取得する a. まず、GitHubの設定ページからAPIキーを取得する必要があります。 2. GraphQLクエリを作成する a.

    GitHub GraphQL APIは、リクエストされたデータに対してフルコントロールが可能 な柔軟なクエリ言語を提供しています。APIの利用には、HTTP POSTリクエストで 渡される文字列形式のクエリが必要です。 3. HTTPリクエストを送信する a. APIエンドポイントに対して、HTTPリクエストを送信します。リクエストは、クエ リとアクセストークンを含む必要があります。 4. レスポンスを受け取る a. GitHub REST APIは、JSON形式でレスポンスを返します。レスポンスを受け取り、 必要に応じて処理します。
  6. GitHub GraphQL APIの使用方法 1. APIキーを取得する a. https://github.com/settings/tokens 2. GraphQLクエリを作成する a.

    エンドポイント: https://api.github.com/graphql REST APIは多数のエンドポイントを持ちますが、GraphQL APIは単一のエンドポイ ントを持ちます。 b. クエリ及びミューテーション操作 GraphQL と REST を比較すると、クエリは GET 要求と同様に動作しますが、 ミューテーションは POST/PATCH/DELETE のように動作します。 (docs: https://docs.github.com/ja/graphql/guides/forming-calls-with-graphql) 3. HTTPリクエストを送信する a. RESTと同じくユーザーの情報を取得する 4. レスポンスを受け取る a. JSONデータが帰ってくる
  7. RESTとGraphQLの違い REST • 全てのデータを受け取る • 多数のエンドポイント • オーバーフェッチの問題 • キャッシュが簡単

    • データの取得:GET • データの挿入:POST • データの更新/削除 :PUT/PATCH/DELETE GraphQL • 欲しいデータのみ受け取る • 1 つのエンドポイント • オーバーフェッチの回避 • キャッシュが複雑になりやすい • データの取得:Query • データの挿入:mutation • データの更新/削除:mutation
  8. Pythonでリクエスト送信 import requests import json # リクエストに必要な情報 API_TOKEN = "ghp_xxxxxx"

    owner = "takatoshiinaoka" repo = "osakana-nazono-katakana" url = f'https://api.github.com/repos/{owner}/{repo}' headers = {'Authorization': f'token {API_TOKEN}'} # GET リクエスト送信 response = requests.get(url, headers=headers) # コンソールに表示 print(response.json()) import requests import json # リクエストに必要な情報 owner = "takatoshiinaoka" repo = "osakana-nazono-katakana" API_TOKEN = "ghp_xxxxxx" url = 'https://api.github.com/graphql' headers = {'Authorization': f'token {API_TOKEN}'} query = """ query { repository(owner:"{OWNER}", name:"{REPO}") { name description stargazers { totalCount } watchers { totalCount } } } """ query = query.replace("{OWNER}", owner).replace("{REPO}", repo) # Query リクエストの送信 response = requests.post(url, json={'query': query}, headers=headers) # コンソールに表示 print(response.json()) ↓REST GraphQL→