2016-07-20 6 views
-1

私は、テレビ放送局向けのRESTfulなAPI、具体的にはデータのサブセットを求めるときのパスをどのように見せるかを定義しています。たとえば、特定のチャンネルのコンテンツ全体、特定の日付の間にそのチャンネルの言語を取得したい場合、どのように日付でフィルタリングしますか?以下のパスが長すぎると思われる:SO上、ここで述べたようにRESTful API呼び出しの結果をフィルタリングするためのベストプラクティス?

endpoint.com/content/channels/{channel_name}/language/french/from/20160701/to/20160801 

私が見た選択肢は、リクエストボディにそれに日付範囲フィルタを「リソースとして検索を扱う」とPOSTすることである:(How to design RESTful search/filtering?

どのような考えですか?

+0

{channel_name}以外のクエリパラメータを使用しないのはなぜですか? –

+0

そのようなパスパラメータは使用しないでください。 –

答えて

0

私はTV放送事業者の仕事もしています。私たちが取ってきたアプローチは、リソースを通じて検索条件を投稿することです。処理がずっと簡単で、無限のパスを作成しません。

インタフェース:

@POST 
@Path("/lookup") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
List<Content> getContent(CriteriaSearch cr); 

が実装:

@Override 
@Public 
public List<ContentInfo> getContent(CriteriaSearch searchCriteria) { 

     List<ContentInfo> contentInfos = contentManager.lookupContent(searchCriteria); 

...

+0

例を挙げて説明できますか? – blarg

1

私はあなたがURIからそれを取得することにより、あなたのリソースをフィルタリングする@QueryParam注釈を使用することをお勧めします。あなたはこれらの値にアクセスすることができJAX-RSを使用して

/channel_name?language=french&from=20160701&to=20160801 

のようなURIを使用することができ、リソースフィルタリングするに

:もちろん

@GET 
@Path("/channel_name") 
List<Content> getContent(@QueryParam("language")String lang, 
         @QueryParam("from")Long from, 
         @QueryParam("to")Long to) { 
    // your logic 
} 

あなたは、例外の世話をする必要があるとし、この場合、状態コードを含むrepsonse。

+0

なぜPOSTを*取得する*コンテンツですか? RESTではなくRPCのように見えます。 –

+0

編集された回答を参照してください。 –

+0

OK。 URLが '@Path @ 'と一致しません。 –

関連する問題