Страница 1 из 1

Как бы вы делали поиск в rest?

Добавлено: 2022.01.28, 15:47
maleks
Приветствую.

Оттолкнемся от документации:
Вот так просто мы и создали RESTful API для доступа к данным пользователя. API нашего сервиса сейчас включает в себя:
GET /users: получение постранично списка всех пользователей;
Фильтрация коллекций как http://localhost/users?filter[id]=10 или http://localhost/users?filter[email][like]=gmail.com возможна при использовании фильтров данных
Но если мне поставили задачу сделать через rest именно Поиск, заготовка выше наверное не подходит, она все записи показывает, если ничего не фильтруется.
У меня же логика другая:
- условие должно присутствовать
- выдавать только то, что соответствует условию

Погуглил на тему и смотрю подходы разнятся.
Кто то советует сам поиск сделать как ресурс, и с POST запросом "создавать" новый поиск.
Насколько это правильно, ведь в теории POST метод
Idempotent - no
Safe -no

, а в этом поиске будет по сути
Idempotent - yes
Safe -yes

Может лучше какой нибудь
GET /users/search?

Re: Как бы вы делали поиск в rest?

Добавлено: 2022.01.28, 16:48
ElisDN
maleks писал(а): 2022.01.28, 15:47 Может лучше какой нибудь
GET /users/search?
Да, лучше для каждой отдельной задачи делать отдельный адрес.

Re: Как бы вы делали поиск в rest?

Добавлено: 2022.02.01, 14:58
maleks
А если мне задачу поставили так - "находить пользователя по емейлу".
А потом, как окажется, находить по чему то еще и еще.
В один все совать получается не логично, т.к. в каждом должно потребовать обязательного ввода поисковых данных.

Тоже , может , это в адресе отразить?

Код: Выделить всё

GET /users/search-by-phone
или
GET /users/search/by-phone
, какой лучше?

А по ответам как делать?
Когда email корректен и нашли пользователя, вернем его

Код: Выделить всё

{
  id: 4545
  fio:
}
, когда не указан email или он неверный, то вернем

Код: Выделить всё

{
  status: 'error',
  errorMessage: '....'
}
, а когда ошибки нет, но пользователь не найден, то просто

Код: Выделить всё

{
  status: 'user not found'
}

Re: Как бы вы делали поиск в rest?

Добавлено: 2022.02.01, 21:09
samdark
Самый лучший способо удовлетворить сразу любые запросы клиента — дать ему GraphQL вместо REST. Но это дороже и обычно не нужно.

GET /users/search?email=x&banned=0