我是 Spring 和 REST Web 服务的新手,我在教程之后有以下内容,该教程展示了如何使用 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);
}
}
此方法处理对资源/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": []
}
}
]
}
好的,所以在请求中我通过categories?start=0&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
你能给我一些澄清吗?
肿瘤坏死因子