見出し画像

NE-ONEを活用したRESTful APIの構築:Richardson成熟度モデルとcurlの活用

本日は、CalnexのNE-ONE製品に関連するAPIのデモンストレーションについて学びました。特に、NE-ONEのRESTful APIを呼び出す際に使用できる手段に焦点を当てました。APIは、プログラムが他のプログラムと通信するための一連の定義とプロトコルです。これにより、特定の機能やデータセットにアクセスし、ネットワーク上での操作を容易に実行できます。

さらに、CalnexのNE-ONEは、ネットワークエミュレーションとアプリケーションパフォーマンステストを提供する製品です。これは、さまざまなネットワーク条件下でアプリケーションのパフォーマンスをテストし、最適化するための効果的なツールとして設計されています。NE-ONEを使用すると、開発者やIT専門家は、異なるネットワーク環境でアプリケーションがどのように動作するかを理解し、改善することができます。

特に、NE-ONEは、帯域幅の制限、遅延、パケット損失、ジッターなど、リアルタイムのネットワーク条件をエミュレートする能力を持っています。これにより、開発者はネットワークの不安定な状況でもアプリケーションの耐性をテストし、改善することができます。その結果、エンドユーザーにとってより信頼性の高い製品やサービスを提供することが可能になります。

勉強したビデオはhttps://itrinegy.com/training-courses/ 
Integration using CLI / API and RESTful API

ビデオ全体の内容として技術デモンストレーションでのRestful APIとCliの統合について議論しています。講師はRestful APIの機能の概要を提供し、個々のパラメーター変更や動的リソース発見などを挙げています。またPostmanやcurlのようなツールを使ったRestful APIのテストや実験についても触れています。さらに、オンボードのドキュメンテーションとAPIをナビゲートするための検索可能なツールの利用可能性についても言及しています。

レクチャービデオの内容

  • 00:00 Restful APIとCliの使用


技術デモでのRestful APIとCliの統合について話し合います。スピーカーはCLIA P IとRestful APIの違いを強調し、後者の強力さと柔軟性を強調します。彼らはRestful APIの機能の概要を提供し、個々のパラメーターの変更や動的なリソースの発見などを紹介します。また、Postmanやcurlのようなツールの使用やRestful APIのテストと実験についてもカバーしています。さらに、オンボードドキュメンテーションの利用可能性やAPIをナビゲートするための検索可能なツールについても触れています。スピーカーはRestful APIの包括的な性質とWeb GUIとの排他性を強調します。全体として、この対話はRestful APIとその潜在的な応用についての簡単な紹介を目指しています。

  • RESTful API:RESTful APIは、アプリケーション間のインターフェース設計スタイルで、システムのスケーラビリティとネットワーク内の異なるコンポーネントの相互運用性に重点を置いています。RESTは、Representational State Transfer(表現的状態転送)を指します。

  • Richardson成熟度モデル:このモデルは、API設計の成熟度と完整性を判断する基準です。モデルは三つのレベルに分かれています:

    • レベル0:このレベルでは、APIはHTTPを輸送手段としてのみ使用し、単一のURIをリモートで呼び出し、通常はGETメソッドのみを使用します。これはRESTの原則を実際には使用していません。

    • レベル1:APIは行動ではなくリソースをエクスポートし始め、それはメソッド呼び出しではなくデータオブジェクトの操作により焦点を当てることを意味します。

    • レベル2:このレベルでは、APIはリソースを処理するために正しいHTTP動詞(GET、POST、PUT、DELETE)を使用します。これはHTTPプロトコルの設計とRESTの原則により適合しています。

    • レベル3:これは最高レベルで、APIはレベル2の特徴に加えて、ハイパーメディア(HATEOAS:Hypermedia As The Engine Of Application Stateのような)をエクスポートし、APIが自己記述と発見を可能にするが、スライドではAPIがまだこのレベルに達していないと指摘しています。

  • HTTPSリクエストとレスポンス:これはAPIがHTTPSプロトコルを通じて安全に通信し、リクエストとレスポンスのデータ形式はJSONであることを指しています。

  • ドキュメンテーション

    • 専用のRESTful APIガイドが提供されています。

    • 内蔵ドキュメンテーション(on board docs)が提供され、検索機能が含まれています。

    • ドキュメンテーションは特定のURL(スライドでは<KNE-ONE>/docs形式で表示)でアクセスできます。

  • Web GUIとRESTful API:スライドでは、Webグラフィカルユーザーインターフェース(GUI)は専用のRESTful APIを使用しており、これはユーザーがWebインターフェースを通じてAPIが許可する任意の操作を行うことができることを意味しています。

