SDNコントローラはネットワークの自動化を提供してくれるものですが、ネットワーク自動化の際にネットワーク機器の設定などに利用されるAPIであるREST APIを解説します。
※ API(Application Programming Interface)とは、ソフトウェアコンポーネント同士が互いに情報をやりとりするのに使用するインターフェースの仕様のことです。
REST API(RESTful API):REST 4つの設計原則
REST APIは、REST(Representational State Transfer)の原則に基づいて設計されたAPIのことでありWeb APIの1つです。そのRESTの原則は4つに集約することができます。
1. セッションの状態管理を行わないステートレスなクライアント/サーバプロトコル
HTTPメッセージの全てがリクエストを理解するための必要な情報を含んでいることから、HTTP通信を行うクライアントもサーバもメッセージ間におけるセッションの状態を記憶している必要がありません。※実際にはCookieなどを使用してセッション状態を管理しています。
2. リソースを一意なURIにより識別される
RESTfulなシステムでは、全てのリソース(情報)はURI(Uniform Resource Identifier)で表現されるユニークなアドレスを持ちます。
3. HTTPメソッドで操作方法を表現した統一されたインターフェース
リソースを操作するメソッドはHTTPで定義されている “GET“、”POST“、”PUT“、”DELETE” などを使用します。つまり、情報を操作する命令体系が予め定義されています。
4. アプリケーション情報と状態遷移の両方を扱えるハイパーメディアの使用
リソースを様々な形式(HTML、XML、JSON、バイナリ)で表現できるようにします。また、関連するデータはハイパーメディア(リンク)としてデータに含めることができます。
それでは、上記のRESTの設計原則 1~4 を以下で簡単に解説していきます。
REST API:動作の概要(RESTの設計原則 1)
※ 以下の解説は、RESTの設計原則1~4の全てに該当する概要説明です。
REST APIはHTTP技術をベースとしており、HTTPメソッド(GET、POST、PUT、DELETE)などで送信側から操作方法を表現して、受信側は処理結果をステータスコードで表現しておりクライアント/サーバ形態の通信を行います。
ユーザ(クライアント側)が必要とするリソースはURIで表現します。そのリソースに対してどのような操作を行うのかはHTTPメソッドで示します。受信側デバイス(サーバ側)では、受信したHTTPリクエストに対して、処理結果をHTTPステータスコード(処理の成功/失敗)といっしょにJSONやXMLなどのレスポンスフォーマットで応答します。
REST API:URIによる識別(RESTの設計原則 2)
URI(Uniform Resource Locator)により、リソースが存在する位置を文字列で示します。
REST API:HTTPメソッドで表現(RESTの設計原則 3)
送信側デバイスから受信したHTTPメソッドに応じ、受信側デバイス(ネットワーク機器)は自身のリソースに対して作成、更新、削除などの動作を行います。このようにリソースに対し行う主要な動作はCRUDと呼ばれます。
CRUD | HTTPメソッド | 説明 |
Create | POST/PUT | 作成 |
Read | GET | 読み取り |
Update | PUT/PATCH | 更新 |
Delete | DELETE | 削除 |
REST API:様々なデータ形式で表現(RESTの設計原則 4)
送信側デバイスと受信側デバイスとでは、REST APIを通してデータのやり取りを行いますが受信データを正常に処理するためには、汎用的なデータ形式に変換して通信を行う必要があります。リソースを表現するそのデータ形式には色々ありますが、HTMLやテキストだけでなくJSON、XML、YAMLなどがあります。
◆ JSON(JavaScript Object Notation):拡張子(.json)
JSONはデータ記述言語の1つです。標準的なテキストベースのデータフォーマットでありプログラミング言語を問わずに利用できます。XMLに比べて記述が容易で人が理解しやすいデータフォーマットと言えます。
◆ XML(Extensible Markup Language):拡張子(.xml)
XMLはマークアップ言語の1つです。マークアップ言語では「タグ」と呼ばれる特定の文字列で、記述文に情報の意味や構造などを埋め込んでいく言語のことです。HTMLもXML同様に、マークアップ言語ですが、HTMLはWebページ作成に特化しているのに対して、XMLではより自由度が高く、拡張性を備えており、設定情報ファイルの記述など様々な形で利用されます。
◆ YAML(YAML Ain’t a Markup Language):拡張子(.yaml .yml)
YAMLは、構造化されたデータを表現するためのフォーマットです。YAMLではスペースによるインデントを使用して階層構造を表現します。例えば、サーバの構成管理ツールであるAnsibleでも、設定ファイルのフォーマットとしてYAMLを利用します。
※ YAMLは「ヤムル」または「ヤメル」と読みます。
REST API:様々なデータ形式で表現(REST 設計原則 4)補足
多くのメーカーのネットワーク機器では、受信したHTTPリクエストに対して、処理結果をHTTPステータスコード(処理の成功/失敗)と一緒に「JSON」または「XML」のレスポンスフォーマットで応答します。
Cisco社製品でもSDNコントローラーの設定ガイドの通り「JSON」か「XML」を使用します。
APIC REST API is a programmatic interface that uses REST architecture.
API は JavaScript オブジェクトの表記(JSON)または拡張マークアップ言語(XML)のドキュメントを含む HTTP(デフォルトでは無効)または HTTPS のメッセージを受け入れ、返します。
余談ですが、ベンダーの認定資格試験などで、REST APIにおけるデータ形式の表現において使用されるフォーマットは何か、という問題が仮に出題された場合、そして仮にその選択肢にJSON、XML、YAMLの3つがあるが、選択するのは2つであった場合は、選択すべきは正しい回答は「JSON」と「XML」であると言えます。
REST API:ネットワーク機器での実行例
Juniperでは「REST API Explore」というツールが提供されています。
HTTP method、Input data type、Required output format の項目については、上図の通りドロップダウンリストから選択すれば良いだけなので、非常に簡単に操作できます。
また、上図のようにInput data typeに「XML」を選択して、視覚的に見やすい「JSON」をRequired output formatで選ぶことが可能です。左側に必要情報と必要操作の情報を入力して画面下の「Submit」を押すことで、右側の「Response Hedaers」と「Response Body」でその結果と閲覧したい情報などが表示されます。