STAGE 06 / 自動化とSDN

REST APIの基礎

考えてみよう

コントローラに「新しいVLANを作って」「今のVLAN一覧を教えて」と指示するとき、コンピュータ同士はどんな言葉でやり取りしているのでしょうか?

人間ならCLIに入力すればいい話ですが、プログラムが自動でネットワークを操作するには、決まった「作法」が必要です。その作法の代表格を、少し考えてから読み進めてください。

APIは「窓口」、RESTはその「作法」

前回、SDNではコントローラがノースバウンドインターフェース(NBI)を通じて、アプリケーションからの指示を受け取ると学びました。この窓口でよく使われる作法がREST APIです。API(Application Programming Interface)はプログラム同士が会話するための窓口、RESTはその会話のルールだと考えてください。

レストランの注文に例えるとわかりやすいです。お客(アプリケーション)は、メニュー(URL)を指定し、注文の種類(HTTPメソッド)を伝えて、店員(サーバー)に依頼します。店員は結果を「できました」「売り切れです」といった返事(ステータスコード)で返します。

HTTPメソッドとCRUDの対応

RESTでは、操作したい対象をURL(例:https://controller/api/v1/vlans)で指定し、何をしたいかをHTTPメソッドで表します。これはデータベース操作の基本であるCRUD(Create・Read・Update・Delete)ときれいに対応しています。

HTTPメソッドCRUD操作意味
GETRead情報を取得する(読むだけ、変更なし)
POSTCreate新しいデータを作成する
PUTUpdateデータ全体を置き換える(更新)
DELETEDeleteデータを削除する

レストランで言えば、GETは「メニューを見せて」、POSTは「新しく注文する」、PUTは「注文内容を丸ごと変更する」、DELETEは「注文を取り消す」に近い感覚です。

確認問題

コントローラに新しいVLAN設定を「追加」してほしいとき、使うべきHTTPメソッドはどれでしょう?

答えを見る

答えはPOSTです。POSTはCRUDのCreate(作成)に対応し、新しいリソースを作るときに使います。既存の情報を丸ごと書き換える場合はPUT(Update)、単に情報を見るだけならGET(Read)になる点と区別しておきましょう。

ステータスコードは「返事の要約」

APIを呼び出すと、サーバーはステータスコードという3桁の数字で結果を返します。数字の先頭の桁でおおまかな意味が決まります。

コード意味
200OK(成功、正常に処理できた)
201Created(POSTが成功し、新規作成できた)
400Bad Request(リクエストの中身がおかしい)
401Unauthorized(認証情報がない・誤っている)
403Forbidden(認証は通ったが権限がない)
404Not Found(指定したリソースが存在しない)
500Internal Server Error(サーバー側の問題)

2xx系は「成功」、4xx系は「お客側の間違い」、5xx系は「お店側の問題」というイメージを持っておくと覚えやすいです。401は「あなた誰ですか」、403は「あなたは知っているけど、それは許可できません」という違いも試験で問われやすいポイントです。

試験でのポイント

CCNAでは、HTTPメソッドとCRUDの対応(GET=Read、POST=Create、PUT=Update、DELETE=Delete)を即答できるかがまず問われます。さらにステータスコードは、200・201・400・401・403・404・500あたりの代表的な数字とその意味を組み合わせで覚えておく必要があります。特に401と403の違い(認証がないのか、権限がないのか)はよくある引っかけです。数字の先頭桁(2xx=成功、4xx=クライアント側の誤り、5xx=サーバー側の誤り)というグループ分けから考えると、初見のコードが出ても慌てずに済みます。

確認問題

ステータスコード「403」の意味として最も適切なのはどれでしょう?

答えを見る

答えは認証はできているが、そのリソースへのアクセス権限がない(Forbidden)です。「認証情報自体が無い・誤っている」のは401 Unauthorizedなので混同しないようにしましょう。403は「本人確認はできたけれど、この操作をする権限は与えられていません」という状態です。

ゆみちゃん
ゆみ

REST APIはGET/POST/PUT/DELETEの4つのメソッドがCRUDと対応してて、結果はステータスコードで返ってくる。ここまでは「作法」の話。次はその作法に乗せて運ぶ「荷物の中身」、JSONとデータモデルを見ていくよ。