シスコシステムズ合同会社
APICのREST API入門
2016/09/14
横石雄大 (tayokois@cisco.com)
システムズエンジニア
SDN応用技術室
• API / REST APIとは?
• ACIのモデル構造
• デモプログラム
• デモプログラムの解説
おしながき
• 横石 雄大 (よこいし たけひろ)
• 2回目の登壇
• 8月以降も部署異動無しで、淡々とSDNやってます。
• 学生時代
• ネットワーク・サービス運用 (研究室やバイト先などで)
• ウェブアプリケーション開発 (得意な言語はRuby)
• 趣味
• 食べること。(ブログもやってます。 https://www.dokalog.net/ )
とりあえず自己紹介
• Application Programing Interface
• ソフトウェアコンポーネントが互いにやりとりするのに
使用するインタフェースの仕様である。 (Wikipedia)
• 他のプログラムから制御してもらうときに使ってもらう入り口
API??
• 意図する使い方をしてほしい。
• 直接DBを操作されたくない。
• オブジェクト間の連携等があるので、適切に処理したい。
• 自分のサービスの利用者が増やしたい。
• 別のソフトの作成者は、手間のかかるところを
他に任せることが可能(ユーザ認証など)
APIを公開する理由
自作のソフト
ツイート
DM
フォロー
API
ユーザ
• コメント) 大丈夫だけど、手間やデータ量が余分にかかってしまいます。
• 例) ユーザAの最新のツイートが見たい。
普通にAPI使わずに、やるのじゃだめなの???
自
作
の
ソ
フ
ト
WebInterface
HTMLファイル
HTTP アクセス
HTML ヘッダー
HTML 本体
見た目を調整(CSS)
動きなど(JS)
その他の情報(meta)
ツイート本体
サイドメニュー
ページヘッダー
SOAP REST
自
作
の
ソ
フ
ト
サ
ー
バ
ー
SOAP-Request
(XML)
SOAP-Response
(XML)
HTTP / STMPなど 自
作
の
ソ
フ
ト
サ
ー
バ
ー
HTTP Response
(XML, JSONなど)
HTTP Request
(不要な場合も)
HTTP
• リソースはアクセスするURL
• 操作をHTTP Method
標準で定義
各サービスで定義
どのリソース
どのような操作
• リソースの場所は、URLのHTTP Pathで表現
• https://サーバー/なんとか/かんとか
• リソースの操作は、HTTP Methodで識別
• 新規作成(Create): POST
• リソースの情報取得(Read): GET
• 更新(Update): PUT
• リソース削除(Delete): DELETE
• 操作に対する応答は、HTTP Status Codeを利用
• 成功時: 2xx
• クライアント側のエラー: 4xx
REST の原則
一部だけ実装されている事もある
 全部原則に基づいて
実装されているものを区別して
“RESTful” と表現する事もある。
“新規作成”と”更新”は、
HTTP Methodで
一致するものがないため、
解釈の違いが生まれる事が多い。
APICのAPI
• アクセスパスは2通り
• (http | https)://host [:port] /api/mo/dn.(json | xml)
• オブジェクト一つ一つにアクセスするときに利用
• dn: distinguished name -> ユニークな名前
• (http | https)://host [:port] /api/class/className.(json | xml)
• クラスごとに列挙するときに利用
• 注意: クラス名は、”:”を抜く。
• 例) テナントクラス fv:Tenant -> fvTenant
• オブジェクトを作成するときには、上位オブジェクトにHTTP POST
APICのAPIの基本
アクセスパスによる構造の違い
class
fv:Tenant
テナント1 テナント2
fv:Ctx
VRF1
fv:BD
BD1
mo
uni
テナント1
VRF1 BD1
テナント2
…
クラスでのアクセス
(/api/class/xxxx)
オブジェクトでのアクセス
(/api/mo/xxxx)
クラス / DNの確認方法 (Debug Info)
ユーザー名を選び
Show Debug Info
画面左下に閲覧中のオブジェクトの
クラスとDNが表示
MOの確認 (Object Store Browser)
ユーザー名を選び
“Object Store Browser”
クラス名やDNで検索
存在するmoを列挙可能
Objectの親や子供を見る事が可能
• ブラウザの機能で通信の中身を確認
実際の通信の確認 (デベロッパーツールなど)
• URL
• Method
• Status Codeなど
APIから返るデータを
見やすく確認
HTTPのヘッダー
Chromeのデベロッパーツールを利用
ACI REST デモ
• ACI独自の用語を
理解する必要がある。
• 汎用性を高くするために
抽象化されている。
ACIのネットワークは今までのネットワークと異なる
Tenant
VRF
Bridge Domain
Application Profile
EPG
Contract
EPG
• 仮想ネットワーク名
• セグメント名
• デフォルトゲートウェイのアドレス
• ポート番号
• vlan番号
通常、ネットワークに必要な情報
demo-tenant
client (192.168.0.0/24)
server (192.168.1.0/24)
demo_client
192.168.0.1
demo_server
192.168.1.1
.254 .254
Leaf1 Leaf2
eth1/13
vlan 10
eth1/13
vlan 10
全て許可
demo-tenant
demo-network
client server
permit-all
VRF
client-seg (192.168.0.0/24)
server-seg (192.168.1.0/24)
demo_client
192.168.0.1
demo_server
192.168.1.1
.254 .254
通常のネットワークとACIのマッピング
demo-tenant
client (192.168.0.0/24)
server (192.168.1.0/24)
demo_client
192.168.0.1
demo_server
192.168.1.1
.254 .254
Leaf1 Leaf2
eth1/13
vlan 10
eth1/13
vlan 10
全て許可
通常の仮想ネットワーク ACIのテナント
通常のネットワークとACIのマッピング
通常のネットワーク ACI
仮想ネットワーク名 テナント名
ゲートウェイアドレス
Bridge Domain
セグメント名
EPG
ポート番号
Static Bindings (Paths)
vlan 番号
ACL Contract
ライブデモ
REST API デモプログラムの大まかな流れ
テナント作成
プログラム
(Ruby)フォーム内容送信
プログラム
(JavaScript)
HTTP
(GET / POST)
HTTP
(GET / POST)
独自フォーマット
JSON ACIに準拠したJSON
REST API デモプログラム フローチャート
ウェブブラウザ アプリケーションサーバ APIC
インターフェイス一覧取得
(HTTP GET) スイッチ一覧取得
インターフェイス一覧取得
(スイッチごと)インターフェイス一覧取得
(結果)
テナント作成
(HTTP POST)
テナント作成
(実行結果)
テナント作成
ネットワーク作成
(VRF, BD)
AP関連作成
(AP, EPG, Contract)
ユーザ入力
• REST APIとは?
• APICのREST API
• 実際に作ったもののご紹介
• (webページに小細工はいっぱい隠してあるので、気になった人は懇親会で聞いてください)
まとめ
• Cisco APIC REST API User Guide
• http://www.cisco.com/c/en/us/td/docs/switches/datacenter/aci/apic/sw/1-
x/api/rest/b_APIC_RESTful_API_User_Guide/b_IFC_RESTful_API_User_Guide_chapter_010.html
• APIC Management Information Model Reference
• https://developer.cisco.com/media/mim-ref/
• Architectural Styles and the Design of Network-based
Software Architectures (Chapter 5)
• http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
• 一番最初にRESTの考えを述べた論文
参照URL
APICのREST API入門

APICのREST API入門