もう少しRichardson成熟度モデルもう少しについて説明すると

レベル0:リモートプロシージャコール(RPC)

このレベルでは、APIにはhttp://api.example.com/executeというURIのような単一のエントリポイントがあるかもしれません。そして、クライアントはこのURIにリクエストを送信することで全ての操作を実行します。例えば、クライアントが本の情報を取得したい場合、次のようなリクエストを送信するかもしれません:

jsonCopy code
POST <http://api.example.com/execute>
Body: { "method": "getBook", "params": { "id": "123" } }

この方式はリモートプロシージャコールに似ています。なぜなら、クライアントは実行するメソッドとパラメータを指定するからです。

レベル1:リソース

このレベルでは、APIはリソースに注目を始めます。各リソースタイプ(例えば、書籍、著者)は自分自身のURIを持っています。クライアントはURIを通じて特定のリソースにアクセスすることができます。例えば、クライアントが書籍の情報を取得したい場合、次のようなGETリクエストを書籍のURIに送信します:

arduinoCopy code
GET <http://api.example.com/books/123>

しかし、このレベルでは、APIはまだ完全にはHTTPメソッドのセマンティクスを遵守していないかもしれません。

レベル2:HTTP動詞

レベル2のAPIはHTTPメソッドのセマンティクスを遵守します。同一のリソースに対して、異なるHTTPメソッドにより異なる操作を実行します。例えば:

  • 書籍情報の取得:

    1. arduinoCopy code GET <http://api.example.com/books/123>

  • 新しい書籍の作成:

    1. POST <http://api.example.com/books> Body: { "title": "New Book", "author": "Author Name" }

  • 書籍情報の更新:

    1. jsonCopy code PUT <http://api.example.com/books/123> Body: { "title": "Updated Title", "author": "Updated Author Name" }

  • 書籍の削除:

    1. arduinoCopy code DELETE <http://api.example.com/books/123>

このレベルでは、クライアントとサーバー間のインタラクションがより標準的で予測可能になります。

レベル3:ハイパーメディアコントロール(HATEOAS)

レベル3のAPIは、HTTPメソッドのセマンティクスを遵守するだけでなく、レスポンスにハイパーメディアリンクを含み、クライアントが他のリソースや操作を動的に発見できるようにします。例えば、クライアントが本の情報をリクエストしたとき、レスポンスには著者情報や書籍のレビューへのリンクが含まれるかもしれません:

vbnetCopy code
GET <http://api.example.com/books/123>

Response:
{
  "title": "Existing Book",
  "author": "Author Name",
  "_links": {
    "self": { "href": "<http://api.example.com/books/123>" },
    "author": { "href": "<http://api.example.com/authors/456>" },
    "reviews": { "href": "<http://api.example.com/books/123/reviews>" }
  }
}

この例では、**_links**オブジェクトにはハイパーメディアリンクが含まれており、現在のリソースの表現(self)、著者情報、書籍のレビューを指しています。クライアントはこれらのリンクを使用して、書籍に関する更なる情報を発見できます。これには、URIテンプレートや構造を事前に知る必要はありません。これがハイパーメディアがアプリケーションの状態エンジン(HATEOAS)と呼ばれる理由です。
このレベルでは、APIとの対話がよりダイナミックで自己説明的になります。クライアントはこれらのハイパーメディアリンクを通じてAPIを探索し、利用可能な操作を発見することができます。これはクライアントとAPIの相互運用性を大いに強化します。
まとめると、Richardsonの成熟度モデルの各レベルは、単純なHTTPリモートプロシージャコールから、豊富で自己記述的で自己発見的なRESTful APIへの進化を反映しています。各レベルはHTTPプロトコルの特性を更に活用し、APIとのインタラクションをより直感的で、柔軟で、強力にしています。

  • 08:08 Postmanを用いたRestful APIデモ


onboard document
informaiton about get version API
postmanツールを使用して、APIの内容を試すことができます ここでのローカル実行結果、ne-oneのバージョンを取得しようとしています。このAPIの実行には、ログインは必要ありません

このデモでは、PostmanとRestful APIを使用して各種コマンドを実行しデータを取得する方法を示します。対話ではAPIアドレスの設定、リクエストの送信、レスポンスの受信プロセスについて説明します。また、ログインと特権レベルの獲得に必要な要件についてもカバーしています。さらに、Postmanの変数の使用について言及し、統計情報のリクエストや結果の表示の例を提供します。デモは、Restful APIにアクセスするために使用できる他のツールやプラットフォームについて触れることで結論づけられています。

