REST APIでコントローラから「VLAN一覧」を受け取るとき、その中身はどんな形式で送られてくるのでしょうか?
人間が読むCLIの画面表示とは違い、プログラムが機械的に処理しやすい形式である必要があります。どんな形が都合いいか、少し考えてから読み進めてください。
JSONは「荷物を詰める共通フォーマット」
前回学んだREST APIは、いわば荷物を運ぶ「宅配便の仕組み」でした。今回学ぶJSON(JavaScript Object Notation)は、その荷物を誰でも同じルールで開けられるように詰める「梱包の規格」だと考えてください。人間にも読みやすく、プログラムにも解釈しやすいという特徴から、自動化の世界で標準的に使われています。
JSONの基本構文
JSONは主に3つの要素でできています。
オブジェクトは { } で囲み、「キー」と「値」のペアを : でつなげます。複数のペアは , で区切ります。
{
"hostname": "SW1",
"interface": "GigabitEthernet0/1",
"enabled": true
}
配列は [ ] で囲み、複数の値やオブジェクトを並べます。VLANの一覧のように「同じ形のデータが複数ある」場合に使います。
{
"vlans": [
{ "id": 10, "name": "SALES" },
{ "id": 20, "name": "DEV" }
]
}
値には文字列("SW1" のようにダブルクォートで囲む)、数値(10)、真偽値(true / false)、null、そしてオブジェクトや配列自体も入れられます。名簿アプリの「氏名・年齢・所属」のようなカード情報が、キーと値のペアで整理されているとイメージすると理解しやすいでしょう。
JSONを読み取る練習
先ほどのVLAN一覧の例で、「2番目のVLANの名前」を聞かれたら、配列 vlans の2つ目の要素、つまり { "id": 20, "name": "DEV" } を見て、答えは DEV だとわかります。試験では、このように短いJSONを見せて「特定のキーの値を答えよ」という問題が定番です。慌てずに、外側の { } や [ ] の対応関係を目で追いながらキーを探すのがコツです。
次のJSONで、interfaces の2番目の要素の status は何でしょう。
``json
{
"interfaces": [
{ "name": "Gi0/0", "status": "up" },
{ "name": "Gi0/1", "status": "down" }
]
}
``
答えを見る
答えは down です。interfaces は配列で、1番目が Gi0/0(up)、2番目が Gi0/1(down)です。キーと値の対応を、括弧の階層をたどりながら確認しましょう。
YANG・NETCONF・RESTCONFの概要
JSONのようなデータ形式に加えて、ネットワーク機器の設定・状態をモデル化する技術も押さえておきましょう。YANGは、設定項目やその構造を定義する「データモデルの設計図」です。そして、そのデータをやり取りするプロトコルとしてNETCONF(ポート830、XMLベース)とRESTCONF(ポート443、RESTの考え方をベースにHTTP/JSONやXMLを使う)があります。どちらも「機器の設定を、決まったデータモデルに基づいて自動的にやり取りする」ための仕組みで、CLIを1台ずつ手打ちする作業からの脱却を支えています。
NETCONFとRESTCONFが使う代表的なポート番号の組み合わせとして正しいのはどれでしょう?
答えを見る
答えはNETCONFが830、RESTCONFが443です。NETCONFはSSH上で動く独自プロトコルとして830番を使い、RESTCONFはHTTPS(443番)を使ってRESTの考え方でアクセスします。どちらもYANGデータモデルに基づいて機器を操作する点は共通です。
試験でのポイント
CCNAでは、JSONの構文(オブジェクトは{ }、配列は[ ]、キーと値は:で対応)を正確に読み取れるかが問われます。短いJSONのサンプルから特定のキーの値を答えさせる問題が定番なので、括弧の対応関係を丁寧に追う練習をしておきましょう。また、YANG・NETCONF・RESTCONFは深い実装知識までは求められませんが、「YANGはデータモデル、NETCONFとRESTCONFはそれをやり取りするプロトコル」という役割分担と、それぞれのポート番号(830・443)の対応は覚えておくと安心です。
JSONはオブジェクト{}と配列[]でデータを整理する、いわば荷造りのルール。キーと値の対応を落ち着いて追えば、初見でも必ず読める。次はいよいよ、実際に設定を自動化するツールたち、Ansible・Terraform・Puppet・Chefを見ていくよ。