Jersey を使用して、ネストされたリソースを含む RESTful サービスを実装しています。これは私が現在持っているものの基本的な例です:
@Path("/sites")
public class SiteResource {
@GET
@Path("/{siteId}")
public Site get(@PathParam("siteId") long siteId) {
Site site = // find Site with siteId
if (site == null) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
return site;
}
}
@Path("/sites/{siteId}/articles")
public class ArticleResource {
@GET
@Path("/articleId")
public Article get(@PathParam("articleId") long articleId) {
Article article = // find Article with articleId
if (article == null) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
return article;
}
}
ここで、 のサイトsiteId = 123
と の記事があるとしarticleId = 456
ます。Article リソースへの正しいパスは になります/sites/123/articles/456
。しかし、私の現在の実装では、siteId は完全に無関係です。/sites/789/articles/456
を使用してリソースにアクセスすることもできます。
もちろん、このArticleResource#get
メソッドでは、指定されたサイトが存在するかどうかを確認できます。しかし、これはかなり非現実的なようです。別のネストされたリソースを追加すると、すべてのチェックを繰り返す必要があります。
これは一般的な使用例のように思えますが、この問題に対処する情報源が見つからないことに驚きました。だから、私はおそらく完全に軌道から外れているのではないかと思っており、ネストされたリソースを処理するより良い方法があります。
ありがとう!