关于将参数用于REST Web服务请求的一些疑问?

时间:2015-09-20 10:31:05

标签: spring web-services rest spring-mvc spring-rest

我在Spring和REST Web服务中都是新手,我在下面的教程中有以下dout,其中介绍了如何使用Spring MVC实现RESTful Web服务。

所以,在控制器类中我有这个方法:

@Controller
@RequestMapping("/api/categories")
public class CategoryRestController {

    @RequestMapping
    @ResponseBody
    public CategoryList getCategories(@RequestParam("start") int start, @RequestParam("size") int size ) {
        List<Category> categoryEntries = categoryService.findCategoryEntries(start, size);
        return new CategoryList(categoryEntries);

    }

}

此方法处理对resoruce / api / categories 的HTTP GET请求,并将检索到的列表返回JSON格式(我认为它取决于内容协商:如果调用者把Accept标头作为JSON,方法以JSON格式返回结果,是不是?)

顺便说一下,我的疑问与教程中显示的HTTP请求有关,实际上它是这样做的:

http://localhost:8080/springchocolatestore/api/categories?start=0&size=2

由前一个控制器方法处理以返回JSON格式的分页列表(可能是hude),实际上我检索以下输出:

{
  "categories": [
    {
      "links": [
        {
          "rel": "self",
          "href": "http://localhost:8080/springchocolatestore/api/categories/1",
          "variables": [],
          "templated": false,
          "variableNames": []
        }
      ],
      "name": "Truffles",
      "description": "Truffles",
      "id": {
        "rel": "self",
        "href": "http://localhost:8080/springchocolatestore/api/categories/1",
        "variables": [],
        "templated": false,
        "variableNames": []
      }
    },
    {
      "links": [
        {
          "rel": "self",
          "href": "http://localhost:8080/springchocolatestore/api/categories/2",
          "variables": [],
          "templated": false,
          "variableNames": []
        }
      ],
      "name": "Belgian Chocolates",
      "description": "Belgian Chocolates",
      "id": {
        "rel": "self",
        "href": "http://localhost:8080/springchocolatestore/api/categories/2",
        "variables": [],
        "templated": false,
        "variableNames": []
      }
    }
  ]
}

好的,所以在请求中我通过类别指定分页参数?start = 0&amp; size = 2

我的疑问与此参数的用户有关。根据我的理解(但可能是错误的),参数的使用违反了RESTful原则。是真的还是我在做什么?

或许在这个特定情况下是有效的,因为参数没有指定一个对象(必须返回到我的JSON输出中)但只与某些选项有关?

我的意思是也许我不能使用参数来指定特定的对象,如下所示:

// RETRIEVE THE PRODUCT WITH ID=1
http://localhost:8080/springchocolatestore/api/producs?product=1

所以我认为之前没有遵循RESTfull标准,因为我使用参数指定产品对象而不是作为资源访问它,所以我必须这样做:

http://localhost:8080/springchocolatestore/api/producs/1

你能给我一些澄清吗?

TNX

1 个答案:

答案 0 :(得分:0)

REST与URL没有太大关系,使用请求参数并不是不可靠的。

但我同意路径变量通常用于标识特定资源,参数通常用于搜索或分页参数。