2011-12-23 8 views
0

1つのハンドラと1つのURIで複数のリソースを登録したいのですが、これはopen rastaでこれが可能であることを確認したいのです。 私はopen rastaに関するいくつかのウェブサイトを見てきましたが、これが可能かどうかは結論できませんでしたか?Open Rastaで1つのハンドラと1つのURIで複数のリソースを登録できますか?

ResourceSpace.Has 
      .ResourcesOfType<Request>() 
      .AtUri("/processing") 
      .HandledBy<SomeHandler>() 
      .TranscodedBy<SomeCodec>();  

基本クラス「リクエスト」から派生したすべてのリクエストを処理する必要があります。 これで実際に身体を明るくすることができれば素晴らしいことでしょう。

+0

OpenRastaフレームワークがこれを強制しても試していないが、複数のリソースに対して登録されたURIを1つ持つことは、確かにRESTアーキテクチャスタイルに違反している。リソースは多くのURI(アドレス)を持つことができますが、URIは**単一のリソースに**対処するだけです。 –

+0

@SixtoSaez:私はあなたの意見を理解していますが、あなたのリソースをどのように見ているかだけの見解ではないと思いませんか。私はすべてが「要求」タイプであるという視点を持っています。 。 –

+0

リソースのさまざまな "ビュー"を表現したい場合は、OpenRastaの異なるコーデックを使います。 RESTでは、特定のリソースを表すために異なるメディアタイプ(コーデック)を使用できますが、アドレスは特定のリソースのみを識別する必要があります。 –

答えて

2

したがって、がすべてのリクエストであり、あなたが提供した登録を使用してトンネルしたい場合は、できます。

マッチングが最も近づいタイプに基づいて行われますので、

public void Post(SpecificRequest specificRequest) { /*handles the SpecificRequest type */ } 
public void Post(Request myRequest) { /* handles the default case */ } 

、請求、RESTfulなシステムでは、我々は1につながる、さまざまなURIと異なるものをしようとして識別する傾向があることに注意してくださいタイプごとの登録。

2

かなり限られたOpenRastaの経験では、.AndUriリソースロケーションを追加するために.Andメソッドを使用できます。

I.e.お使いの場合には{カーリーブラケットは}あなたのハンドラメソッド、すなわちの入力パラメータを指定

ResourceSpace.Has 
     .ResourcesOfType<Request>() 
     .AtUri("/processing").And.AtUri("/processing/{processid}") 
     .HandledBy<SomeHandler>() 
     .TranscodedBy<SomeCodec>(); 

public class SomeHandler 
{ 
    public Request Get(int processid = 0) //specify a default value for the uri case /processed 
    { 
     if (processid == 0) 
      return Context.Set<Request>().ToList(); //Context comes from my DbContext derived class which is part of my entity model. 
     else 
      return GetRequestFromProcessId(processid) //this is a private method in your handler class using Linq to SQL to retreive the data your interested in. I can't see your handler so I'm making it up. 
    } 
} 

私はOpenRastaのドキュメントで、あなたが(だけdestinctを持たなければならないことをspecifedノートを見つけました1つ)対応するそれぞれのタイプとハンドラのResourceSpace定義。言い換えれば、同じResourceOfTypeクラスを同じHandledByハンドラクラスで複製してはいけません。私はこれをテストしました。それが事実であり、おそらく最初に質問をしている理由です。

N.b.このコードは完全にテストされていません。私はあなたのクラスとuriに書いて置き換えたもののpaternを取得しました。これは、HTTP GET verbからデータを取得しようとしていることを前提としています。他の寄稿者は、POSTルートを降りましたが、あなたは指定していません。

関連する問題