#java #spring-boot #rest
#java #весенняя загрузка #rest
Вопрос:
Давайте предположим, что у меня есть конечная точка, вызываемая
/people
который, как следует из названия, возвращает набор пользователей. Вместо возврата «всех» пользователей запрашивающая сторона может добавить параметр запроса «q», который может иметь два возможных синтаксиса (скажем, S1 и S2).
- S1 запустит определенную логику, которая полностью отличается от S2
- S1 принимает набор параметров запроса {P1S1, P2S1, P3S1}
- S2 принимает набор параметров запроса {P1S2, P2S2, P3S2}, который не имеет ничего общего с набором S1
У меня могла бы быть такая подпись:
public Page<Person> people(@RequestParam String q, String p1s1, String p2s1, ..., String p2s2, String p3s2) {
if (q contains S1 syntax)
...
else (q contains S2 syntax)
...
}
в зависимости от значения q я мог бы проверить последующие параметры и выполнить соответствующую логику поиска. Я сомневаюсь, что интерфейс в этом случае не был бы формально описан. Другими словами, глядя на интерфейс, неясно, какой параметр требуется, когда.
Есть ли правильный способ смоделировать / реализовать этот сценарий?
Комментарии:
1. Если два набора входных параметров также связаны с разным поведением запросов и разными результатами, тогда я мог бы предложить просто иметь две конечные точки.
2. как могут называться эти конечные точки? Оба должны быть «/ people», потому что они возвращают одно и то же точное представление одного и того же объекта. Я бы просто перенес неоднозначность интерфейса с параметров на имена конечных точек
3. Я не могу осмысленно ответить на ваш комментарий, не зная реальной конечной точки и параметров.
4. Ок, q = строка запроса, (смещение результатов размер страницы в случае S1), (выделенный, нечеткий, многоязычный в случае S2)
5. Первая проблема проектирования с точки зрения REST: вы уже считаете, что это
/people
вернет данные, относящиеся к конкретным пользователям, и, следовательно, будет иметь типизированный ресурс . Вторая проблема: вы рассматриваете конечную точку как вызов метода RPC вместо ресурса