API とは何か ― リクエストの中身から GitHub API を呼ぶまで

・ 約13分で読めます

  1. ホーム
  2. テックブログ
  3. API とは何か ― リクエストの中身から GitHub API を呼ぶまで

「この機能は外部の API を使えばすぐできます」「API の仕様書を読んでおいて」。開発の現場に入ると、API という言葉を毎日のように聞きます。ところが、何となく「データをもらう仕組み」くらいの理解のまま、仕様書を前に手が止まってしまう人も少なくありません。

この記事では、新人・勉強中のエンジニア向けに、API の考え方から、実際に呼び出してデータを取るところまでを、一度で通して説明します。例には、誰でも無料で試せる GitHub の API を使います。内容は 2026 年 11 月 8 日時点で、MDN と GitHub の公式ドキュメントを確認し、コードも実際に動かして確かめたものです。

API とは:アプリ同士の「注文の窓口」

API は Application Programming Interface の略で、「プログラムから別のソフトウェアの機能やデータを使うための決まった入口」のことです。

レストランにたとえると、わかりやすくなります。客は厨房に入って自分で料理を作りません。メニューを見て、店員に「これを 1 つ」と注文し、出てきた料理を受け取ります。厨房の中で何が起きているかは知らなくてかまいません。

  • メニュー:何を頼めるか、どう頼めばよいかが書いてある → API のドキュメント(仕様書)
  • 店員への注文 → リクエスト
  • 出てくる料理 → レスポンス
  • 厨房 → 相手のシステムの内部(データベースやプログラム)

API の良いところは、この「厨房に入らなくていい」点にあります。相手のシステムの作りを知らなくても、決められた形で注文すれば、決められた形で結果が返ってきます。逆に相手のシステムは、中身を作り直しても、窓口の形さえ変えなければ、使う側に影響を与えません。決済、地図、天気、SNS、社内の在庫管理など、今の Web サービスの多くは、こうした窓口を組み合わせて作られています。

API という言葉自体はもっと広い意味を持ち、プログラミング言語のライブラリの関数の集まりなども API と呼びます。この記事では、Web 開発で一番よく使う「HTTP で呼び出す Web API」に絞って説明します。

リクエストとレスポンスの中身

Web API とのやりとりは、ブラウザが Web ページを表示するときと同じ HTTP という仕組みで行います。違いは、返ってくるのが人が読む画面(HTML)ではなく、プログラムが読みやすいデータ(多くは JSON)である点です。

リクエスト:何を、どう頼むか

部品 役割 例
URL(エンドポイント) どの機能・どのデータへの注文か https://api.github.com/repos/laravel/laravel
メソッド 取得・作成・更新・削除のどれか GET
ヘッダー 注文に添える情報(受け取りたい形式、認証情報など) Accept: application/vnd.github+json
ボディ 作成・更新するときに送るデータ {"title": "新しい記事"}

メソッドは、注文の種類を表します。MDN の説明をもとにまとめると、次のとおりです。

メソッド 意味 安全 冪等
GET データを取得する。ボディは付けない はい はい
POST データを送る。新しく作るときによく使う いいえ いいえ
PUT 対象を、送った内容で丸ごと置き換える いいえ はい
PATCH 対象の一部だけを変更する いいえ いいえ
DELETE 対象を削除する いいえ はい

「安全」は、サーバーのデータを変えないことです。「冪等(べきとう)」は、同じリクエストを何回送っても結果が 1 回送ったときと同じになることです。たとえば通信が途中で切れたとき、GET や PUT なら送り直しても問題ありません。一方、POST を送り直すと、同じデータが 2 件作られてしまうことがあります。再送やリトライの処理を書くときに、この違いが効いてきます。

レスポンス:結果がどうだったか

レスポンスは、ステータスコード・ヘッダー・ボディの 3 つでできています。まず見るべきなのが、結果を 3 桁の数字で表すステータスコードです。百の位で 5 つに分類されています。

分類 意味 よく見るもの
1xx 処理の途中経過 ほとんど意識しない
2xx 成功 200 成功 / 201 作成できた / 204 成功・返すデータなし
3xx 別の場所へ移動 301 恒久的に移動した
4xx 頼む側(クライアント)の問題 400 リクエストの形が不正 / 401 認証が必要 / 403 権限がない / 404 見つからない / 429 回数制限を超えた
5xx 相手のサーバーの問題 500 サーバー内部のエラー

4xx と 5xx の区別は、エラーの原因を探すときの最初の手がかりです。4xx なら、まず自分のリクエスト(URL・パラメータ・認証)を疑います。5xx なら相手側の問題なので、時間を置いて試すか、相手に問い合わせます。401 と 403 の違いも覚えておきましょう。401 は「誰なのかわからない(認証していない)」、403 は「誰なのかはわかったが、その操作は許されていない」という意味です。

ボディには、注文の結果のデータが入ります。Web API では JSON という形式がよく使われます。名前と値の組を {} で囲んだ、プログラムで扱いやすい書き方です。

実際に呼んでみる:GitHub の API

ここからは手を動かします。GitHub の「リポジトリの情報を取得する」API は、公開されているリポジトリなら認証なしで呼び出せます。

curl で呼ぶ

curl は、ターミナルから HTTP のリクエストを送れるコマンドです。-i を付けると、ステータスコードとヘッダーも表示されます。

curl -i \
  -H "Accept: application/vnd.github+json" \
  -H "X-GitHub-Api-Version: 2026-03-10" \
  https://api.github.com/repos/laravel/laravel

Accept は「この形式で返してほしい」、X-GitHub-Api-Version は「この版の API の決まりで答えてほしい」という指定です。どちらも GitHub のドキュメントで推奨されています。実行すると、次のような結果が返ってきます(一部を抜き出しています)。

