Instiq
第3章 · Ciscoプラットフォームと開発·v1.0.0·更新 2026/7/20·読了目安 約17分

変更要約: 初版

3.4要件に応じたコード構築

この節の要点

デバイス一覧の取得(Catalyst Center Intent API/Meraki)、Webexへのメッセージ投稿、クライアント一覧の取得(Meraki)といった典型タスクを、「要件→どのプラットフォームのどのエンドポイント・どのHTTPメソッドを組み立てるか」という構築判断として学びます。あわせて誤ったスクリプト(認証欠落・エンドポイント誤り・メソッド不一致)の診断を扱います。

ここまでで各プラットフォームの守備範囲とモデル駆動の手法を押さえました。この節では総合編として、具体的な要件を1本のコードに落とす判断を扱います。「デバイス一覧が欲しい」「チャットに通知したい」「無線クライアントの一覧が要る」——それぞれどのプラットフォームの・どのエンドポイントを・どのHTTPメソッドで・どんな認証で叩くかを組み立てられることが目標です。さらに実務では他人の書いた(あるいはAIが生成した)スクリプトのどこが間違っているかを見抜く力も問われます。

3.4.1典型タスクとエンドポイントの対応

  • デバイス一覧の取得=企業アクセス網ならCatalyst CenterIntent APIGET /dna/intent/api/v1/network-device、トークンX-Auth-Tokenが必要)、クラウド管理網ならMerakiGET /organizations/{orgId}/devicesX-Cisco-Meraki-API-Key)。取得はGETが基本。
  • Webexへのメッセージ投稿=POST /v1/messages{"roomId": "...", "text": "..."}を送る。新規作成なのでPOST、認証はBearerトークン。クライアント一覧の取得=MerakiのGET /networks/{networkId}/clientsで、あるネットワークに接続中のクライアントを列挙する。
  • 組み立ての定石は「動詞→HTTPメソッド」の対応:取得=GET/作成・送信=POST/置換=PUT/部分更新=PATCH/削除=DELETE。要件の動詞(一覧を"取る"/メッセージを"送る")が、そのままメソッド選択の手掛かりになる。

3.4.2構築と診断のチェックリスト

  • 構築手順=(1)API docsで正しいエンドポイントとメソッドを確認、(2)認証を用意(MerakiはX-Cisco-Meraki-API-Key、Catalyst Centerは事前にPOST /tokenで得たX-Auth-Token、WebexはBearer)、(3)requestsで呼びresp.status_coderesp.json()を確認、(4)ページネーション/レート制限に対処。認証ヘッダの付け忘れは401エンドポイント/メソッド誤りは404/405として現れる。
  • 診断の勘所=応答コードから逆算する。401/403=認証/権限(キーやトークン、ヘッダ名を疑う)、404=エンドポイント(URLやID)誤り405=メソッド不一致(一覧取得にPOSTを使う等)、429=レート超過(バックオフ/Retry-After)。他人のコードのバグも、まず返ってきたステータスコードを手掛かりに切り分ける。
試験ポイント

「デバイス一覧=Catalyst Center GET /dna/intent/api/v1/network-device/Meraki GET /organizations/{id}/devices」「Webexメッセージ=POST /v1/messages」「Merakiクライアント一覧=GET /networks/{id}/clientsと、動詞→メソッド(取得GET・送信POST)認証ヘッダ(Meraki=API-Key/Catalyst Center=X-Auth-Token/Webex=Bearer)が頻出です。誤りはステータスコード(401/404/405/429)から診断します。

