Каков наилучший способ реализации службы REST, которая запрашивает базу данных, используя оператор like, используя Spring Boot и JPA? - PullRequest
1 голос
/ 13 июня 2019

Я хочу запросить базу данных для элементов, которые похожи (как sql) на данную строку, которая позже будет использоваться для функции автозаполнения в моем приложении. Я хочу использовать сервисы REST, но мне интересно, каков наилучший подход для его реализации. Я также считаю, что может быть позже, мне нужно ввести несколько параметров, таких как способ сортировки (asc, desc) или поиск по нескольким полям. Вот мое текущее решение, но я не уверен, что это лучший способ. URL-адрес службы "Мой отдых" выглядит примерно так. Я не хотел использовать RequestParam в этом случае, потому что он не показывал, что это будет оператор «как» вместо «равно»:

https://localhost/rest/device/serial/like/lac

Поиск рекомендаций относительно лучшего соглашения по именованию ресурсов REST и способов его реализации весной mvc.

@RestController
@RequestMapping({"rest/device"})
public class DeviceController {
    private final ServiceManager serviceManager;

    @GetMapping("/serial/like/{serial}")
    @ResponseBody
    public Iterable<Device> searchDevicesBySerialNumber(@PathVariable(value = "serial") String serial){
        return this.serviceManager.getDeviceRepository().findBySerialNumberLike(serial);
}

}

Это еще один способ сделать то же самое:

https://localhost/rest/device?serial-prefix=lac     

@GetMapping("")
@ResponseBody
public  Iterable<Device> searchDevice(@RequestParam(value = "serial-prefix",required = false) String serialPrefix){
    if (serialPrefix!=null) {
        return this.serviceManager.getDeviceRepository().findBySerialPrefix(serialPrefix);
    }
    return this.serviceManager.getDeviceRepository().findAll();

}

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Ваша вторая версия намного лучше.Параметры для сортировки, разбивки на страницы или фильтрации должны отображаться в качестве параметров запроса в запросе REST.

Также следует рассмотреть возможность использования Spring Data Rest.Он имеет готовые решения для стандартных конечных точек REST для ваших сущностей, которые также включают в себя разбиение на страницы и сортировку!

Необходимая функция поиска может быть реализована буквально в 2 строки в Spring Data Rest.

0 голосов
/ 13 июня 2019

Что касается именования в REST API: есть много разных подходов, и на самом деле я не знаю, как это принято.Я бы сказал, просто выберите комбинацию переменных пути и параметров запроса, которые имеют смысл для вас и вашего приложения.

Моя личная рекомендация - не злоупотреблять переменными пути.Путь должен просто ссылаться на ресурс и (необязательно) операцию, которую вы применяете к ресурсу, но не должен включать параметры этой операции.Вот для чего нужны параметры запроса.В вашем случае это будет похоже на ваш второй пример.

Если вам нужно построить более сложный поиск с сортировкой и поиском по нескольким свойствам, взгляните на эту серию учебных пособий .Есть несколько статей о разных подходах к этому с некоторыми очень хорошими идеями.Слишком много, чтобы подвести итог.

Наконец, помните о производительности и безопасности.Вы, вероятно, не хотите предоставлять пользователям доступ ко всему, и им, вероятно, не следует уметь извлекать все данные из таблицы сразу (т. Е. Может потребоваться разбиение на страницы).

...