【问题标题】:Validating path to nested resource验证嵌套资源的路径
【发布时间】:2013-05-24 10:57:55
【问题描述】:

我正在使用 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 的文章。文章资源的正确路径是/sites/123/articles/456。 但在我当前的实现中,siteId 完全无关紧要。您也可以使用/sites/789/articles/456 访问资源。

ArticleResource#get 方法中,我当然可以检查指定的站点是否存在。但这似乎相当不切实际。如果我添加另一个嵌套资源,我必须重复所有检查。

在我看来,这似乎是一个常见的用例,令我惊讶的是,我没有找到解决此问题的任何来源。所以我想知道我是否完全偏离了轨道,是否有更好的方法来处理嵌套资源。

谢谢!

【问题讨论】:

    标签: java web-services rest jersey


    【解决方案1】:

    文章似乎是站点的子项。因此,Java 和/或数据库方面可能存在某种关系,您可以使用它来获取和验证站点和文章。

    如果请求的文章在其中,我会检索站点,包括其子项和外观。

    如果站点和文章不相关,您的整个 URI 方案将不会反映您的资源。

    【讨论】:

    • 是的,网站和文章之间的关系也反映在数据库中。问题是哪里是检索站点(或父对象,更通用)并检查它是否存在的最佳位置?如果我在ArticleResource#get 中执行此操作,我将不得不在每个子资源的每个方法中进行相同的检查。
    猜你喜欢
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多