Instiq
第6章 · 自動化とプログラマビリティ·v1.0.0·更新 2026/7/18·読了目安 約16分

変更要約: 初版

6.3REST APIとデータ形式

この節の要点

コントローラや機器を自動化から操作する土台となるREST APIの性質(ステートレス・HTTP上で動く)、CRUD操作とHTTPメソッド(POST/GET/PUT/DELETE)の対応、成否を示すHTTPステータスコード(200/201/4xx/5xx)、そしてデータ交換の主役JSON{}オブジェクト・[]配列・キーと値・データ型)の読み取りを、実務の観点から学びます。

前の節のコントローラを「スクリプトから操作する」その入口がREST APIです。REST APIは私たちが普段ブラウザで使っているHTTPの仕組みをそのまま流用し、機器の状態を「取得(GET)」「作成(POST)」「更新(PUT)」「削除(DELETE)」します。そしてやり取りされるデータの大半はJSONという軽量な形式です。この節では、REST APIの基本的な作法と、返ってきたJSONを正しく読み取る力を、CLIの代わりにAPIで運用する実務の視点から身につけます。

6.3.1REST APIの性質とCRUD/HTTPメソッド

  • REST API=HTTP上でリソース(機器・設定・状態)をURLで指し示し、HTTPメソッドで操作するAPIスタイル。ステートレス=サーバはリクエスト間でクライアントのセッション状態を保持せず、各リクエストが自己完結して必要情報(認証トークン等)を都度含む。
  • CRUD(Create/Read/Update/Delete)はHTTPメソッドに対応する=作成=POST/取得=GET/更新=PUT(部分更新はPATCH)/削除=DELETE。例:GET /api/v1/interfaces は全インタフェースの状態取得、POST /api/v1/vlans は新規VLAN作成。
  • リクエストにはヘッダContent-Type: application/json・認証トークン等)と、作成/更新時はボディ(JSON等のペイロード)を付ける。GETは通常ボディを持たずURLで対象を指定する。

6.3.2HTTPステータスコードで成否を読む

  • 2xx=成功200 OK(取得/更新成功)、201 Created(新規作成成功)。自動化スクリプトはこのコードで処理継続を判断する。
  • 4xx=クライアント側の誤り400 Bad Request(リクエストの形式不正)、401 Unauthorized(未認証)、403 Forbidden(権限不足)、404 Not Found(対象なし)。依頼側の直しどころを示す。
  • 5xx=サーバ側の誤り500 Internal Server Error 等。リクエストは妥当でもサーバ内部で失敗した状態で、依頼側の修正では直らない。4xxか5xxかで切り分け先(自分の依頼 vs サーバ)が変わる。
試験ポイント

「CRUD⇔HTTPメソッド(作成POST/取得GET/更新PUT/削除DELETE)」「RESTはステートレス」「2xx成功・4xxクライアント誤り・5xxサーバ誤り」が最頻出です。特に401(未認証)と403(権限不足)400(形式不正)と404(対象なし)の意味の違いを取り違えないようにしましょう。

6.3.3JSONの読み取り(オブジェクト・配列・データ型)

  • JSONキー:値のペアを{ }で囲ったオブジェクトで表す軽量データ形式。値には文字列"up")・数値1500・引用符なし)・真偽値true/false)・null・入れ子のオブジェクト・配列を取れる。
  • 配列[ ]で囲った順序付きの並び。例 "addresses": ["10.0.0.1", "10.0.0.2"] は2要素の文字列配列。要素は0番目から数えるaddresses[0]"10.0.0.1")。
  • データ型の見分けが実務で効く="enabled": true は真偽値だが "enabled": "true"文字列で、スクリプトが型を取り違えると条件判定を誤る。"mtu": 1500 は数値、"mtu": "1500" は文字列。

あなたは監視スクリプトを書いていて、コントローラの GET /api/v1/interfaces/GigabitEthernet0/1 に対し次のJSONが返ってきたとします——{ "name": "GigabitEthernet0/1", "enabled": true, "mtu": 1500, "addresses": ["10.0.0.1", "10.0.0.2"], "description": null }。まずステータスコードが 200 OK であることを確認して初めてボディの解釈へ進みます(401 なら認証トークンの問題、404 ならそのインタフェース名が存在しない、と切り分けが変わるためです)。ボディは1つのオブジェクト{ })で、enabled の値は引用符のない true なので真偽値——ここで "true"(引用符付き=文字列)と取り違えると、if enabled true の判定が常に偽になるバグを生みます。mtu1500 で引用符がないため数値として計算に使えます。addresses[ ]配列で、addresses[0]"10.0.0.1"addresses[1]"10.0.0.2"(0番目から数える点に注意)。descriptionnull で「値が未設定」を意味し、空文字列 "" とは区別されます。もしこのインタフェースを無効化したいなら、取得(GET)ではなく更新(PUT)で { "enabled": false } を送るのが正しく、削除(DELETE)はインタフェース設定そのものを消す別の操作です。このようにステータスで成否を切り分け → JSONの型と構造を正確に読む → 目的に合ったメソッドで操作するという一連の作法が、CLIをAPIに置き換える運用の基礎になります。

CRUD操作HTTPメソッド成功時の主なコード
Create(作成)POSTPOST /api/v1/vlans201 Created
Read(取得)GETGET /api/v1/interfaces200 OK
Update(更新)PUT(部分はPATCH)PUT /api/v1/interfaces/Gi0/1200 OK
Delete(削除)DELETEDELETE /api/v1/vlans/50200 / 204
注意

ひっかけ: JSONの "enabled": "true" を真偽値と読むのは誤りです——引用符で囲まれているため文字列であり、真偽値の true(引用符なし)とは型が異なります。また「RESTはステートフルでサーバがセッションを保持する」も誤り=RESTはステートレスで、各リクエストが認証情報等を自己完結して含みます。401(未認証)と403(認証済みだが権限不足)も混同しないようにしましょう。

CRUD/HTTPメソッド、ステータスコード、JSON構造の図。
HTTPとJSONで機器を操作する

6.3.4この節のまとめ

  • REST APIステートレスなHTTPベースで、CRUD作成POST/取得GET/更新PUT/削除DELETEに対応させる
  • HTTPステータス2xx成功・4xxクライアント誤り・5xxサーバ誤り。401(未認証)と403(権限不足)、400(形式不正)と404(対象なし)を区別する
  • JSON{}オブジェクトと[]配列で構成し、文字列/数値/真偽値/nullの型を正確に読む(true"true" は別物・配列は0番目から)

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

理解度チェック

(軽い確認用)

Q1. 自動化スクリプトからコントローラのREST APIを呼び、既存のインタフェースGi0/1の設定を「有効から無効」へ変更したい。用いるHTTPメソッドとして最も適切なものはどれか。

Q2. REST API呼び出しの結果、レスポンスとして `401 Unauthorized` が返ってきた。自動化スクリプトが次に確認・対処すべき事項として最も適切なものはどれか。

Q3. REST APIから次のJSONが返った:`{ "enabled": true, "mtu": 1500, "addresses": ["10.0.0.1", "10.0.0.2"] }`。この内容の解釈として最も適切なものはどれか。

理解度を確認第6章「自動化とプログラマビリティ」の問題を解く

学習の記録を残しませんか

参考書はすべて無料で読めます。無料登録すると、問題集での演習・既読と進捗の記録・間違えた問題の復習・ハイライトが使えます。