実行例

次ログイン用のAPIを実行してみました

login API
敢えて間違ったアカウントを指定、エラーが返ってくる
今度、正しい情報を入れた

デバイスの静的統計情報を取得しようとします
この種の操作にはsession idが必要で、loginのヘッダー部分から情報を抽出できます。例えば、私が実行した後のsessionidは

ログインのAPIの実行結果からSession IDを入手

この値をダブルクリックすると、グローバル変数に設定できます

変数に設定

その後、他の関数を呼び出す際にsessionidを入力する必要がある場合、この変数を使用します

設定された変数を利用

結果

無事実行できた
  • 15:03 curlとREST APIを使用してデータにアクセス

curlとREST APIを使用してLinuxボックス上のデータにアクセスする方法について話し合います。スピーカーはcurlリクエストの基本、パラメーターやヘッダーの含め方、エラーに対する応答などについて説明します。次に、セッションIDを保存し、それをさらなるコマンドに使用する方法をデモンストレーションします。さらに、スピーカーはブラウザの検査機能を使用してREST APIを検査する能力を探り、ヘッダーやリクエストボディを理解することの重要性を強調します。最後に、REST APIを呼び出すためのPythonリクエストライブラリの利用可能性について触れています。

次に、curlツールを使用してrestAPIを実行します。Windowsローカルでは、curlツールを解凍しました。ツール自体はhttps://curl.se/download.html からダウンロードできます。
C:\Users\xxxx\Documents\curl-8.5.0 に保存しました。
以下の指示に従って、ローカルで正常に実行しました。
curl --insecure --request POST https://192.168.1.30/ippeapi/users/login --header "Content-Type: application/json" --data "{""username"":""admin"",""password"":""admin""}" --include

結果

以下は、セッションIDを格納するための例で、変数として使用します


  • 24:58 PythonとJavaScriptコードのサンプル

GUIを実行し、使われているAPIを調べられる

1 私たちはGUIの内容を直接実行して、ブラウザのInspector機能を使って、全過程でどのAPIsが呼び出されたかを確認することもできます。
2 Browers'Inspectorを使用します。Chromeでは、右クリック->Inspect ネットワークタブに切り替えます ブラウザで作業をします RESTful APIの呼び出しを確認します
3 マウスを右クリックします

右クリックし、Inspectをクリック
networkをクリック

その後、GUIを操作した後、全ての操作内容がここに表示されます。

先実行GUI上で実行した内容は並ばれている

また、これらの関数に入って、特定の呼び出し時に使用されるパラメータの内容を調べることもできます

実際使われたAPIを調査
APIのパラメーター設定
APIのパラメーター設定
Header部分を調べ

たとえば、私がGUIにログインしようとしたとき、ログインAPIが呼び出されていることがわかります。入力されたユーザー名とパスワードはadminです。そして、成功した後、セッションIDが返されました。


最後に、製品はPythonを使用してAPIを操作することもできます

ネットワーク損傷機能はJavascriptによって実装されています。Rest APIを通じてJavascriptを呼び出します。

保存されたネットワーク
保存されたネットワーク
保存されたネットワークの中身

この部分のネットワークシミュレーションの内容は、function部分の実装には実際にはJavaScriptが使用されています。
guiの中のmapの内容は、この部分の内容を変更することで、最終的な損傷行動の変更を実現することができます。以下の図のように、最大と最小の遅延を直接変更することができます。

ここの数字を変更すれば、遅延量の変更ができる
  • 33:59 POSTリクエストとAPIユーザーの理解

APIを呼び出し、指定された設定のネットワークファイル名で、JavaScriptの機能を実行します

私たちは、JavaScriptのパラメータを直接指定することにより、ネットワークの損傷内容を設定することもできます

执行之后,可以看到有以下变化

また、実行後の設定画面はbasic modeからadvanced modeに変更されました

basic mode
advanced mode

POSTリクエストとAPIユーザーの使用について説明します。それは基本モードやアドバンスモードなどの異なる動作モードや、遅延パラメーターを非対称に設定する方法について議論します。また、REST APIを使用するための要件、ユーザー権限を含むについてもカバーします。さらに、複数のユーザーがAPIにアクセスができます。



この記事が気に入ったらサポートをしてみませんか?