DataSnap REST

提供: RAD Studio
移動先: 案内検索

DataSnap アプリケーションの開発 への移動

REST(Representational State Transfer)とは、WWW(World Wide Web)で使われるクライアント/サーバー アーキテクチャです。 REST の制約に準拠していることを RESTful であると言います。 RESTful な Web サービスは、HTTP(hypertext transfer protocol)と REST の原則を使って実装します。

トピック

DataSnap REST の概要

REST プロトコルでは、サーバーが次の 4 タイプのリクエストに対応できることを前提としています: GETPOSTPUTDELETE。 これらの操作は、取得、更新、挿入、削除のデータ操作を表します。 これらの操作は、マッピング プロトコルによってサーバー メソッドと一致させられます。 REST では、URI(Uniform Resource Identifier)パス、メソッド名、およびパラメータの間のマッピングを担当するディスパッチ メカニズムによって、各サーバー メソッドを上記の操作の 1 つとして呼び出せることを想定しています。

URI マッピング

サーバーは URI に応答します。 一般的な HTTP 要求の形式は以下のとおりです。

http://my.site.com/datasnap/rest/URIClassName/URIMethodName[/inputParameter]*

内容を受け付けるのは POST 要求と PUT 要求であり、これらは Update 要求と Put 要求に対応します。 デフォルトのプロトコルでは、URI はコマンド タイプに応じてさまざまなサーバー メソッドにマッピングされます。


コマンド タイプ マッピング パターン

GET

URIClassName.URIMethodName

Utility.Storage

PUT

URIClassName.acceptURIMethodName

Utility.acceptStorage

POST

URIClassName.updateURIMethodName

Utility.updateStorage

DELETE

URIClassName.cancelURIMethodName

Utility.cancelStorage


http://my.site.com/datasnap/rest/utility/storage などの要求は、コマンド タイプに応じて、上記の 4 つのメソッドのいずれかにマッピングできます。 GET 要求からマッピングされたメソッドは、入力パラメータに応じて、オブジェクトまたはオブジェクトのコレクションを返すと想定されています。

たとえば、Utility.Storage(Key: String): TJSONValue; というサーバー メソッドは、次の GET コマンドに対応します。

http://my.site.com/datasnap/rest/utility/storage/test

POST 要求では、Utility.UpdateStorage(Key: String; Data: TJSONValue); が呼び出されます。 要求の内容が入力パラメータのデータに、URI の末尾がキーにマッピングされます。

PUT 要求では、Utility.AcceptStorage(Key: String; Data: TJSONValue); が呼び出されます。 このメソッドでは、指定されたキーを使ってデータ パラメータを記憶領域に挿入することになっています。 要求の内容は、2 番目の入力パラメータにマッピングされます。

最後に、DELETE 要求では、記憶領域中の指定されたキーを持つオブジェクトを削除する Utility.CancelStorage(Key: String); が呼び出されます。

マッピング パターンはオーバーライド可能です。 ユーザーは、クラス名およびメソッド名のパラメータを基に、それぞれの種類のマッピングをオーバーライドできます。

REST 要求の URL のカスタマイズ

REST 要求の URL の一部を簡単にカスタマイズすることができます。 たとえば、標準の DataSnap コンテキストを datasnap/ から mycontext/ に変更することができます。 また、REST コンテキストを rest/ から myrest/ などに変更することもできます。 これは次の手順で行います。

  1. DataSnap REST サーバー アプリケーションの WebModule を開きます。
  2. TDSHTTPWebDispatcher コンポーネントを選択します。
  3. オブジェクト インスペクタで、DSContext プロパティを探して選択します。
  4. datasnap/mycontext/(または必要な任意の値)に変更します。 最後の / を忘れずに付けてください。
  5. オブジェクト インスペクタで、WebDispatch プロパティを探して展開します。
  6. PathInfo サブプロパティを datasnap* から mycontext* に変更します。
  7. オブジェクト インスペクタで、RESTContext プロパティを探して選択します。
  8. rest/myrest/(または必要な任意の値)に変更します。 最後の / を忘れずに付けてください。

UpdateRESTParameters.png

このように変更すると、DataSnap サーバーは以下で始まる要求を処理するようになります。


/mycontext/myrest

以下で始まる要求は処理されなくなります。


/datasnap/rest

さらに、クライアントで正しい URL を使用するよう、いくらかの変更が必要です。 これには js\connection.js ファイルの更新が含まれます。 setConnection を以下のように更新しなければなりません。

function setConnection(host, port, urlPath)
{
  connectionInfo = {"host":host,"port":port,"authentication":null,"pathPrefix":urlPath};
  connectionInfo.dscontext = 'mycontext';
  connectionInfo.restcontext = 'myrest';
}

応答コード

URI、公開されたメソッド、実行結果に応じて、以下のコードが返されます。


コード 理由

404

URI に DataSnap キーワードが含まれていない

http://my.site.com/rest

501

REST(あるいはその他のプロトコルの)キーワードが含まれていない

http://my.site.com/datasnap/x/y/z

501

コマンド タイプが認識できない

GETPUTPOSTDELETE 以外のコマンド

200

実行が成功した

応答に出力パラメータ {"result":[パラメータ値[,パラメータ値]*]} が含まれる

201

PUT 要求が成功した

応答に出力パラメータ {"result":[パラメータ値[,パラメータ値]*]} が含まれる

500

メソッドの実行が失敗した。原因は応答に含まれている

-

サーバー メソッドの公開

サーバー クラスを DataSnap サーバーに登録した後は、シグネチャが一致すればどのメソッドでも HTTP で呼び出せるはずです。 ユーザー定義のマッピングを用意しない場合には、HTTP REST 要求で利用できるよう、サーバー メソッドを上記の命名規則に一致させる必要があります。

パラメータは、サーバー メソッド名の直後の URI からマッピングされます。 パラメータ数が一致しない場合や、パラメータが入力パラメータまたは入出力パラメータでない場合には、エラーが返されます。

関連項目

サンプル