使用 Spring Boot 创建动态 REST 端点

Dynamic REST endpoint creation with Spring Boot

我正在开发一个框架,该框架具有 Spring 启动 Java 层和包含核心逻辑的 C++ 层。 C++ 层是模块化的,因此许多具有独特职责和命令的服务共享公共组件,包括命令处理器。命令处理器通过 Thrift RPC 与 Java 层(所有服务都相同)进行通信。

目前,用户通过指定命令名称和参数集在 Java 级别通过单个 executeCommand REST 端点执行命令。

POST http://localhost:8388/framework/executeCommand

JSON正文{"commandName": "aCommand", "parameters": {"param1": "value1", "param2": "value2"}}

有没有办法根据 C++ 层提供的命令集动态生成 REST 端点?例如...每个命令都会有一个端点,例如

POST http://localhost:8388/framework/aCommand

JSON正文{“参数”:{“param1”:“value1”,“param2”:“value2”}}

获取 http://localhost:8388/framework/aCommand?param1=value1

Ex... 在启动时,Java 层会向 C++ 层查询命令集和其他相关信息,例如适当的 REST 方法。使用此信息,Java 层将为每个命令生成一个端点。

谢谢!

您可以在 REST 控制器中使用路径变量来接受不同的命令类型,例如:

@RestController
@RequestMapping("/command")
@RequiredArgsConstructor
class CommandController {

    private final CommandService commandService;

    @PutMapping("/{commandType}")
    public CommandResult handleCommand(@PathVariable("commandType") String commandType,
                                       @RequestParam Map<String, String> params) {
        return commandService.execute(commandType, params);
    }
}

(这里CommandService是一个服务,它在启动时加载可用命令,然后验证并执行请求的命令)。

然后您可以 运行 带有请求的命令 PUT http://localhost:8080/command/someCommand?param1=value1&param2=value2

更新

澄清需求的一些解决方案(动态 REST 控制器创建):