Slide 1

Slide 1 text

GitHubで学ぶ RESTとGraphQL API

Slide 2

Slide 2 text

稲岡天駿(いなおか たかとし) ● 福岡工業大学 情報工学科 3年生(休学中->今月で退学) ● 現在 オルターブース インターン -> 4月に入社予定 ● データエンジニアカタパルト1期生 よかったらTwitteフォローお願いします

Slide 3

Slide 3 text

今回話すこと ● 話すこと GitHubのREST APIとGraphQL APIの使い方 -> GitHub APIを叩くきっかけを作るのが目標 ● 話さないこと RESTの設計原則やGraphQLのノードやエッジなどの理論

Slide 4

Slide 4 text

APIとは APIとは、Application Programming Interfaceの略称で、異なるソフトウェ ア間で情報や機能を共有するための手段です。 APIを使用すると開発者は、自分のアプリに他のアプリの機能を組み込むこと ができます。例えば、Twitter APIを使用すると、自分のアプリケーション内 でTwitterのタイムラインを表示したり、ツイートを投稿したりできます。 APIには、様々な種類があります。Web APIは、HTTPプロトコルを使用し て、Web上のリソースにアクセスするためのAPIです。REST APIは、Web APIの一種で、HTTPプロトコルを使用してクライアントとサーバー間でリ ソースを転送するための標準化された方法を提供します。

Slide 5

Slide 5 text

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形式のデータを使用します。

Slide 6

Slide 6 text

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形式でレスポンスを返します。レスポンスを受け取り、 必要に応じて処理します。

Slide 7

Slide 7 text

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データが帰ってくる

Slide 8

Slide 8 text

GitHub REST APIの使用方法 https://docs.github.com/ja/rest/users/users# get-the-authenticated-user

Slide 9

Slide 9 text

GitHub REST APIの使用方法 https://docs.github.com/ja/rest/users/users# update-the-authenticated-user

Slide 10

Slide 10 text

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形式でレスポンスを返します。レスポンスを受け取り、 必要に応じて処理します。

Slide 11

Slide 11 text

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データが帰ってくる

Slide 12

Slide 12 text

GitHub GraphQL APIの使用方法

Slide 13

Slide 13 text

RESTとGraphQLの違い REST ● 全てのデータを受け取る ● 多数のエンドポイント ● オーバーフェッチの問題 ● キャッシュが簡単 ● データの取得:GET ● データの挿入:POST ● データの更新/削除 :PUT/PATCH/DELETE GraphQL ● 欲しいデータのみ受け取る ● 1 つのエンドポイント ● オーバーフェッチの回避 ● キャッシュが複雑になりやすい ● データの取得:Query ● データの挿入:mutation ● データの更新/削除:mutation

Slide 14

Slide 14 text

ご清聴ありがとうございました

Slide 15

Slide 15 text

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→