1

階層リソースを含むRESTfulWebサービスがあります。これらのリソースを、グローバルルーティングクラス(global.asax)によってマップされたさまざまなサービスクラスに分けたいと思います。たとえば、次のようなリソース階層がある場合:

Book/
Book/{BookID}/Chapters/
Book/{BookID}/Chapters/{ChapterID}/
etc...

このように1つのクラスにしかマップできませんでした:

RouteTable.Routes.Add(new ServiceRoute("Books/", new WebServiceHostFactory()
  , typeof(BookService)));

これは機能しますが、その単一のサービスにすべてのメソッドを実装する必要があります。BookService、ChapterServiceなどの複数のサービスクラスが必要です...次のようになります。

RouteTable.Routes.Add(new ServiceRoute("Books/", new WebServiceHostFactory()
  , typeof(BookService)));

RouteTable.Routes.Add(new ServiceRoute("Books/{BookID}/Chapters/"
  , new WebServiceHostFactory(), typeof(ChapterService)));

しかし、それは機能しません...それで、今、私はすべてのメソッドを単一のサービスで定義することを余儀なくされています。それを回避する方法はありますか、それともこの単一の巨大なサービスクラスを使用する運命にありますか?

4

1 に答える 1

1

この答えを見てください。これは、ASP.NET Web APIを使用したルーティングと関係があります(一部のコメントでは使用を提案していますが、私もそうします)が、RESTfulAPIの開発全般にも関係しています。APIでスキーマの階層を表示しようとはしません。これにより、不要な複雑さが増すと思います。したがって、APIの例は次のようになります。

/Chapters/{ChapterID}?Book={BookID}

これにより、複雑なルーティングが排除され、APIユーザーが理解しやすくなり、RESTfulの原則に準拠します。

于 2012-07-30T14:56:48.313 に答える