5.1.エンドポイントとhttp動詞 |
---|
2022-04-11/2023-11-11 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NGSIのAPIは、Web APIと呼ばれるAPIの一種です。前節まで" localhost:1026/v2/entities/"のentitiesをWindowsの用語に合わせてフォルダと呼んでいましたが、ここからはWeb APIの用語に合わせてエンドポイントと表現します。 ここまでの説明で、例えば" curl -X GET http://localhost:1026/v2/entities/urn:ngsi-ld:Store:002"というコマンドがありましたが、この"GET"の部分を"http動詞 (http verv)"と呼びます。本書でもこれに倣ってなるべくhttp動詞と記載しますが、一般的なWeb APIの説明ではメソッドまたはhttpメソッドと呼ぶ場合が多い様です。本書でも一部両方の記載が混ざっていますが、ご容赦下さい。http動詞にはGET、PUT、POST、PATCH、DELETEのなどの種類があります。 エンドポイントとhttp動詞の組み合わせで操作の内容が決まります。以下、操作可能な組み合わせの一覧です。パスの構造は都市OSによって異なるので、それぞれの都市らと毎に確認する必要があります。下記のパスは本書で動かす環境のものだと理解してください。また、下記のhttp動詞の他に、HEAD (GETと同じだか本文を返さない) 、CONNECT、OPTIONS、TRACEがありますが、ここでは省略します (参考1, 2)。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ちょっとコムズカシイ話になりますが、「場所」は一意に識別できないと、何かと不都合があります。ISOでは場所識別子の概念を定義 していて、仮想世界の場所も含んでいます。仮想世界の場所識別子のひとつとしてはURLがあります。URLを指定するとパスが決まるので、対象となるオブジェクト (EntityやAttribute)を一意に決めることができます。このため、NGSI v2のインタフェースでは、URLに対してhttp動詞で動作を定義するという形式を採用しています。 |
5.2.http |
---|
2022年4月11日 |
|||||||||||||||||||
"http"や"https"はWebブラウザを使ったときにurlの先頭に記述しますが、これはhttpというプロトコルで通信をするという記号です。httpは" Hypertext Transfer Protocol"の事で、ブラウザは"http:~"と指定されると、httpプロトコルを使用してWebサーバと通信を行っています。Fiware/OrionはWebサーバと同様にhttpでアプリケーションと通信を行います。httpは、アプリケーションが「リクエスト」を発行し、サーバが「レスポンス」を返すというリクエスト・レスポンス型のプロトコルです。リクエストには、urlやメソッド、バージョンなどの情報が含まれています。メッセージボディを含む場合もあります。メソッドとはhttp動詞のことで、既に記載したように8種類あります。レスポンスには、ステータス、メッセージヘッド、メッセージボディが含まれています。urlには既に記述している様に"?"を挟んでオプションを指定する事ができます。Web APIとは、一般的にはこの様にhttpを使って情報をやりとりするAPIを指します。つまり、FiwareはWeb APIで情報をやとりします。 "https"もWebブラウザでよく見かけますが、これはセキュリティを強化したhttpの事で、プロトコルはhttpと同じと考えて差し支えありません。 httpのリクエストのプロトコルは以下の形式になってます |
|||||||||||||||||||
<メソッド> <url> <httpバージョン> #必ず最初に書かれている [<ヘッダフィールド>] #複数のヘッダフィールドが改行をを挟んで並んでいる (改行) #<body>との境目の印 <Body> #データ本体 |
|||||||||||||||||||
ヘッダーフィールドには多種のものがありますが、例えば以下のものがあります。 |
|||||||||||||||||||
|
|||||||||||||||||||
本書のここまでの記述で、"-H"や"-header"で指定していたのは、このヘッダーフィールドの指定でした。 httpのレスポンスは以下の形式になっています。ヘッダーフィールドの定義はリクエストと共通です。 |
|||||||||||||||||||
<httpバージョン> <ステータス> <説明> #必ず最初に書かれている [<ヘッダフィールド>] #複数のヘッダフィールドが改行をを挟んで並んでいる (改行) #<body>との境目の印 <Body> #htmlなどの本文 |
|||||||||||||||||||
ステータスとしては、主なものに以下のものがあります。 |
|||||||||||||||||||
|
|||||||||||||||||||
この様にWeb APIは文字列の行が並んでいる構造をしています。ここまで、curlを利用してきましたが、curlとは、これらの文字列を生成して指定のurlにリクエストとして送り込み、その結果として返却されたレスポンスの文字列を表示するツールだったというわけです。後の章では、Pythonを使ったプログラムを作りますが、やはり同じように文字列をくみ上げたり、返却したりするものです。 データの受け渡しの方法には、GETの際にurlに続くオプション文字列で渡す方法と、PUTの際にBodyとして渡す方法があります。urlは長さに制限があり、その諸元(最大長)はソフトウェアに依存しますが、一般的には数キロバイト程度と言われています。また、通信を傍受された場合、urlは裸で見えてしまうため、あまり情報を多量に乗せることはこの点からも望ましくはありません。 |
|||||||||||||||||||
|
|||||||||||||||||||