DataSnap REST
DataSnap アプリケーションの開発 への移動
REST(Representational State Transfer)とは、WWW(World Wide Web)で使われるクライアント/サーバー アーキテクチャです。 REST の制約に準拠していることを RESTful であると言います。 RESTful な Web サービスは、HTTP(hypertext transfer protocol)と REST の原則を使って実装します。
目次
トピック
- 要求フィルタ
- JavaScript REST プロキシ
- DBX パラメータ キャッシング
- REST 重量コールバック
- REST クライアント ライブラリ
- JavaScript クライアントでの認証
- JavaScript クライアント セッション
- DataSnap REST メッセージング プロトコル
DataSnap REST の概要
REST プロトコルでは、サーバーが次の 4 タイプのリクエストに対応できることを前提としています: GET
、POST
、PUT
、DELETE
。 これらの操作は、取得、更新、挿入、削除のデータ操作を表します。 これらの操作は、マッピング プロトコルによってサーバー メソッドと一致させられます。 REST では、URI(Uniform Resource Identifier)パス、メソッド名、およびパラメータの間のマッピングを担当するディスパッチ メカニズムによって、各サーバー メソッドを上記の操作の 1 つとして呼び出せることを想定しています。
URI マッピング
サーバーは URI に応答します。 一般的な HTTP 要求の形式は以下のとおりです。
http://my.site.com/datasnap/rest/URIClassName/URIMethodName[/inputParameter]*
内容を受け付けるのは POST
要求と PUT
要求であり、これらは Update 要求と Put 要求に対応します。 デフォルトのプロトコルでは、URI はコマンド タイプに応じてさまざまなサーバー メソッドにマッピングされます。
コマンド タイプ | マッピング パターン | 例 |
---|---|---|
|
URIClassName.URIMethodName |
Utility.Storage |
|
URIClassName.acceptURIMethodName |
Utility.acceptStorage |
|
URIClassName.updateURIMethodName |
Utility.updateStorage |
|
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/ などに変更することもできます。 これは次の手順で行います。
- DataSnap REST サーバー アプリケーションの WebModule を開きます。
- TDSHTTPWebDispatcher コンポーネントを選択します。
- オブジェクト インスペクタで、DSContext プロパティを探して選択します。
- datasnap/ を mycontext/(または必要な任意の値)に変更します。 最後の / を忘れずに付けてください。
- オブジェクト インスペクタで、WebDispatch プロパティを探して展開します。
- PathInfo サブプロパティを datasnap* から mycontext* に変更します。
- オブジェクト インスペクタで、RESTContext プロパティを探して選択します。
- rest/ を myrest/(または必要な任意の値)に変更します。 最後の / を忘れずに付けてください。
このように変更すると、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 |
コマンド タイプが認識できない |
|
200 |
実行が成功した |
応答に出力パラメータ {"result":[パラメータ値[,パラメータ値]*]} が含まれる |
201 |
|
応答に出力パラメータ {"result":[パラメータ値[,パラメータ値]*]} が含まれる |
500 |
メソッドの実行が失敗した。原因は応答に含まれている |
- |
サーバー メソッドの公開
サーバー クラスを DataSnap サーバーに登録した後は、シグネチャが一致すればどのメソッドでも HTTP で呼び出せるはずです。 ユーザー定義のマッピングを用意しない場合には、HTTP REST 要求で利用できるよう、サーバー メソッドを上記の命名規則に一致させる必要があります。
パラメータは、サーバー メソッド名の直後の URI からマッピングされます。 パラメータ数が一致しない場合や、パラメータが入力パラメータまたは入出力パラメータでない場合には、エラーが返されます。
関連項目
- REST クライアント ライブラリ
- DataSnap REST アプリケーション ウィザード
- クライアントの DataSnap サーバーへの接続
- RESTful な Web サービス
- REST 方式の Web サービスを構築する
サンプル
- REST Surf Spot Finder サンプル(Delphi)
- REST Surf Spot Finder サンプル(C++)