与 Spring MVC 一起使用时的 REST 命名约定



我正在开发一个带有基本对象的JPA的SpringMVC应用程序。

使用此基本的 REST 约定:https://restfulapi.net/resource-naming/对于名为customer的实体,我有:

HTTP GET http://xxxx/customers  //Get all customers
HTTP POST http://xxxx/customers  //Create new customers
HTTP GET http://xxxx/customers/{id}  //Get customer for given Id
HTTP PUT http://xxxx/customers/{id}  //Update customer  for given Id
HTTP DELETE http://xxxx/customers/{id}  //Delete customer  for given Id

这非常简单。现在,应该如何从调用这些方法的页面中命名 url?

例如,首先我想使用数据表显示所有值。

我应该使用相同的 URL GET http://xxxx/customers 但以某种方式要求 HTML 视图而不是数据吗? 使用参数的示例:http://xxxx/customers?view 或类似的东西。O 我应该使用完整的新集或 URL?

同样,只显示一条记录的页面的 URL 应该是什么(例如,我在上一个数据表中单击了客户 YYY)。应该是 GET:http://xxxx/customers/yyy?view 还是全新的东西?

在这种情况下,使用 Spring 如果我检测到参数视图,我会使用模型和视图结果进行响应,如果不是仅使用包含数据的json

这很简单。现在,应该如何从调用这些方法的页面中命名 url?

正如罗曼·沃特纳(Roman Vottner)所指出的,真正的答案是"你想要的任何东西"。

有一件事我认为马上会有所帮助——停止思考"方法",而考虑文档。

HTTP是一种应用程序协议,其应用程序域是通过网络传输文档 -- Jim Webber

文档的目标 uri 就是:标识符。 你可以使用任何你喜欢的拼写约定,因为客户端不关心 - 就像编译器不关心你对变量名使用什么拼写一样。

当然,如果它真的无关紧要(而且真的无关紧要),那么按照通常的"集合的这个约定;集合的元素的约定"使用资源名称也可以。

我应该使用相同的 URL GET http://xxxx/customers 但以某种方式要求 HTML 视图而不是数据吗?

对于几乎所有关于REST的问题,适当的启发式方法是问"我们如何使用Web浏览器和HTML做到这一点?

基本思想是资源(也称为"文档")可以有许多不同的表示形式。 客户端可以使用 Accept 向服务器宣布它为给定上下文理解的媒体类型。

现在,有趣的是,浏览器将为图像发送与javascript或页面不同的Accept标头。 那么他们怎么知道呢? 好吧,他们理解 HTML,因此可以区分不同风格的标签(脚本、a、img 等),并在检索每个标签时选择合适的标头。

换句话说,你不只是给某人一个链接 - 你还给他们提示,以便客户能够理解链接的语义。 网页链接是一种常见的方法。

最新更新