REST APIとは?ネットワーク自動化で使う仕組み・HTTPメソッド・実行例を解説

当ページのリンクには広告が含まれています。
ネットワーク上級編 56/全70記事

この記事は、 「ネットワーク上級編|要件定義・設計・クラウド・自動化へ進む」 の第56回です。

第6章では、Python・SSH・Ansible・APIなどを使い、 ネットワーク運用を人の手だけに依存しない仕組みへ変えていく方法を学びます。

NETWORK ADVANCED|CHAPTER 6 AUTOMATION

REST APIとは?ネットワーク自動化で使う仕組み・HTTPメソッド・実行例を解説

ネットワーク機器を操作する方法は、CLIだけではありません。 REST APIを利用すると、プログラムから機器や管理システムへ要求を送り、 情報取得・設定変更・機器登録などを自動化できます。 今回は、REST APIを使うために必要なURL、HTTPメソッド、ヘッダー、 JSON、ステータスコード、認証の基本を、ネットワークエンジニア向けに整理します。

対象レベル Level 3〜4・上級
想定読了時間 約25分
身につく成果 APIリクエストの構造を説明できる
前提知識 HTTP・Pythonの基礎
演習環境 ブラウザ・curl等

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操作の違い

CLI ネットワークエンジニア
SSHでログイン
COMMAND show / configure
コマンドを入力
DEVICE ネットワーク機器
コマンドを処理

PROGRAM Pythonなど
APIへ要求
API HTTP Request
GET / POSTなど
SYSTEM 機器・管理システム
要求を処理

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リクエストとレスポンス

CLIENT Python / curl
自動化プログラム
REQUEST GET /devices
情報を要求
API SERVER 管理システム
要求を処理
レスポンス: HTTP 200 OK + デバイス情報
  1. クライアントがAPIのURLを指定する どのリソースを操作するのか決めます。
  2. HTTPメソッドを決める 情報取得ならGET、作成ならPOSTなど、 目的に合わせたメソッドを使用します。
  3. 必要なヘッダーや認証情報を付ける APIキーやトークンなどが必要になる場合があります。
  4. 必要に応じてデータを送信する 設定変更などではJSON形式のデータを送信することがあります。
  5. サーバーがレスポンスを返す HTTPステータスコードやデータを確認し、 処理が成功したか判断します。

APIリクエストを構成する要素

REST APIを利用するときは、 主に次の4つを確認します。

1

URL

どのAPIサーバーの、どのリソースを操作するか指定します。

/api/v1/devices

2

HTTPメソッド

情報取得・作成・更新・削除など、 何を行いたいのかを示します。

GET POST PUT

3

ヘッダー

認証情報や、送受信するデータ形式などを指定します。

Authorization

Content-Type

4

ボディ

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データの考え方

CLI show command
人が画面を読む
PARSE 文字列解析
必要箇所を抽出

API GET Request
情報を要求
JSON 構造化データ
プログラムで処理

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を利用した情報収集

SCRIPT Python
APIを実行
API 管理システム
情報を提供
DATA JSON
機器情報
OUTPUT CSV・レポート
自動整理

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)

重要なのはコードを暗記することではありません。

  1. URLを指定する
  2. 認証情報などのヘッダーを作る
  3. GETリクエストを送る
  4. ステータスコードを確認する
  5. レスポンスデータを処理する

という流れを理解してください。

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の説明として最も適切なものはどれですか。

  1. ネットワーク機器専用の暗号化方式
  2. プログラムから別のシステムの機能やデータを利用するためのインターフェース
  3. IPアドレスを自動配布するプロトコル
  4. SSHの代わりに使用するケーブル規格
解答を見る
正解:B

APIは、別のプログラムからシステムの機能やデータを 利用するためのインターフェースです。

問題2.機器一覧を取得したい場合、 最初に検討するHTTPメソッドはどれですか。

  1. GET
  2. DELETE
  3. PUT
  4. CONNECT
解答を見る
正解:A

情報取得ではGETが使用されるのが基本です。 ただし、実際のAPI仕様は必ず製品ドキュメントで確認します。

問題3.APIから「401 Unauthorized」が返りました。 最初に確認すべき項目として適切なのはどれですか。

  1. LANケーブルのカテゴリ
  2. ルーティングプロトコルのAD値
  3. ユーザー情報やトークンなどの認証情報
  4. VLAN ID
解答を見る
正解:C

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が使われている理由を説明してください。

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状態の装置だけを一覧化する処理を作るとします。

必要な処理を順番に考えてください。

1.____________________
2.____________________
3.____________________
4.____________________
5.____________________
解答例を見る
  1. APIへGETリクエストを送る
  2. HTTPステータスコードを確認する
  3. 正常ならJSONレスポンスを読み込む
  4. statusがdownの機器だけ抽出する
  5. CSV・メール・監視システムなどへ出力する

自分の言葉で説明する課題

後輩エンジニアから、 「SSHでコマンドを取れるなら、APIを使う意味は何ですか?」 と質問されました。

1分程度で説明してください。

REST APIとは、 ________________________________。
説明例を見る

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へ、何のメソッドで、何を送り、 何が返ってきたのか」を分解して考えられることです。

次の記事:JSON・YAMLの読み方

REST APIの基本を理解したら、 次に必要になるのがデータ形式の理解です。

APIのレスポンスではJSON、 Ansibleなどの自動化ツールではYAMLを見る機会が増えます。

次回は、JSONとYAMLの違い、 キーと値、リスト、階層構造を読み取る方法を ネットワーク設定・APIレスポンスの例を使って解説します。

ネットワーク上級編 56/全70記事

上級編では、要件定義・基本設計・BGP・クラウド・セキュリティから、 Python、Ansible、REST API、Git、テレメトリー、 AIを活用したログ調査まで順番に学びます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次