あなたはNOCの自動化として「Merakiで管理する店舗ネットワークの接続中クライアント一覧を取得し、台数を毎時Webexスペースに通知する」スクリプトのレビューを頼まれました。同僚のコードはこうです。まずクライアント取得部分で requests.post("https://api.meraki.com/api/v1/networks/L_123/clients") と書かれており、実行すると405 Method Not Allowedが返ります。原因は明確で、一覧の取得GETであるべきなのにPOSTを使っているメソッド不一致です(requests.get(...)が正しい)。次にヘッダを見るとheaders={"Authorization": "Bearer abc..."}とあり、これはWebexの流儀の付け方で、MerakiはX-Cisco-Meraki-API-KeyヘッダでAPIキーを渡す必要があります——このままだと401 Unauthorizedになります。仮にメソッドと認証を直しても、networkのIDが実在しなければ404、レート制限に当たれば429が返るので、resp.status_codeを見て分岐し、429ならRetry-Afterに従って待つ実装にします。後半のWebex通知は requests.post("https://webexapis.com/v1/messages", json={"roomId": room, "text": f"clients={n}"}, headers={"Authorization": f"Bearer {token}"}) で、これは送信=POSTBearer認証が要件に合致しており妥当です。ここで重要なのは、二つのAPIは認証ヘッダの流儀が異なる(Meraki=API-Keyヘッダ、Webex=Bearer)ことと、要件の動詞が「取得(GET)」か「送信(POST)」かでメソッドが決まること、そしてバグは想像で直さずステータスコード(405→メソッド、401→認証、404→エンドポイント/ID、429→レート)から逆算することです。同僚の一見動きそうなコードでも、これらの軸で読めば「なぜ405か・なぜ401か」を最短で言い当て、正しいGET+正しいヘッダへ修正できます。

要件プラットフォームエンドポイント(例)メソッド/認証
デバイス一覧(企業アクセス網)Catalyst Center/dna/intent/api/v1/network-deviceGET / X-Auth-Token
デバイス一覧(クラウド管理)Meraki/organizations/{orgId}/devicesGET / X-Cisco-Meraki-API-Key
クライアント一覧Meraki/networks/{networkId}/clientsGET / X-Cisco-Meraki-API-Key
メッセージ投稿Webex/v1/messagesPOST / Bearer
注意

ひっかけ: 「一覧を取得するのにPOSTを送る」は誤りです——取得はGETで、一覧取得にPOSTを使うと405 Method Not Allowedになりがちです。また「認証ヘッダはどのCisco APIでも同じ書き方」も誤り=Meraki=X-Cisco-Meraki-API-Key/Catalyst Center=X-Auth-Token/Webex=Authorization: Bearerとプラットフォームで異なり、取り違えると401になります。

デバイス一覧/Webexメッセージ/クライアント一覧の構築とコード診断の図。
動詞→メソッド→ステータスで組み立て診断

3.4.3この節のまとめ

  • 要件を「どのプラットフォーム・どのエンドポイント・どの動詞→HTTPメソッド」に落とす:デバイス一覧=GET、Webexメッセージ=POST /v1/messages、クライアント一覧=Meraki GET /networks/{id}/clients
  • 認証はプラットフォームで流儀が違う:Meraki=API-Keyヘッダ/Catalyst Center=X-Auth-Token/Webex=Bearer。取り違えは401
  • 誤りはステータスコードから逆算して診断:401/403=認証・404=エンドポイント/ID・405=メソッド不一致・429=レート超過

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

理解度チェック

(軽い確認用)

Q1. Merakiで管理するネットワークに接続中のクライアント一覧を取得するスクリプトが、実行すると405 Method Not Allowedを返す。コードは `requests.post("https://api.meraki.com/api/v1/networks/L_1/clients", headers={"X-Cisco-Meraki-API-Key": key})` である。最も適切な修正はどれか。

Q2. 障害検知時にWebexスペースへ通知メッセージを送るコードを構築する。要件(メッセージを新規に送信する)に対して最も適切なエンドポイントとメソッド、認証の組み合わせはどれか。

Q3. Catalyst CenterのIntent APIでネットワークデバイス一覧を取得するスクリプトが、実行すると401 Unauthorizedを返す。エンドポイントは正しく GET /dna/intent/api/v1/network-device を叩いている。最も可能性の高い原因はどれか。

理解度を確認第3章「Ciscoプラットフォームと開発」の問題を解く