Instiq
第6章 · 自動化とAI·v1.0.0·更新 2026/7/21·読了目安 約19分

変更要約: 初版

6.3コントローラAPIとREST応答の解釈

この節の要点

Catalyst CenterIntent APISD-WAN Manager(vManage)のREST APIを、トークン取得から実際の呼び出しまでの流れとして押さえ、返ってきた応答コード——200/201/204400/401/403/404/4295xx——とペイロードから、次に何をすべきか(再試行するか・資格情報を直すか・URLを直すか・待つか)を判断できるようにします。

コントローラAPIの自動化で最も時間を溶かすのは、返ってきたコードの意味を取り違えて、見当違いの場所を直そうとすることです。401が返っているのにURLを何度も書き換えたり、429が返っているのに即座に再試行してさらに詰まらせたり——いずれもコードが指している「責任の所在」を読めていないことが原因です。応答コードは大きく、2xx=成功/4xx=呼び出し側(クライアント)の問題/5xx=サーバ側の問題という責任の切り分けを示します。この節ではCatalyst CenterとSD-WAN Managerという実際のコントローラを題材に、認証トークンの取得→呼び出し→応答の解釈→次の一手という一連の流れを追います。

6.3.1コントローラAPIの呼び出しの型

  • Catalyst Center(旧DNA Center)は企業アクセス網を統制するオンプレのコントローラで、Intent APIを公開する。呼び出しはまずPOST /dna/system/api/v1/auth/tokenBasic認証で資格情報を送ってトークンを取得し、以後は取得したトークンをX-Auth-Tokenヘッダに載せて/dna/intent/api/v1/network-deviceのような意図ベースのエンドポイントを呼ぶ。トークンには有効期限があり、期限切れ後の呼び出しは401になる。
  • SD-WAN Manager(vManage)はWANオーバーレイの管理コントローラで、デバイス在庫・テンプレート・ポリシー・統計をRESTで扱う。認証後に/dataservice/deviceのようなエンドポイントを呼び、セッション(およびCSRF用トークン)を維持して操作する。どちらのコントローラでも「認証は別リクエストで、以降の呼び出しはヘッダで資格を提示する」型は共通である。
  • HTTPメソッドは操作の種類を表すGET=取得(安全・状態を変えない)/POST=作成(新しいリソースやジョブを起こす)/PUT=置換(送らなかった項目は消えうる)/PATCH=部分更新/DELETE=削除。コントローラではPOSTが即座に完了せず「タスクID」を返す非同期処理になることがあり、その場合はタスク照会のエンドポイントをGETして完了を確認する必要がある。

6.3.2応答コードが示す「責任の所在」

  • 2xx=成功200 OK=要求が成功し本文(ペイロード)を伴うGETの典型)。201 Created新しいリソースが作成されたPOSTの典型で、作成先がLocationヘッダや本文で示される)。204 No Content成功したが返す本文が無いDELETEや一部の更新の典型)——204を「失敗」と読んで再実行すると二重実行の事故になりうる。
  • 4xx=呼び出し側の問題なので、同じ内容で再試行しても直らない400 Bad Requestリクエストの形式や内容が不正(JSON構文エラー・必須項目の欠落・型不一致)→ペイロードを直す401 Unauthorized認証されていない(トークン未提示・期限切れ・資格情報が誤り)→トークンを再取得する403 Forbidden認証は通ったが権限が無いアカウントのロール/権限を見直す(トークンを取り直しても同じ結果)。
  • 404 Not Found指定したリソース(URL)が存在しないエンドポイントのパスやリソースIDの綴りを確認する(401と違い資格情報の問題ではない)。429 Too Many Requestsレート制限に達した即座の再試行は禁物で、Retry-Afterヘッダがあればその秒数だけ待ち、指数バックオフで間隔を空けて再送する(並列度を下げる/バルク取得に変えるのも有効)。
  • 5xx=サーバ側の問題500 Internal Server Error502 Bad Gateway503 Service Unavailable)で、リクエスト自体は正しい可能性が高い。したがってペイロードやトークンを書き換えるのは的外れで、バックオフを入れた再試行とコントローラ側のログ/状態確認が正しい一手になる。503は一時的な過負荷/メンテナンスを示すことが多い。
試験ポイント

応答コードは「誰が悪いか」で三分して覚えます:2xx=成功(200本文あり/201作成/204本文なし成功)4xx=呼び出し側(400ペイロードを直す/401トークンを取り直す/403権限を見直す/404URLを直す/429待ってバックオフ)5xx=サーバ側(内容は変えずバックオフして再試行)。ENCORでは「このコードが返った、次に何をするか」が問われるので、コード→対処の対応で覚えましょう。

