REST APIとは
REST API(Representational State Transfer API) とは、Webシステムを外部から操作するために使われるAPIの一種で、RESTの設計原則に基づいています。
クライアントとサーバはHTTPを利用してやり取りを行い、代表的な操作は GET、POST、PUT、DELETE などのHTTPメソッドで表現されます。
API(Application Programming Interface)という言葉の通り、REST APIは「ソフトウェア同士が共通のルールに従ってやり取りをするための仕組み」と理解すると分かりやすいです。
RESTの4つの設計原則
RESTには複数の設計原則がありますが、代表的な4つを押さえておくことが重要です。試験でもこの分類は頻出です。
1. ステートレスなクライアント/サーバモデル
HTTP通信では、各リクエストが必要な情報をすべて含んでいるため、サーバ側は過去の通信状態を保持する必要がありません。これを ステートレス と呼びます。
ただし、実際にはCookieなどを用いてセッション情報を保持することもあります。
2. リソースは一意のURIで識別
RESTでは扱うデータ(リソース)が URI(Uniform Resource Identifier) によって一意に識別されます。
例えば、ユーザー情報を取得するなら /users/123 のように表現されます。
3. HTTPメソッドによる統一的インターフェース
リソースへの操作方法はHTTPメソッドに統一されています。これにより、どのAPIでも一貫した操作が可能になります。
代表的な操作は CRUD(Create, Read, Update, Delete) です。
| CRUD操作 | HTTPメソッド | 説明 |
|---|---|---|
| Create | POST / PUT | 新しいリソースを作成 |
| Read | GET | リソースの取得 |
| Update | PUT / PATCH | リソースの更新 |
| Delete | DELETE | リソースの削除 |
4. ハイパーメディアの活用
リソースはHTMLやテキストだけでなく、JSON、XML、YAML などの形式で表現できます。
また、関連データをリンクとして含めることも可能です。これにより、クライアントはレスポンスを受け取りながら他のリソースへ遷移できます。
REST APIにおけるデータ形式
REST APIでは、クライアントとサーバ間の通信にさまざまなデータフォーマットが使われます。特にネットワーク機器では JSON と XML がよく利用されます。
- JSON(JavaScript Object Notation)
軽量で人間にも読みやすいテキストベースのデータ形式。XMLよりも記述が簡潔。拡張子は.json。
Cisco製品のSDNコントローラでもよく使われます。 - XML(Extensible Markup Language)
タグを用いてデータの意味や構造を明確に表現できるマークアップ言語。自由度が高く、設定ファイルや情報交換に広く使われる。拡張子は.xml。 - YAML(YAML Ain’t Markup Language)
インデントで階層を表現するデータ形式。シンプルかつ人間に読みやすく、構成管理ツール(例:Ansible)の設定ファイルでよく使われる。拡張子は.yamlまたは.yml。
REST APIとステータスコード
REST APIでリクエストを送信すると、サーバは処理結果を HTTPステータスコード で返します。
例えば:
200 OK(成功)201 Created(リソース作成成功)400 Bad Request(不正なリクエスト)404 Not Found(リソースが存在しない)500 Internal Server Error(サーバエラー)
Cisco製品のSDNコントローラでも、レスポンスは主に JSONまたはXML の形式で返され、ステータスコードとともに結果が通知されます。
構成管理ツールとは
構成管理ツール とは、複数のサーバやネットワーク機器に対して、あらかじめ用意した設定ファイルに基づき、自動でソフトウェアのインストールや設定変更を行うためのツールです。大規模な環境では、人手で一台ずつ設定すると時間や工数がかかり、設定ミスも発生しやすいため、構成管理ツールを使うことで統一的で効率的な運用が可能になります。
代表的な製品には Ansible(RedHat社)、Puppet(Puppet Labs社)、Chef(Chef Software社) などがあります。特にAnsibleはシンプルで導入しやすく、ネットワーク自動化にも広く利用されています。CiscoやJuniper、F5、Aristaといった主要なベンダーの機器にも対応しています。
構成管理ツール導入のメリット
構成管理ツールを使わない場合、管理者は各ネットワーク機器にログインしてコマンドを入力し、設定を一台ずつ更新しなければなりません。一方で、構成管理ツールを使えば管理サーバから一括で設定を反映できるため、効率が飛躍的に向上します。
また、構成管理ツールを導入することで 構成ドリフト を防止できます。構成ドリフトとは、作業手順の不備や人為的ミスにより、本来の設定からずれてしまう現象です。ツールを活用することで自動的に正しい構成が維持され、安定した運用が可能になります。
Ansibleとは
Ansible(アンシブル) はRedHat社が開発したオープンソースの構成管理ツールで、次の3つの機能を併せ持っています。
- 構成管理:設定や環境の自動適用
- デプロイメント:アプリやファイルの配布、パッケージのインストール
- オーケストレーション:システム全体や複数サービスを連携して自動化
Ansibleは特にネットワーク機器やクラウドとの親和性が高く、マルチベンダー環境でも使いやすいのが特徴です。
Ansibleの3つの特長
- エージェントレス
管理対象機器に専用ソフトを入れる必要がなく、SSHやNETCONFを利用して直接制御できます。 - 豊富なモジュール
サーバやネットワーク機器ごとに多様なモジュールが提供されており、サービスの起動・停止、ファイアウォール設定、クラウド制御など幅広い自動化が可能です。 - 簡単な記述方式
設定ファイルはYAML形式で記述するため、プログラミング知識がなくても操作できます。他の構成管理ツールに比べ、初心者でも扱いやすいのが強みです。
Ansibleの仕組み
Ansibleは Playbook と Inventory というファイルを基盤に動作します。
| ファイル | 役割 |
|---|---|
| Playbook | 管理対象機器に実行させるタスク(設定内容)を記述したファイル |
| Inventory | 管理対象機器の一覧や役割を記述したファイル |
AnsibleサーバはPlaybookをもとにPythonコードを生成し、それを対象機器に転送して SSHやNETCONF を経由して実行します。この仕組みにより、管理対象機器を効率的に制御できます。
Ansible・Puppet・Chefの比較
構成管理ツールの代表3製品を比較すると以下のようになります。
| 比較項目 | Ansible | Puppet | Chef |
|---|---|---|---|
| 開発組織 | RedHat | Puppet Labs | Chef Software |
| 使用言語 | Python | Ruby | Ruby |
| アーキテクチャ | エージェントレス | エージェント | エージェント |
| 管理方式 | Push型(サーバから配布) | Pull型(対象機器が取得) | Pull型 |
| 制御ファイル | Playbook | Manifest | Recipe |
| 記述言語 | YAML | 独自DSL | Ruby |
| 使用プロトコル | SSH/NETCONF | HTTP/HTTPS | HTTP/HTTPS |
| サーバ待受ポート | 不要 | TCP 8140 | TCP 10002 |