1

我正在开发 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}。这样做的原因是因为调用我的应用程序不知道它是在请求存储在文件系统中还是在我的数据库中的资源。如果应用程序知道,我认为最好实现两个端点:http://localhost/files/?id= {id} (用于文件系统)和http://localhost/files/ {id} (用于数据库) .

4

1 回答 1

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);
    }
}

在此处输入图像描述

于 2019-02-17T16:04:17.160 回答