从同一控制器的另一个 REST 端点直接调用 REST 端点(方法)是一种好习惯吗?

Gan*_*hak 4 java rest spring controller

我有一个具有多个端点的 Spring REST 控制器类。从另一个端点直接调用端点方法是一种好习惯吗?

我已经用谷歌搜索了它,但没有找到任何关于处理这个问题的好做法的答案。

@RestController
public class DataContoller {

    @GetMapping("/dataA/{param}")
    public ResponseEntity getDataA(@PathVariable String param) {
     // logic to fetch data A
     return ResponseEntity.ok("A");  
    }

    @GetMapping("/dataB/{param}")
    public ResponseEntity getDataB(@PathVariable String param) {
     ResponseEntity response = getDataA("test");
     String result = response.getBody();
     return ResponseEntity.ok("B" + result);  
    }

}
Run Code Online (Sandbox Code Playgroud)

原则上它是有效的,因为它只是来自另一个方法的方法调用,但我想知道这是否是一个好习惯。如果这不是好的做法,那么理想的做法是什么。一种选择是使用 RestTemplate。这是唯一的选择吗?

And*_*lko 5

它没有那么糟糕,但也没有那么好。

问题在于直接调用会getDataA("test")跳过通常在此控制器方法之前的所有内容:安全检查、验证、过滤、日志记录、映射或任何其他类型的数据操作。

它引入了不稳定性:您不确定哪些数据进入,以及它真正来自何处。它是来自我的内部方法,还是 HTTP 调用?

一个非常简单的建议是拥有一个服务方法getDataA并从两个控制器的方法中调用它。但是,正如您已经注意到的,它并没有完全取代 HTTP 请求。