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

时间:2019-03-29 23:13:15

标签: java rest spring-mvc

我正在使用带有基本对象的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如果我检测到参数 view ,则我将返回modelAndView结果,而不是仅使用包含数据的 json 进行响应。

1 个答案:

答案 0 :(得分:3)

  

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

正如罗曼·沃特纳(Roman Vottner)所说,真正的答案是“任何您想要的东西”。

我认为一件事会立即帮助您-停止思考“方法”,而思考文档。

  

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

文档的target-uri就是:标识符。您可以使用任何喜欢的拼写约定,因为客户端不在乎-就像编译器不在乎变量名使用哪种拼写一样。

当然,如果真的没关系(也确实没有关系),那么使用遵循通常的“此约定用于集合;该约定用于集合元素”的资源名称也可以。 / p>

  

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

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

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

现在,有趣的是,浏览器将针对图像发送的Accept标头与针对JavaScript或页面发送的标头不同。那么他们怎么知道?嗯,他们了解HTML,因此可以区分标记的不同样式(脚本,a,img等),并在检索每个标记时选择合适的标头。

换句话说,您不仅要给某人一个链接-您还要给他们一些提示,以便客户可以理解该链接的语义。 Web Linking是一种常见方法。