この記事は、 「ネットワーク上級編|要件定義・設計・クラウド・自動化へ進む」 の第56回です。
第6章では、Python・SSH・Ansible・APIなどを使い、 ネットワーク運用を人の手だけに依存しない仕組みへ変えていく方法を学びます。
REST APIとは?ネットワーク自動化で使う仕組み・HTTPメソッド・実行例を解説
ネットワーク機器を操作する方法は、CLIだけではありません。 REST APIを利用すると、プログラムから機器や管理システムへ要求を送り、 情報取得・設定変更・機器登録などを自動化できます。 今回は、REST APIを使うために必要なURL、HTTPメソッド、ヘッダー、 JSON、ステータスコード、認証の基本を、ネットワークエンジニア向けに整理します。
SSHによる自動化では、プログラムからCLIコマンドを実行しました。 Ansibleでは、複数機器への設定投入を自動化しました。
REST APIでは、さらに発想が変わります。 CLI画面を操作するのではなく、機器や管理システムが公開している プログラム向けの窓口へ直接要求を送ります。
クラウドサービス、SD-WAN管理システム、ネットワークコントローラー、 ファイアウォール管理製品などでは、APIを利用した操作が重要になります。
この記事を読み終えるとできること
- APIとREST APIの違いを説明できる
- REST APIのリクエストとレスポンスを説明できる
- GET・POST・PUT・DELETEの役割を区別できる
- URL・ヘッダー・ボディの役割を説明できる
- HTTPステータスコードから結果を判断できる
- ネットワーク自動化でAPIを利用する流れを説明できる
APIとは何か
APIとは、あるソフトウェアやシステムの機能・データを、 別のプログラムから利用するためのインターフェースです。
APIは Application Programming Interface の略です。
人がネットワーク機器を操作する場合、 SSHでログインしてCLIコマンドを入力する方法があります。
一方、プログラムから同じような操作をするときに、 人間向けのCLI画面を操作するのではなく、 プログラム向けに用意された入口を利用できる場合があります。 その入口がAPIです。
CLI操作とAPI操作の違い
SSHでログイン
コマンドを入力
コマンドを処理
APIへ要求
GET / POSTなど
要求を処理
APIは「プログラムからシステムを操作するための窓口」 と考えると理解しやすくなります。
REST APIとは何か
RESTは Representational State Transfer の略で、Webのような分散システムを設計するための アーキテクチャスタイルです。
実務で「REST API」と呼ばれるAPIでは、 HTTPを利用してリソースを指定し、 GETやPOSTなどのHTTPメソッドを使って 情報取得や操作を行う構成が広く使われています。
RESTとHTTPは同じ意味ではありません。
RESTはアーキテクチャ上の考え方であり、 HTTPは通信プロトコルです。 REST APIではHTTPがよく利用されるため、 初めて学ぶ段階ではHTTPの仕組みとセットで理解すると分かりやすくなります。
リソースをURLで表す
APIでは、操作したい対象をURLで表します。 この対象をリソースと考えます。
https://api.example.local/api/v1/devices
この例では、devicesというリソースを表しています。
特定の機器を指定するAPIであれば、次のような形式になる場合があります。
https://api.example.local/api/v1/devices/1001
APIのURLやパスは製品ごとに異なります。 実際に利用するときは、必ず対象製品のAPIドキュメントを確認します。
REST APIの通信の流れ
REST APIでは、基本的に クライアントがリクエストを送り、 APIサーバーがレスポンスを返す という流れになります。
APIリクエストとレスポンス
自動化プログラム
情報を要求
要求を処理
- クライアントがAPIのURLを指定する どのリソースを操作するのか決めます。
- HTTPメソッドを決める 情報取得ならGET、作成ならPOSTなど、 目的に合わせたメソッドを使用します。
- 必要なヘッダーや認証情報を付ける APIキーやトークンなどが必要になる場合があります。
- 必要に応じてデータを送信する 設定変更などではJSON形式のデータを送信することがあります。
- サーバーがレスポンスを返す HTTPステータスコードやデータを確認し、 処理が成功したか判断します。
APIリクエストを構成する要素
REST APIを利用するときは、 主に次の4つを確認します。
URL
どのAPIサーバーの、どのリソースを操作するか指定します。
/api/v1/devices
HTTPメソッド
情報取得・作成・更新・削除など、 何を行いたいのかを示します。
GET POST PUT
ヘッダー
認証情報や、送受信するデータ形式などを指定します。
Authorization
Content-Type
ボディ
POSTやPUTなどでサーバーへ渡すデータを格納します。 JSON形式が使われることがあります。
APIリクエストのイメージ
POST /api/v1/devices HTTP/1.1
Host: api.example.local
Authorization: Bearer <token>
Content-Type: application/json
{
"hostname": "RTR-01",
"ip_address": "192.0.2.10"
}
この例では、APIサーバーへ 「RTR-01という機器情報を登録してください」 という内容を送信しているイメージです。
HTTPメソッドの基本
REST APIを読むうえで、 GET・POST・PUT・DELETEなどのHTTPメソッドは重要です。
| メソッド | 代表的な用途 | ネットワーク管理での例 |
|---|---|---|
| GET | 情報を取得する | 機器一覧やインターフェース状態を取得する |
| POST | 新しい処理やリソース作成を要求する | 機器を管理システムへ登録する |
| PUT | 指定したリソースの状態を作成・置換する | 指定リソースの設定内容を更新する |
| PATCH | リソースの一部を変更する用途で使われる | 説明文や一部パラメータだけ変更する |
| DELETE | リソースを削除する | 管理対象機器の登録を削除する |
初めてREST APIを学ぶ場合は、 GET=取得、POST=登録・処理、PUT/PATCH=更新、 DELETE=削除 という大枠から覚えると理解しやすくなります。
実際に各メソッドが何を行うかは、 APIを提供する製品の仕様によって異なります。 「POSTなら必ず新規作成」と決めつけず、 APIリファレンスを確認してください。
HTTPステータスコードを確認する
APIを実行した後は、 返ってきたデータだけでなく HTTPステータスコード を確認します。
| コード例 | 意味 | 確認イメージ |
|---|---|---|
| 200 | OK | 要求が正常に処理された |
| 201 | Created | リソースが作成された |
| 400 | Bad Request | 送信内容や形式を確認する |
| 401 | Unauthorized | 認証情報を確認する |
| 403 | Forbidden | 権限不足などを確認する |
| 404 | Not Found | URLや対象リソースを確認する |
| 500 | Internal Server Error | APIサーバー側の処理を確認する |
400番台と500番台を分けて考える
トラブルシューティングでは、 ステータスコードの分類を見ると確認方向を整理できます。
- 2xx:正常処理された可能性が高い
- 4xx:リクエスト・認証・権限・URLなどクライアント側を確認する
- 5xx:APIサーバー側でエラーが発生している可能性を確認する
API障害では「Pythonが動かない」と一括りにせず、 HTTP通信は成立したのか、何番のステータスコードが返ったのか を確認することが重要です。
JSONとREST API
REST APIでは、 リクエストやレスポンスのデータとして JSONがよく利用されます。
たとえば、ネットワーク機器の情報取得結果が 次のように返ってくる場合があります。
{
"hostname": "RTR-01",
"management_ip": "192.0.2.10",
"status": "up"
}
CLIでは人が読みやすい文字列として表示されますが、 APIではプログラムが処理しやすい構造化データとして取得できることがあります。
CLI出力とAPIデータの考え方
人が画面を読む
必要箇所を抽出
情報を要求
プログラムで処理
JSONを理解できるようになると、 APIレスポンスからIPアドレスや状態だけを取り出し、 条件判定・一覧化・設定生成などにつなげやすくなります。
JSONの具体的な構造や読み方は、 次回「JSON・YAMLの読み方」 で詳しく解説します。
APIの認証
ネットワーク機器や管理システムのAPIを、 誰でも自由に実行できる状態にはできません。
そのため、多くのAPIでは何らかの認証・認可が必要です。
ユーザー名・パスワード
Basic認証など、 アカウント情報を利用する方式があります。
APIキー
発行されたキーをリクエストへ付与して、 API利用者を識別します。
アクセストークン
認証後に取得したトークンを Authorizationヘッダーなどへ設定します。
証明書
製品や環境によっては、 クライアント証明書などを利用する場合があります。
APIキー・パスワード・トークンをPythonコードへ直接書き込んだまま、 Gitなどへ登録しないようにします。
認証情報は環境変数やシークレット管理の仕組みなどを利用し、 権限も必要最小限にします。
ネットワークでREST APIを使う場面
ネットワークエンジニアがREST APIを使う目的は、 「APIを使うこと」そのものではありません。
人が繰り返している情報取得や設定処理を、 プログラムから再現できるようにすることが目的です。
| 用途 | APIで行う処理例 |
|---|---|
| 機器情報取得 | ホスト名、IPアドレス、シリアル番号などを取得する |
| 状態監視 | インターフェース状態やアラームを取得する |
| 設定変更 | ネットワーク設定を追加・更新する |
| 機器登録 | 管理システムへ新しい機器を登録する |
| クラウド操作 | ネットワーク、サブネット、ルートなどを操作する |
| SD-WAN・コントローラー | サイトやポリシー、状態情報を取得・操作する |
| セキュリティ製品 | ポリシーやオブジェクト情報を取得・変更する |
100台の装置情報を集める場合
人が100台へSSH接続し、showコマンドを入力して、 Excelへ転記する方法では時間がかかります。
APIが利用できるシステムであれば、 PythonなどからAPIを繰り返し呼び出し、 必要なデータをまとめて取得できる可能性があります。
APIを利用した情報収集
APIを実行
情報を提供
機器情報
自動整理
curlでAPIを実行するイメージ
APIの動作確認では、
curlを使ってHTTPリクエストを送る方法があります。
たとえば、次のコマンドは架空のAPIから 機器一覧を取得するイメージです。
curl -X GET \
"https://api.example.local/api/v1/devices" \
-H "Authorization: Bearer <token>" \
-H "Accept: application/json"
要素を分解すると、次のようになります。
| 部分 | 意味 |
|---|---|
-X GET |
GETメソッドを使用する |
https://... |
APIのURL |
Authorization |
認証情報を送る |
Accept: application/json |
JSON形式のレスポンスを要求する例 |
上記URL・トークン・APIパスは学習用の例です。 実際の製品では、メーカーのAPIドキュメントに従ってください。
PythonからREST APIを利用するイメージ
Pythonでは、HTTPリクエストを扱うライブラリを使うことで、 APIアクセスをプログラムへ組み込めます。
以下は処理イメージです。
import requests
url = "https://api.example.local/api/v1/devices"
headers = {
"Authorization": "Bearer <token>",
"Accept": "application/json"
}
response = requests.get(
url,
headers=headers,
timeout=10
)
print(response.status_code)
if response.status_code == 200:
data = response.json()
print(data)
重要なのはコードを暗記することではありません。
- URLを指定する
- 認証情報などのヘッダーを作る
- GETリクエストを送る
- ステータスコードを確認する
- レスポンスデータを処理する
という流れを理解してください。
CLI自動化では「コマンドを送って結果文字列を読む」という発想でした。 APIでは 「リソースへ要求を送り、構造化されたレスポンスを処理する」 という発想に変わります。
REST APIとRESTCONF
ネットワーク自動化を学んでいると、 RESTCONFという言葉を見ることがあります。
RESTCONFは、 YANGで定義されたネットワーク管理データへ HTTPベースでアクセスするためのプロトコルです。
一般的なREST API
ベンダーやサービスが独自にAPIのURL、 リソース構造、データ形式などを設計することがあります。
RESTCONF
YANGでモデル化された設定・状態データへ、 HTTPベースでアクセスするための標準化された仕組みです。
Cisco IOS XEなど、 プログラマビリティを備えたネットワークOSでは、 CLI以外にNETCONFやRESTCONFなどを利用できる環境があります。
REST APIを学んだ後にRESTCONFを学ぶと、 URL、HTTPメソッド、ヘッダー、レスポンスという考え方を そのまま応用しやすくなります。
REST APIでよくある失敗
1.URLだけ見て実行する
APIはURLだけでなく、 HTTPメソッド、ヘッダー、認証、ボディの指定が必要です。
2.ステータスコードを確認しない
レスポンス本文だけを見ると、 失敗原因の切り分けが難しくなります。
3.認証情報をコードへ直接書く
トークンやパスワードがGitなどへ流出する原因になります。
4.本番環境でいきなりPOSTする
情報取得と違い、 POST・PUT・DELETEなどは設定やデータを変更する可能性があります。
5.タイムアウトを考えない
APIサーバーが応答しない場合に、 スクリプトが長時間停止する可能性があります。
6.エラー処理を入れない
401、404、500などが返っても処理を続けると、 誤った結果になる可能性があります。
自動化は、1回の操作を高速化するだけではありません。
間違った処理も高速・大量に実行できます。 そのため、APIによる設定変更では事前検証、権限制御、 実行ログ、エラー処理、切り戻し方法まで考える必要があります。
顧客・上司へREST APIをどう説明するか
技術に詳しくない相手へ 「REST」「HTTPメソッド」「JSON」と説明しても、 API導入の価値は伝わりにくい場合があります。
説明例
「現在は担当者が各機器へログインして状態を確認しています。 APIを利用すると、管理システムから必要な情報をプログラムで取得できるため、 定型的な確認作業を自動化できます。 人による転記ミスを減らし、 同じ手順で繰り返し実行できるようになります。」
技術を業務効果へ変換する
| 技術的な説明 | 業務上の説明 |
|---|---|
| GET APIで状態取得 | 定期確認を自動化できる |
| JSONでデータ取得 | 手作業でのExcel転記を減らせる |
| APIから設定変更 | 標準化した変更を複数対象へ展開できる |
| ステータスコードを判定 | 失敗時に自動で異常として扱える |
| APIと他システムを連携 | 申請・設定・確認などを一連の処理にできる |
上級エンジニアには、 「APIを使えます」だけでなく、 APIによってどの作業を減らし、 どのリスクを低減できるのか を説明する力が求められます。
REST APIで使われる英語表現
よく使われる単語
| 英語 | 意味 |
|---|---|
| Request | 要求 |
| Response | 応答 |
| Endpoint | APIへアクセスするURL・接続先 |
| Resource | 操作対象となるリソース |
| Header | HTTPヘッダー |
| Request body | リクエスト本文 |
| Authentication | 認証 |
| Authorization | 認可・権限に関する処理 |
| Token | 認証などに使用するトークン |
| Status code | HTTPステータスコード |
APIドキュメントでよく見る表現
Returns a list of network devices.
ネットワーク機器の一覧を返します。
This endpoint requires authentication.
このエンドポイントには認証が必要です。
The request body must be provided in JSON format.
リクエストボディはJSON形式で指定する必要があります。
Returns HTTP 404 if the resource is not found.
リソースが見つからない場合、HTTP 404を返します。
理解度チェック
REST APIの用語を暗記するだけでなく、 リクエストの構造と処理の流れを理解できているか確認しましょう。
問題1.APIの説明として最も適切なものはどれですか。
- ネットワーク機器専用の暗号化方式
- プログラムから別のシステムの機能やデータを利用するためのインターフェース
- IPアドレスを自動配布するプロトコル
- SSHの代わりに使用するケーブル規格
解答を見る
APIは、別のプログラムからシステムの機能やデータを 利用するためのインターフェースです。
問題2.機器一覧を取得したい場合、 最初に検討するHTTPメソッドはどれですか。
- GET
- DELETE
- PUT
- CONNECT
解答を見る
情報取得ではGETが使用されるのが基本です。 ただし、実際のAPI仕様は必ず製品ドキュメントで確認します。
問題3.APIから「401 Unauthorized」が返りました。 最初に確認すべき項目として適切なのはどれですか。
- LANケーブルのカテゴリ
- ルーティングプロトコルのAD値
- ユーザー情報やトークンなどの認証情報
- VLAN ID
解答を見る
401が返った場合は、 まずAPIへ渡している認証情報を確認します。
問題4.REST APIのリクエストを構成する代表的な要素を 4つ挙げてください。
解答を見る
- URL
- HTTPメソッド
- HTTPヘッダー
- リクエストボディ
問題5.APIを利用した設定変更で、 GETによる情報取得以上に注意が必要な理由を説明してください。
解答例を見る
POST、PUT、PATCH、DELETEなどの操作では、 実際の設定や管理データを変更・削除する可能性があるためです。 本番実行前に対象、権限、送信データ、 切り戻し方法などを確認する必要があります。
実践演習:APIリクエストを読み解く
あなたはネットワーク管理システムから、 登録されている機器情報を取得する作業を担当しています。
次のAPI仕様が提示されました。
Method:
GET
URL:
https://api.example.local/api/v1/devices
Request Header:
Authorization: Bearer <token>
Accept: application/json
Response:
HTTP/1.1 200 OK
Content-Type: application/json
[
{
"hostname": "RTR-01",
"management_ip": "192.0.2.10",
"status": "up"
},
{
"hostname": "SW-01",
"management_ip": "192.0.2.20",
"status": "up"
}
]
課題1.HTTPメソッドの目的を答える
このAPIでGETが使われている理由を説明してください。
解答例を見る
登録されているネットワーク機器の情報を APIサーバーから取得する処理だからです。
課題2.認証情報を探す
このリクエストで認証に関係している部分を答えてください。
解答を見る
Authorization: Bearer <token>
の部分です。
課題3.レスポンスから情報を読み取る
次の内容を答えてください。
- 取得できた機器数
- RTR-01の管理IPアドレス
- SW-01の状態
RTR-01:________
SW-01:________
解答を見る
- 機器数:2台
- RTR-01の管理IP:192.0.2.10
- SW-01の状態:up
課題4.障害を切り分ける
同じAPIを実行したところ、 次の結果が返りました。
HTTP/1.1 401 Unauthorized
まず何を確認するべきでしょうか。
解答例を見る
- Authorizationヘッダーが付与されているか
- トークンが正しいか
- トークンが期限切れになっていないか
- 認証方式がAPI仕様と一致しているか
課題5.自動化の処理フローを考える
毎朝9時にAPIから機器状態を取得し、 down状態の装置だけを一覧化する処理を作るとします。
必要な処理を順番に考えてください。
2.____________________
3.____________________
4.____________________
5.____________________
解答例を見る
- APIへGETリクエストを送る
- HTTPステータスコードを確認する
- 正常ならJSONレスポンスを読み込む
- statusがdownの機器だけ抽出する
- CSV・メール・監視システムなどへ出力する
自分の言葉で説明する課題
後輩エンジニアから、 「SSHでコマンドを取れるなら、APIを使う意味は何ですか?」 と質問されました。
1分程度で説明してください。
説明例を見る
SSHでは、人がCLIで操作するのと似た形で コマンドを送り、文字列として結果を取得します。
一方APIでは、システムが公開しているプログラム向けの入口に対して、 HTTPなどを使って情報取得や変更を要求できます。 JSONのような構造化データを取得できるAPIであれば、 プログラムから必要な項目を扱いやすく、 他のシステムとの連携にも利用できます。
まとめ
- APIは、別のプログラムからシステムの機能やデータを 利用するためのインターフェース
- RESTはWebのような分散システムのための アーキテクチャスタイル
- REST APIではHTTPを使い、 URLでリソースを指定して操作する構成が広く利用されている
- APIリクエストではURL、HTTPメソッド、 ヘッダー、ボディなどを確認する
- GETは情報取得、POSTは処理・作成、 PUT/PATCHは更新、DELETEは削除の用途で利用される
- API実行後はレスポンス本文だけでなく HTTPステータスコードを確認する
- JSONなどの構造化データを利用すると、 プログラムから情報を処理しやすい
- APIキーやトークンなどの認証情報を ソースコードへ直接埋め込まない
- 設定変更系APIでは事前検証、権限、 エラー処理、ログ、切り戻しまで考える
- ネットワーク分野ではRESTCONFなど、 HTTPベースのプログラマブルな管理方式も利用される
REST APIを使えるようになる第一歩は、 コードを暗記することではありません。 「どのURLへ、何のメソッドで、何を送り、 何が返ってきたのか」を分解して考えられることです。
上級編では、要件定義・基本設計・BGP・クラウド・セキュリティから、 Python、Ansible、REST API、Git、テレメトリー、 AIを活用したログ調査まで順番に学びます。

コメント