API REST, когда идентификаторы являются URL - PullRequest
0 голосов
/ 17 февраля 2019

Я разрабатываю API REST, но столкнулся со следующей проблемой: в некоторых случаях идентификатором моих ресурсов являются URL-адреса.

API используется для обоих программ, в которых идентификаторы имеют формат UUIDи FileSystem, где единственным способом идентификации ресурсов является использование их пути.

Итак, для извлечения ресурса я использую инструкцию GET, например: - http://localhost/files/{id}

Когда яизвлекаю документ, хранящийся в базе данных программного обеспечения, {id} что-то вроде "2ab89005-b938-46c8-9d22-3a12a3c40672", но когда документ находится в файловой системе, {id} может быть что-то вроде "/ documents/2018/april/myfile.pdf".

Как мне справиться с этой ситуацией?До сих пор я выполняю запрос GET по URL-адресу "http://localhost/files/" (без {id})" и включаю в тело необходимую информацию в формате JSON:

{
    "id": {id}
}

Конечно, язнаю, что это не очень хорошая практика, но я не знаю, как я могу реализовать архитектуру REST в этой ситуации. Я использую Java + Spring Boot.

Спасибо.


РЕШЕНИЕ РЕАЛИЗОВАНО: В конце я создал следующую конечную точку: http://localhost/files/?id={id}. Резонанс этого заключается в том, что приложение, которое вызывает меня, не знает, запрашивает ли он ресурсхранится в файловой системе или в моей базе данных. Если приложение знает это, я думаю, что лучше реализовать две конечные точки: http://localhost/files/?id={id} (для файловой системы) и http://localhost/files/{id} (для базы данных).

1 Ответ

0 голосов
/ 17 февраля 2019

Это действительно плохая идея, чтобы использовать возможность для выбранного пользователем файла в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...