CTC 教育サービス
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes
みなさん、こんにちは。
今回は、PythonからREST APIを利用する基本について扱います。ネットワーク自動化というと、まずSSHでネットワーク機器にログインし、showコマンドを実行したり、設定コマンドを投入したりする方法を思い浮かべるかもしれません。しかし実務では、それだけで完結しない場面が多くあります。
たとえば、新しい拠点を追加するときは、ルータやスイッチの設定だけでなく、IPアドレス管理システムへの登録、監視対象への追加、構成管理データベースの更新、クラウド側のネットワーク設定確認などが必要になることがあります。これらの周辺システムがREST APIを提供していれば、PythonからAPIを呼び出して一連の作業を自動化できます。
REST APIを使うときは、単にURLへアクセスできればよいわけではありません。情報を取得するのか、データを登録するのか、既存の情報を更新するのかによってHTTPメソッドを使い分けます。また、APIトークンをヘッダーに含める、JSON形式でデータを送る、ステータスコードを確認して成功・失敗を判断するといった基本も重要です。
検定でも、requestsライブラリの使い方だけでなく、GET、POST、ヘッダー、JSON、ステータスコードといったAPI連携の基礎が問われる可能性があります。今回の問題では、試験対策として押さえるべきポイントを確認しながら、実務でどのように使うかも意識して見ていきます。
PythonでREST APIにGETリクエストを送り、返ってきたJSONデータをPythonの辞書やリストとして扱いたい。最も適切な処理はどれか。
A. requests.get(url) の戻り値に対して .json() を呼び出す
B. requests.get(url) の戻り値に対して .append() を呼び出す
C. requests.get(url) の戻り値をそのままYAMLとして実行する
D. requests.get(url) の戻り値に対して .send_command() を呼び出す
正解
A
解説
正解はAです。requests.get(url) は、指定したURLにHTTPのGETリクエストを送り、レスポンスオブジェクトを返します。APIの応答がJSON形式の場合、レスポンスオブジェクトの .json() メソッドを使うことで、JSONをPythonの辞書やリストとして扱えます。
import requests
response = requests.get("https://example.com/api/devices")
data = response.json()
REST APIでは、取得したデータがJSON形式で返ることが多くあります。たとえば、機器一覧、インターフェース情報、アラート一覧、IPアドレスの割り当て状況などです。JSONは人間にも比較的読みやすく、Pythonの辞書やリストとも相性がよいため、自動化スクリプトでよく使われます。
Bの .append() はリストに要素を追加するメソッドです。requests.get() の戻り値であるレスポンスオブジェクトに対して使うものではありません。
Cは、JSON、YAML、実行という考え方が混ざっています。APIから返ってきたJSONをYAMLとして保存することは変換すれば可能ですが、基本的なAPIレスポンスの扱いとしては不適切です。
Dの .send_command() は、Netmikoでネットワーク機器にCLIコマンドを送るときに使うメソッドです。REST APIのレスポンスに対して使うものではありません。
実務では、.json() を呼び出す前にステータスコードを確認することが大切です。APIがエラーを返している場合、期待したJSONではなく、エラーメッセージやHTMLが返ることがあります。その状態で .json() を呼ぶと例外になることがあります。
if response.status_code == 200:
data = response.json()
else:
print(response.status_code)
REST APIで新しいデータを登録する場合に、一般的によく使われるHTTPメソッドはどれか。
A. GET
B. POST
C. PING
D. SHOW
正解
B
解説
正解はBです。REST APIでは、一般的にデータの取得にはGET、新しいデータの登録にはPOSTを使います。たとえば、IPアドレス管理システムに新しい機器情報を登録する、監視システムに監視対象を追加する、チケット管理システムに新しいチケットを作成する、といった処理でPOSTが使われます。
import requests
payload = {
"hostname": "router01",
"ip_address": "192.0.2.10"
}
response = requests.post(
"https://example.com/api/devices",
json=payload
)
ここで重要なのは、json=payload の部分です。これはPythonの辞書をJSON形式のリクエストボディとして送信する指定です。REST APIでは、URLだけでなく、リクエストボディに登録したい内容を含めて送ることがあります。
AのGETは、主に情報を取得するためのメソッドです。機器一覧の取得、ステータス確認、設定内容の参照などに使います。GETは基本的に「読む」操作に使うと考えると理解しやすいです。
CのPINGは、ネットワーク到達性を確認するためのコマンドや仕組みです。HTTPメソッドではありません。ネットワーク分野ではなじみのある言葉ですが、REST APIの文脈では選択肢として不適切です。
DのSHOWは、ネットワーク機器のCLIで状態確認をするときによく使うコマンドです。これもHTTPメソッドではありません。
実務では、GETとPOST以外にもPUT、PATCH、DELETEが使われます。PUTはリソース全体の更新、PATCHは一部更新、DELETEは削除に使われることが多いです。ただし、実際の使い方はAPIの設計によって異なるため、必ず仕様書を確認しましょう。
PythonでREST APIを呼び出す際、APIトークンをHTTPヘッダーに含めて送信したい。最も適切な書き方はどれか。
A. headers = {"Authorization": "Bearer TOKEN"} を指定してリクエストする
B. headers = ["Authorization", "Bearer TOKEN"] を指定してリクエストする
C. APIトークンは必ずURLの末尾に直接書く
D. APIトークンは .json() の引数として渡す
正解
A
解説
正解はAです。REST APIでは、認証情報をHTTPヘッダーに含めて送ることがあります。特によく使われるのが、Authorization ヘッダーです。Bearerトークン方式の場合、次のように指定します。
import requests
headers = {
"Authorization": "Bearer TOKEN",
"Content-Type": "application/json"
}
response = requests.get(
"https://example.com/api/devices",
headers=headers
)
ヘッダーは、リクエストに付加する追加情報です。認証情報、送信データの形式、受け取りたいデータ形式などを伝えるために使われます。Content-Type: application/json は、送信するデータがJSON形式であることを示します。Authorization は、APIを利用する権限を確認するための情報です。
Bは、ヘッダーをリストで書いているため不適切です。requests でヘッダーを指定する場合は、キーと値の組み合わせを持つ辞書で指定します。
CのようにAPIトークンをURLに直接含める方法は、推奨されないことが多いです。URLはログや履歴に残りやすく、認証情報が漏えいするリスクがあります。APIの仕様上URLパラメータで渡すものもありますが、認証情報はヘッダーで扱う設計が一般的です。
Dの .json() は、レスポンス本文をJSONとして読み取るためのメソッドです。認証情報を渡すためのものではありません。
実務では、APIトークンをコードに直接書かないことも重要です。環境変数やシークレット管理の仕組みを使い、ソースコードにパスワードやトークンを残さないようにします。Gitに誤って認証情報をコミットすると、外部サービスや社内システムへの不正アクセスにつながる可能性があります。
今回は、REST API連携の基本として、以下の内容を扱いました。
REST APIは、ネットワーク自動化の実務でとても重要です。ネットワーク機器そのものだけでなく、監視システム、IPアドレス管理、構成管理データベース、クラウドサービス、チケット管理など、多くの周辺システムがAPIを提供しています。
試験対策としては、requests.get()、requests.post()、.json()、headers、status_code の役割を押さえておくとよいです。実務ではさらに、認証情報を安全に扱うこと、APIの仕様書を読むこと、エラー時の処理を書くことが重要になります。
次回は、今回のAPI連携とも関係が深い、環境変数、認証情報の管理、例外処理を組み合わせた安全なスクリプトの書き方について扱う予定です。
[IT研修]注目キーワード Python Power Platform 最新技術動向 生成AI Docker Kubernetes