2010-12-09 32 views
3

ReST Webサービスは状態を保持できません - これは大規模なデータベーストランザクションを検討しているときに私にとっては今のところ問題です。RESTと大規模なデータベースクエリ

私のReST Webサービスには、データベースに対してCRUD操作を行うという大きな役割があります。問題は、何千もの行を持つテーブルをクエリして、XMLとしてクライアントに返す必要がある場合です。これは良くありません。何千ものレコードを要求し続けるのは非常に非効率ですが、REST Webサービスで部分的なトランザクション(OracleのROWNUMキーワードを使用)はできません。だから、どうやってこれを回るの?

時テーブル100からレコードを取得するための1つの可能な方法は次のようになります。

http://mywebservice/employees/0/100

私は次の要求は次のようになり100

すなわち提出最後のリクエストの状態を保持します

http://mywebservice/employees/101/200

などとなる。しかし、これは厳しく安らかですか?

+1

このORACLEはどのように固有のものですか?クライアントは状態を保持しなければならず、返されるべきオフセット、順序、行数などのデータを送信する必要があります。クライアントがすべてのデータを必要とする場合は、何もできません。クライアントはすべての作業を行う必要があります。それとも私はここで何かを逃していますかあなたは正確なサンプルを投稿できますか? – Christian

+2

問題は何ですか?テーブルが大きいのは?または返されたサブセットが大きいことは?または、データのサブセットを返すことはできませんか? – Ronnis

+0

@Waxolunist - これは実際のOracle固有のものではありません。私はクライアントがすべての仕事をして状態を保持し、それに応じてURLを形成すべきだということに同意することができますが、クライアントが有効なURLを形成するために大量の情報を知っている必要はないという反論があります。そうでなければ、あなたは穏やかでない地域に踏み込んでいると思います。 – Vidar

答えて

1

あなたはCRUDについて言及しましたが、あなたの例は読取り専用のように見えます。なぜページングを導入しないのですか?

# items 0 to 99 
GET /employees?page=0&size=100 
# items 100 to 199 
GET /employees?page=1&size=100 

あなたの例ではどのような状態を意味するのかは不明です。 Restful over HTTP apiについて話をすると、HTTP自体はステートレスなプロトコルですが、全体のシステムは確実に時間の経過とともに変化する可能性があります(POSTなどの書き込みアクションを実行する場合)。

あなたは、Restful APIを通じて公開しようとしている書き込みアクション(トランザクションについて言及した)を挙げることができますか?

+0

私はあなたが/から範囲を(ページングのコンセプトである)パス要素として置いているのを見ています。パラメータ(この場合はページング)は、HTTP経由の安定URLに対しては話しません。これをパスまたはパラメータの中にエンコードするかどうかは、しばしば味と標準/常識の問題です。ルールの私の親指は、ディレクトリ(subresourceのような感じ)なら、それをパラメータにしないとパス要素にします。私は 'page = 1&size = 100'はパラメータとしてもっとフィットし、/ 0/99としてより直感的だと思います。 –

関連する問題