1

私はOpenRasta2.0を使用してRESTAPIを構築しており、その拡張性は素晴らしいです。たとえば、DotNetOpenAuthを使用してOAuth認証をプラグインすることは非常に簡単です。

ただし、エラー状態に対する応答を定義する必要があるところまで来ました。HTTPエラーコードに関する標準を採用していますが、Twitter(RESTの長年の例)とほぼ同じように、意味のある応答も返すことを意識しています。

{
 "error":"This method requires authentication.",
 "request":"\/1\/statuses\/followers.json"
}

すべてのハンドラーからOperationResultを返し、例外を手動でキャプチャしてResponseResourceにマップするための最良の方法はありますか?これは、OpenRastaの他の部分がどのように機能するかと比較すると、かなりのオーバーヘッドのように思えます。

または、パイプラインでスローされた例外をキャプチャし、問題をグローバルに処理するために、ある種のコントリビューターを作成する必要がありますか?おそらく、特定のタイプの例外のみを変換します(RestException?)。

基本的に、私はこれのベストプラクティスが何であるか、そして他の人がそれをどのように扱ったかについての感覚を求めています。

ありがとう。

編集:

今日しばらくこれを見た後、ハンドラー呼び出しをラップする方法を理解するのに苦労しています-私は自分自身をOperationInterceptor派生クラスと宣言し、それをパイプラインにフックしてResourceSpace.Uses.PipelineContributor<OperationInterceptorContributor>()カスタム依存関係を設定しましたResourceSpace.Uses.CustomDependency<IOperationInterceptor, ExceptionHandlerInterceptor>(DependencyLifetime.PerRequest)が、どちらに関係なく私が試し、try-catchでラップするメソッドのうち、例外はまだバブルです。

それはRewriteOperationBeforeExecuteまたはAfterExecuteそれがトラップするのに最も適切な場所ですか?もしそうなら、どのように始めるかについての手がかりを私に与えることができますか?

ありがとう。

4

1 に答える 1

5

目的を達成するためにできることがいくつかあります。

まず、try/catch ブロックでハンドラーへの呼び出しをラップする IOperationInterceptor を構築し、ICommunicationContext に正しい OperationResult を割り当てることができます。

次に、これを json でシリアル化する場合は、 operationresult の ResponseResource プロパティをエラーを説明するタイプに割り当てます (ここでは「TitsUpResource」と呼びましょう)。

最後に、そのタイプを URI のないリソースとして登録して、json コーデックを追加できるようにします。

ResourceSpace.Has.ResourcesOfType().WithoutUri.TranscodedBy またはその他の必要なもの。

于 2010-11-15T17:16:32.227 に答える