【问题标题】:Rest API - spring controllers and resourcesRest API - 弹簧控制器和资源
【发布时间】:2015-07-07 17:43:36
【问题描述】:

我正在编写一个非常简单的rest API,这是我的第一次尝试,我将使用spring框架。

测试应用仅处理产品、类别和类型。一个产品有一个类型,一个类别有很多类型,一个产品也可以有多个可以适应的类别,所以我想知道是否应该为每个类别创建一个弹簧控制器。

如果我这样做了,那么在通过类别控制器调用时是否可以取回产品,这样可以吗?

我的意思是这样的:

/categories/{category_id}/types/{type_id}/products

对我来说,这将按类别过滤,然后按类型过滤并获取该类型的所有产品,或者这不是休息吗?

【问题讨论】:

    标签: java spring rest


    【解决方案1】:

    休息模式应该简单而不是分层。

    如果你想检索东西,它们应该很简单,比如:

    /categories/{category_id}
    /products/{product_id}
    /types/{type_id}
    

    对于过滤,您应该使用查询字符串而不是 url 路径,因为 url 路径关心顺序/层次结构,而过滤不应该关心顺序。

    【讨论】:

    • 好的,这正是我想要的,所以如果我想过滤产品,那么我会执行以下操作:/products?typeId=1
    【解决方案2】:

    是的,你可以。这个 API 对我来说看起来不错。如果您正在寻找实现,请参见下文。

    下面的函数很好用

    @RequestMapping(value="/categories/{category_id}/types/{type_id}/products", method = RequestMethod.GET)
    @ResponseBody
    public void test(
            @PathVariable String  category_id,
            @PathVariable String type_id)
    {
    
    }
    

    如果您需要,您可以为您的类别和类型对象绑定属性编辑器,并将它们作为对象传递给函数。

    【讨论】:

    • 谢谢,很有用。
    【解决方案3】:

    我认为您应该有一个可以通过 1 个或多个参数获取产品的 ProductController。我会使用查询参数而不是路径参数,因为路径参数会让人感到困惑,尤其是。当您查询多个类别或类型时。所以有这样的服务;

    /product/list?category=a,b,c&type=abcd
    /product/get/id=123 or /product/get/{id}
    

    您可以为类别和类型设置控制器,允许列出和创建/更新/删除(如果支持)。

    /category/get?id=123
    /types/get?id=123
    

    【讨论】:

    • 好的,那么可以使用查询字符串来休息吗?我想我需要多读一点!
    • 是的,不那么令人困惑了。我没想到。
    【解决方案4】:

    最常见的情况是您将其建模为

    /category/
    /product/
    /type/
    

    (对于 POST,带有用于 PUT 和 DELETE 的尾随 ID)然后您可以按如下方式查询(GET)产品和类别

    /product/?category_id=123
    /product/?type_id=12
    /category/?name=big+items
    

    当您有 1:1 的关系时,您还可以考虑将类别和类型组合成一个实体。也许类型是类别的属性,反之亦然。

    根据您的规格,

    /categories/{category_id}/types/{type_id}/products
    

    {type_id} 确实是多余的,因为类别和类型之间是 1:1 的关系。

    另一方面,

    /categories/{category_id}/products/
    

    很好,但一次只能搜索一个类别。

    ps。 “type”通常是保留关键字,可能会导致奇怪的错误消息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 2014-12-14
      相关资源
      最近更新 更多