ID为URL时的API REST

时间:2019-02-17 15:06:02

标签: java rest api spring-boot

我正在开发API REST,但遇到以下问题:在某些情况下,我的资源ID是URL。

API既用于ID为UUID格式的软件,又用于文件系统,用于识别资源的唯一方法是使用其路径。

因此,要检索资源,我使用如下GET语句: -http://localhost/files/ {id}

当我检索存储在软件数据库中的文档时,{id}​​类似于“ 2ab89005-b938-46c8-9d22-3a12a3c40672”,但是当文档位于文件系统中时,{id}​​可以是类似于“ /documents/2018/april/myfile.pdf”。

如何处理这种情况?到目前为止,我正在通过URL“ http://localhost/files/”(没有{id})进行GET请求,并以JSON格式在正文中包含了所需的信息:

{
    "id": {id}
}

当然,我知道这不是一个好习惯,但是我不知道在这种情况下如何实现REST体系结构。 我正在使用Java + Spring Boot。

谢谢。


实施的解决方案: 最后,我创建了以下端点:http://localhost/files/?id= {id}。 之所以这样做,是因为调用我的应用程序不知道它是在请求存储在FileSystem还是数据库中的资源。 如果应用程序知道,我认为最好实现两个端点:http://localhost/files/?id= {id}(对于FileSystem)和http://localhost/files/ {id}(对于数据库)。

1 个答案:

答案 0 :(得分:2)

由于Path Manipulation Vulnerability,让用户在FS中选择文件的能力真是个坏主意。

但是,如果要这样做,可以将String设置为路径变量,并解码请求字符串:

@RestController
@RequestMapping("test")
public class MainController {

    @GetMapping("/{id}")
    public Mono<String> main(@PathVariable("id") String id){
        return Mono.just(id);
    }
}

enter image description here