heyallan
(Allan Moreno)
30.Октябрь.2020 00:21:14
1
Фронтенд не допускает пустого поиска и отображает полезное сообщение, объясняющее, что поисковый запрос слишком короткий.
Однако конечная точка API всё ещё допускает пустой поиск, но ответ представляет собой JSON-объект со значением NULL и статусом 200.
Разве API не должно возвращать описательное сообщение об ошибке и статус 400?
Ожидаемый результат:
// ошибка 400
{
"errors": [ "Вы передали недопустимые параметры запроса: q" ],
"error_type": "invalid_parameters"
}
Фактический результат:
// 200 ok
{
"grouped_search_result": null
}
sam
(Sam Saffron)
30.Октябрь.2020 00:37:12
2
API, безусловно, можно улучшить в этом месте, но маршрут запроса поддерживает множество аргументов:
search_args = { guardian: guardian }
search_args[:type_filter] = params[:type_filter] if params[:type_filter].present?
search_args[:search_for_id] = true if params[:search_for_id].present?
context, type = lookup_search_context
if context
search_args[:search_context] = context
search_args[:type_filter] = type if type
end
search_args[:search_type] = :header
search_args[:ip_address] = request.remote_ip
search_args[:user_id] = current_user.id if current_user.present?
search_args[:restrict_to_archetype] = params[:restrict_to_archetype] if params[:restrict_to_archetype].present?
Здесь нам нужно быть очень осторожными и решить, будем ли мы рассматривать min_search_term_length как обязательное требование или как опциональный параметр.
heyallan
(Allan Moreno)
31.Октябрь.2020 22:34:18
3
Спасибо, @sam
На данный момент:
Пустой поиск является «мертвой зоной» в API
Эндпоинт поиска принимает поисковый запрос, а также аргументы метаданных (пользователь, категории, теги и т. д.)
Аргументы метаданных не задокументированы в API
Фронтенд корректно валидирует поиск, но бэкенд API валидирует его частично (пропуская пустой поиск)
Сообщение ответа должно быть информативным в любом случае
Надеюсь, этот обзор поможет.
На мой взгляд, это баг. Меня бы удивило, если бы это было запланированное поведение.
В любом случае спасибо