Instiq
第2章 · APIの理解と利用·v1.0.0·更新 2026/7/20·読了目安 約16分

変更要約: 初版

2.1REST APIリクエストの構築

この節の要点

API docsを読み解いて目的のタスクを実現するREST APIリクエストの組み立て——HTTPメソッド(GET/POST/PUT/PATCH/DELETE)とエンドポイント(URL)Content-Type/Accept/Authorizationなどのヘッダクエリパラメータ、JSONのリクエストボディ——と、Basic認証APIキーBearerトークンOAuth)という認証方式を、「このdocsの要求どおりにリクエストを組めているか」という診断として学びます。

API連携は「メソッドの一覧を暗記する」作業ではなく、API docsを読み解いて、目的のタスクを実現する正しいHTTPリクエストを組み立てる作業です。同じ「デバイス一覧を取得する」でも、エンドポイントのURL・必須ヘッダ・認証方式・必要なパラメータはAPIごとに異なり、そのどれか1つを取り違えるだけでリクエストは失敗します。この節では、リクエストの構成要素と代表的な認証方式(Basic・APIキー・Bearerトークン)を押さえ、「docsの要求と自分のリクエストがどこでずれているか」を突き止める目を養います。

2.1.1リクエストの構成要素

  • HTTPメソッドが操作の種類を表す:GET(取得・副作用なし)/POST(作成)/PUT(リソース全体の置換)/PATCH(部分更新)/DELETE(削除)。docsが「リソースを新規作成」と書いていればPOST、「既存の一部フィールドだけ変更」ならPATCHというように、やりたいことからメソッドを選ぶ
  • エンドポイント(URL)がリソースの所在を示し、末尾やクエリで対象を絞る。例:GET https://api.example.com/v1/devices?limit=50クエリパラメータ?limit=50&offset=0)は絞り込み・ページングに、リクエストボディ(多くはJSON)はPOST/PUT/PATCHで送るデータ本体に使う。GETは通常ボディを持たない。
  • ヘッダがリクエストのメタ情報を運ぶ:送るボディの形式を宣言するContent-Type: application/json、欲しい応答形式を伝えるAccept: application/json、そして認証情報を載せるAuthorizationが代表格。JSONボディを送るのにContent-Typeを付け忘れると、サーバが本文を解釈できず400 Bad Request415になりやすい。

2.1.2認証方式

  • Basic認証ユーザ名:パスワードbase64エンコードしてAuthorization: Basic <base64>で送る。実装は単純だがbase64は暗号化ではなく容易に復号できるため、必ずHTTPS(TLS)上で使う。base64を「暗号化された安全な値」と誤解しないこと。
  • APIキー=発行された秘密の文字列を、docsが指定する場所——ヘッダ(例:X-Api-Key: <key>Authorization)かクエリパラメータ(例:?api_key=<key>)——に載せる。docsが指定した場所と名前に厳密に従うのが肝で、ヘッダ指定なのにクエリに置く/キー名を綴り間違える、が典型的な失敗。
  • Bearerトークン=先に認証してアクセストークンを得(OAuthが代表)、以後はAuthorization: Bearer <token>で送る。トークンには有効期限があり、切れれば401になるため再取得(リフレッシュ)が要る。DevNet系の多くのCisco API(Catalyst Center等)はこのトークン方式で、まずトークン発行エンドポイントを叩いてから本APIを呼ぶ。
試験ポイント

「メソッドはやりたいこと(作成=POST・部分更新=PATCH・置換=PUT)から選ぶ」「JSONボディにはContent-Type: application/jsonが要る」「Basicはbase64(暗号化ではない・HTTPS必須)」「APIキーはdocs指定の場所(ヘッダ/クエリ)と名前に厳密に従う」「BearerトークンはAuthorization: Bearer <token>で有効期限あり」が頻出です。設問は「このdocsの要求に対し、どこを直せばリクエストが通るか」で読み解きましょう。