HTTP/2 200
content-type: application/json; charset=utf-8
x-ratelimit-limit: 60
x-ratelimit-remaining: 59

{
  "full_name": "laravel/laravel",
  "language": "Blade",
  "default_branch": "13.x",
  "stargazers_count": 85392,
  ...
}

1 行目の 200 が成功を表し、ボディの JSON にリポジトリの情報が入っています。x-ratelimit- で始まるヘッダーについては、次の節で説明します。URL のリポジトリ名を、存在しない名前に変えて試してみてください。今度は 404 が返るはずです。

なお、API での 404 は「URL が間違っている」だけでなく、「URL の形は正しいが、指定したデータが存在しない」という意味でも返ってきます。MDN もこの点を説明しています。404 が出たら、エンドポイントのつづりと、指定した ID や名前の両方を疑ってください。

JavaScript の fetch で呼ぶ

ブラウザや Node.js では、fetch で同じことができます。

getRepo.js
async function getRepo(owner, repo) {
  const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {
    headers: {
      Accept: "application/vnd.github+json",
      "X-GitHub-Api-Version": "2026-03-10",
    },
  });

  // 404 や 500 でも fetch はエラーにならないので、自分で確かめる
  if (!response.ok) {
    throw new Error(`Response status: ${response.status}`);
  }

  const repoData = await response.json();
  console.log(`${repoData.full_name}: ★${repoData.stargazers_count}`);
}

getRepo("laravel", "laravel").catch((error) => console.error(error.message));

認証と、キーの扱い

さきほどのレスポンスにあった x-ratelimit-limit: 60 は、「1 時間に 60 回まで」という意味です。GitHub の API は、認証なしのリクエストを送り元の IP アドレスごとに数え、1 時間に 60 回までしか受け付けません。残りの回数が x-ratelimit-remaining、回数が戻る時刻が x-ratelimit-reset です。超えると 403 か 429 が返ってきます。

回数制限を超えたときは、すぐに送り直してはいけません。GitHub のドキュメントは、x-ratelimit-reset の時刻まで待ってから送るよう求めていて、制限中に送り続けると、連携そのものを止められることがあるとしています。ループの中で API を呼ぶ処理を書くときは、残りの回数を見て待つ処理を入れるか、必要なデータをまとめて取る方法がないかを先に調べましょう。

本格的に使うときは、自分が誰なのかを伝える「認証」をします。多くの API では、発行してもらったトークン(API キー)を、リクエストのヘッダーに付けて送ります。

curl -H "Authorization: Bearer <発行したトークン>" \
  -H "Accept: application/vnd.github+json" \
  https://api.github.com/repos/laravel/laravel

GitHub の場合、個人のトークンで認証すると、上限は 1 時間に 5,000 回に増えます。認証しないと使えない機能(非公開のデータや、書き込みの操作など)も使えるようになります。

トークンは、あなたとして API を使うための「合い鍵」です。漏れれば、他人があなたになりすましてデータを読んだり消したりできます。GitHub のドキュメントが挙げている注意点のうち、特に大事なものは次のとおりです。

  • コードに直接書かない。.env などの設定ファイルや、シークレットの管理機能に置き、リポジトリには入れない
  • 権限は必要最小限にし、有効期限を付ける
  • チャットやメールに貼らない。共有するときは、パスワード管理ツールなどの安全な方法を使う
  • 漏れたかもしれないときは、すぐに新しいトークンを発行し、古いものを無効にする

ブラウザで動く JavaScript にトークンを書くのも危険です。ページを開いた人なら誰でも中身を見られるからです。トークンが必要な API は、サーバー側のプログラムから呼び出すのが基本です。

初めての API ドキュメントで確かめること

API ごとに書き方は違いますが、ドキュメントで探す項目はだいたい共通です。初めて使う API では、次の順に確かめると迷いにくくなります。

  • エンドポイントとメソッド:やりたいことに対応する URL と、GET・POST などのどれを使うか
  • 認証の方法:認証なしで使えるか。トークンはどこで発行し、どのヘッダーで送るか
  • パラメータ:URL に入れる値、クエリ文字列、ボディで送る項目。必須か任意か
  • レスポンスの形:成功したときに返る JSON の例と、各項目の意味
  • エラー:どんなときに何番のステータスコードが返るか
  • 回数制限:何回まで呼べるか。超えたらどうなるか
  • バージョン:API の版の指定方法と、古い版がいつまで使えるか

わからないときは、まずドキュメントにある curl の例をそのまま実行してみるのがおすすめです。動く例を手元で確かめてから、少しずつ自分のコードに書き換えていくと、どこで失敗しているかを切り分けやすくなります。

まとめ

  • API は、相手のシステムの中身を知らなくても、決まった形で注文すれば決まった形で結果が返ってくる「窓口」です
  • リクエストは URL・メソッド・ヘッダー・ボディ、レスポンスはステータスコード・ヘッダー・ボディでできています。エラーの原因は、まず 4xx か 5xx かで切り分けます
  • トークンは合い鍵です。コードに書かず、最小の権限と期限を付けて扱います

次の一歩として、仕事で使う予定の API のドキュメントを開き、上のチェックリストの項目を順に探してみてください。

参考リンク

記事一覧へ

お問い合わせ

プロジェクトのご相談、お見積もり、技術的なご質問など、お気軽にお問い合わせください。

WEB

フォームからご連絡ください。

お問い合わせフォーム

CONSULTING

  • システム導入相談
  • サイト制作相談
  • 技術課題解決
  • 運用・保守