Catalyst Centerから全ネットワーク機器の在庫を取得し、機器ごとにインタフェース情報を追加取得するスクリプトを運用しているとします。ある朝、実行ログに次の3つの応答が順に記録されていました。まず在庫取得のGET /dna/intent/api/v1/network-device401 Unauthorizedを返し、続いて再実行後の同じ呼び出しが200 OKで機器500台分のリストを返し、その後の機器ごとのインタフェース取得ループの途中から429 Too Many Requestsが連続した、という記録です。ここで多くの人が犯す誤りは、401を見て「アカウントの権限が足りない」と判断し、管理者にロール昇格を依頼してしまうことです。しかし401は認証の失敗(誰であるかが確認できない)であり、権限不足を示すのは403(認証は通ったが許可されていない)です。ログでは再実行しただけで200になっている——つまり資格情報もロールも正しく、単にトークンが有効期限切れだったと読むのが正しい診断です。恒久対策はロール変更ではなく、トークンの有効期限を管理し、401を受けたら自動で/auth/tokenから再取得して1回だけ再試行する処理をスクリプトに入れることです。次に429ですが、これを「サーバが壊れた」と読んで即座に何度も再試行するのは最悪手で、レート制限をさらに踏み抜いて回復を遅らせます。429コントローラが「呼びすぎだ」と明示している状態なので、Retry-Afterヘッダがあればその秒数だけ待ち、無ければ指数バックオフ(1秒→2秒→4秒…)で間隔を空けます。より構造的な改善は、500台に対して1台ずつ問い合わせる設計自体を見直し、まとめて取得できるエンドポイントやページネーションを使って呼び出し回数を削減することです。もしここで返っていたのが500であれば診断は逆になり、リクエストは正しいのにコントローラ側で処理が失敗しているので、ペイロードやトークンをいじるのは的外れ——バックオフして再試行しつつ、コントローラのヘルスとログを確認します。また、機器を新規登録するPOST202やタスクIDを含む本文を返した場合、「まだ完了していない」ことを意味するため、タスク照会のエンドポイントをGETして完了を確認するまで成功と見なしてはいけません。逆に削除のDELETE204 No Contentを返したとき、本文が空だからと失敗扱いして再実行するのは危険です——204成功したが返す内容が無いことを意味し、実際には削除は完了しています。要するにENCORが問うのは、コードの語義そのものではなく、「そのコードが返ったとき、直すべきはペイロードか・資格情報か・権限か・URLか・呼び出し頻度か、それとも何も直さず待つべきか」という一手の選択です。

コード意味責任の所在次の一手
200 OK成功・本文(ペイロード)を伴う本文を解析して処理を続行
201 Created新しいリソースが作成された作成先(`Location`/本文のID)を控える
204 No Content成功したが返す本文が無い成功として扱う(再実行しない)
400 Bad Request形式/内容が不正(JSON構文・型・必須欠落)呼び出し側ペイロードを修正する(再試行だけでは直らない)
401 Unauthorized認証されていない(トークン未提示/期限切れ)呼び出し側トークンを再取得して1回再試行する
403 Forbidden認証は通ったが権限が無い呼び出し側アカウントのロール/権限を見直す
404 Not Found指定したリソース/URLが存在しない呼び出し側パスとリソースIDを確認する
429 Too Many Requestsレート制限に達した呼び出し側`Retry-After`に従い指数バックオフ・呼び出し数を削減
5xx(500/502/503)サーバ側の処理失敗/過負荷/メンテサーバ側内容は変えずバックオフ再試行+コントローラ側を確認
注意

ひっかけ: 401403の取り違えが最頻出です——401認証(誰か分からない=トークンを取り直す)403認可(誰かは分かるが許されない=権限を見直す)で、401にロール昇格を申請するのは的外れです。また「204は本文が無いから失敗」も誤り=成功であり、再実行は二重実行の事故を招きます。さらに「429はサーバ障害なのですぐ再試行」も誤り=呼びすぎの明示なので、待ってバックオフしない限り悪化します。逆に5xxでペイロードやトークンを書き換えるのも的外れです。

APIコールの型と応答コードが示す責任の所在の図。
次に何をすべきかをコードから判断する

6.3.3この節のまとめ

  • Catalyst CenterIntent APISD-WAN Manager(vManage)も、認証を別リクエストで行いトークン/セッションをヘッダで提示する型は共通
  • コードは責任の所在で三分する——2xx=成功(204も成功)/4xx=呼び出し側(400payload・401token・403権限・404URL・429頻度)/5xx=サーバ側
  • 問われるのは語義ではなく次の一手401はトークン再取得・403は権限見直し・429Retry-Afterと指数バックオフ・5xxは内容を変えずバックオフ再試行

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

理解度チェック

(軽い確認用)

Q1. Catalyst Center の Intent API を呼ぶスクリプトが `401 Unauthorized` を返した。同じ資格情報で数時間前までは正常に動作しており、再実行したところ今度は `200 OK` が返った。恒久的な対処として最も適切なものはどれか。

Q2. 500台の機器に対して1台ずつインタフェース情報を取得するループの途中から、コントローラが `429 Too Many Requests` を返し始めた。取るべき対応として最も適切なものはどれか。

Q3. コントローラ API へ `DELETE` を送ったところ `204 No Content` が返り、応答本文は空だった。スクリプトはこれを失敗と判断して同じ `DELETE` を再送する実装になっている。この実装の評価として最も適切なものはどれか。

理解度を確認第6章「自動化とAI」の問題を解く

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

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