Spring RestController url 用于 findById 和 findByIds
Spring RestController url for findById and findByIds
在我的 Spring 引导应用程序中,我有一个以下 REST 控制器:
@RestController
@RequestMapping("/v1.0/decisions")
public class CriterionController {
@Autowired
private CriterionService criterionService;
@RequestMapping(value = "/{decisionId}/criteria/{criterionId}", method = RequestMethod.GET)
public CriterionResponse findById(@PathVariable @NotNull @DecimalMin("0") Long decisionId, @PathVariable @NotNull @DecimalMin("0") Long criterionId) {
Criterion criterion = criterionService.findById(criterionId);
return new CriterionResponse(criterion);
}
}
一切正常,我可以通过 ID
.
检索 Criterion
现在我需要向我的 CriterionController
添加额外的逻辑,它将通过一组 IDs
.
检索 Criterion
现在我怀疑它是如何实现的。例如,我应该添加一个单独的端点,例如:
/{decisionId}/criteria/{criterionIds}
或者例如为此目的或以其他方式重用现有的。请告知如何根据 REST 的最佳实践实现它。
这是一个棘手的问题,但我可以建议 2 个选项:
/{decisionId}/criteria?id=1&id=2&id=3
或
/{decisionId}/criteria?id=1,2,3
前者看起来更 RESTful 但最终可能会很长 URL 因为您每次都需要指定查询参数。
后者将 id 聚合在一个逗号分隔的列表中。我个人更喜欢这个选项,并且愿意这样做。
虽然与 REST 无关,但 URL 均在 RFC 6570
的第 3.2.8 节中接受
在我的 Spring 引导应用程序中,我有一个以下 REST 控制器:
@RestController
@RequestMapping("/v1.0/decisions")
public class CriterionController {
@Autowired
private CriterionService criterionService;
@RequestMapping(value = "/{decisionId}/criteria/{criterionId}", method = RequestMethod.GET)
public CriterionResponse findById(@PathVariable @NotNull @DecimalMin("0") Long decisionId, @PathVariable @NotNull @DecimalMin("0") Long criterionId) {
Criterion criterion = criterionService.findById(criterionId);
return new CriterionResponse(criterion);
}
}
一切正常,我可以通过 ID
.
Criterion
现在我需要向我的 CriterionController
添加额外的逻辑,它将通过一组 IDs
.
Criterion
现在我怀疑它是如何实现的。例如,我应该添加一个单独的端点,例如:
/{decisionId}/criteria/{criterionIds}
或者例如为此目的或以其他方式重用现有的。请告知如何根据 REST 的最佳实践实现它。
这是一个棘手的问题,但我可以建议 2 个选项:
/{decisionId}/criteria?id=1&id=2&id=3
或
/{decisionId}/criteria?id=1,2,3
前者看起来更 RESTful 但最终可能会很长 URL 因为您每次都需要指定查询参数。
后者将 id 聚合在一个逗号分隔的列表中。我个人更喜欢这个选项,并且愿意这样做。
虽然与 REST 无关,但 URL 均在 RFC 6570
的第 3.2.8 节中接受