我正在开发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}(对于数据库)。
答案 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);
}
}