Java 使用@RequestBody获取的RESTAPI
在为我的资源Java 使用@RequestBody获取的RESTAPI,java,rest,spring-mvc,Java,Rest,Spring Mvc,在为我的资源仪表板创建REST端点时,我正在尝试遵循最佳实践。因此,我计划在我的spring mvc控制器中创建POST for creation、PUT for update和GET for fetching仪表板 但是,我还有一个validateAPI端点,它不会保存或更新数据库中的任何内容,因此我计划对validate端点使用GETHTTP方法。但是有很多参数我需要传递给这个端点,所以我希望这是一个@RequestBody,而不仅仅是普通的请求参数,因为GET有一个我可以超过的限制 我是否
仪表板创建REST端点时,我正在尝试遵循最佳实践。因此,我计划在我的spring mvc控制器中创建POST for creation、PUT for update和GET for fetching仪表板
但是,我还有一个validate
API端点,它不会保存或更新数据库中的任何内容,因此我计划对validate
端点使用GET
HTTP方法。但是有很多参数我需要传递给这个端点,所以我希望这是一个@RequestBody
,而不仅仅是普通的请求参数,因为GET
有一个我可以超过的限制
我是否应该使用POST
而不是GET
,即使我不打算对数据库进行任何更改
@PostMapping("/dashboards/{id}/validate")
public ResponseEntity<VisualMetadata> validateVisualMetadata(@PathVariable String id,
@Valid @RequestBody DashboardDto requestDto) {
}
即使我不打算对数据库进行任何更改,我是否应该使用POST而不是GET
@PostMapping("/dashboards/{id}/validate")
public ResponseEntity<VisualMetadata> validateVisualMetadata(@PathVariable String id,
@Valid @RequestBody DashboardDto requestDto) {
}
可能吧。有时,在中,您可以找到一种不太常见的、适合您的用例的标准化方法。鉴于资源状态没有预期的更改,您将寻找一种安全的方法
我不相信有一个很好的适合您的用例
但是(通常)用消息体发送GET请求是个坏主意:
GET请求消息中的有效负载没有定义的语义;在GET请求上发送有效负载正文可能会导致某些现有实现拒绝该请求。-
休息点的一部分是,多个组织可以使用标准化的现成解决方案,而且一切都“正常工作”。如果您不需要这样的承诺(您的组织控制着客户机、服务器以及其间的组件),那么您可能可以侥幸逃脱。至少有一段时间
使用POST
进行安全请求没有什么不合适的。中间组件不一定知道请求是安全的,因此这并不理想(例如,当响应丢失时,中间组件不知道重新发送请求是安全的).在这一点上做个总结:我只会使用POST
,而不会为某样东西是否真正安静而绞尽脑汁。做你认为最有意义的事情,并且对以后维护代码的人来说最不意外。我建议使用POST
。我使用GET
仅用于请求数据,例如通过ID之类的标识符。