あなたはあるSaaSのAPI docsを見ながら「ユーザ一覧を取得する」スクリプトを書き、次のcurlを実行しましたが401 Unauthorizedが返ります:curl -X GET 'https://api.example.com/v1/users' -H 'Authorization: Basic YWxpY2U6c2VjcmV0'。ここで「トークンを再発行しよう」と飛びつくのは早計で、まずdocsが要求している認証方式を読み直すのが正しい順序です。docsには「Authentication: Bearer token. Obtain a token from POST /v1/auth/token, then send Authorization: Bearer <access_token>」と書かれていました。つまりこのAPIはBasicを受け付けず、あなたは方式そのものを取り違えています。base64のYWxpY2U6c2VjcmV0alice:secretをエンコードしただけで、暗号でも有効なトークンでもありません。正しい手順は、(1)POST /v1/auth/tokenに資格情報を送ってアクセストークンを得る、(2)そのトークンで-H 'Authorization: Bearer <access_token>'として本エンドポイントを呼ぶ、です。もし方式は合っていて(=Bearerを送っていて)なお401なら、次に疑うのはトークンの有効期限切れで、リフレッシュして再送します。一方、認証は通ったのに403 Forbiddenなら話は別で、これは「誰かは分かったが権限が足りない」——トークンのスコープ/ロールの問題です。ここで学ぶべきは、401という一つの応答からでも、docsの要求(方式)→自分が送った値(方式・期限)→スコープという順に切り分ければ、闇雲な再試行なしに原因へ最短で到達できる、ということです。認証は「とりあえず何か付ければ通る」ものではなく、docsが指定した方式・場所・名前に一字一句合わせる作業なのです。

認証方式送り方特徴失敗時の典型
Basic認証`Authorization: Basic <base64(user:pass)>`単純・base64は暗号化ではない・HTTPS必須base64を安全と誤解/HTTPで平文露出
APIキーヘッダ(例`X-Api-Key`)またはクエリ`?api_key=`docs指定の場所・名前に厳密に従う場所(ヘッダ/クエリ)や名前の取り違え→401
Bearerトークン`Authorization: Bearer <token>`先に認証で取得(OAuth)・有効期限あり期限切れ→401/スコープ不足→403
注意

ひっかけ:401が返ったらまずトークンを再発行すればよい」は誤りです——401はまずdocsが要求する認証方式と自分が送っている方式が一致しているか(例:Bearer必須なのにBasicを送っていないか)を確認するのが先で、方式が合っていて期限切れの場合に初めてリフレッシュします。また「Basic認証のbase64は暗号化なので安全」も誤り=base64は単なるエンコードで容易に復号でき、保護は下層のHTTPS(TLS)が担います。

HTTPメソッド・ヘッダ・認証方式(Basic/APIキー/Bearer)の図。
docsの要求どおりにリクエストを組む

2.1.3この節のまとめ

  • リクエストはメソッド(やりたいこと)+エンドポイント+ヘッダ+(必要なら)クエリ/JSONボディで組み立て、JSONボディにはContent-Type: application/jsonを付ける
  • 認証はBasic(base64・HTTPS必須)/APIキー(docs指定の場所・名前)/Bearerトークン(Authorization: Bearer・期限あり)。docsの指定に一字一句合わせる
  • 401は「方式の不一致→期限切れ→(403なら)スコープ不足」の順で切り分け、闇雲な再発行に飛びつかない

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. API docsに「Authentication: send the API key in the request header X-Api-Key」と明記されている。あなたは `curl 'https://api.example.com/v1/devices?api_key=ABC123'` を実行したが `401 Unauthorized` が返る。最も適切な修正はどれか。

Q2. docsは認証を「Bearer token(`POST /auth/token` で取得し `Authorization: Bearer <token>` で送る)」と定めている。あなたは正しいエンドポイントとメソッドで呼んでいるが、ボディをJSONで送っているのにサーバが本文を解釈できず `400 Bad Request` になる。まず確認すべき最も適切な点はどれか。

Q3. あるCisco系APIのdocsに「まず `POST /dna/system/api/v1/auth/token` に資格情報を送ってトークンを取得し、以降の全リクエストにそのトークンを付与する」とある。この認証モデルの理解として最も適切なものはどれか。

理解度を確認第2章「APIの理解と利用」の問題を解く