heyallan
(Allan Moreno)
30. Oktober 2020 um 00:21
1
Das Front-End erlaubt keine leere Suche und zeigt eine hilfreiche Meldung an, die erklärt, dass der Suchbegriff zu kurz ist.
Allerdings erlaubt der API-Endpunkt weiterhin eine leere Suche, wobei die Antwort ein JSON-Objekt mit einem NULL-Wert und dem Status 200 ist.
Sollte die API nicht mit einer aussagekräftigen Fehlermeldung und einem Status 400 antworten?
Erwartet:
// 400 error
{
"errors": [ "You supplied invalid parameters to the request: q" ],
"error_type": "invalid_parameters"
}
Tatsächlich:
// 200 ok
{
"grouped_search_result": null
}
sam
(Sam Saffron)
30. Oktober 2020 um 00:37
2
Die API könnte hier sicherlich verbessert werden, aber die Abfrage-Routen unterstützt eine Vielzahl von Argumenten:
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?
Wir müssen hier sehr vorsichtig sein und prüfen, ob wir min_search_term_length als zwingende Anforderung oder als optionale Einstellung behandeln.
heyallan
(Allan Moreno)
31. Oktober 2020 um 22:34
3
Danke @sam
Derzeit sieht es so aus:
Eine leere Suche ist ein toter Punkt in der API.
Der Such-Endpunkt akzeptiert einen Suchbegriff, aber auch Metadaten-Argumente (Benutzer, Kategorien, Tags usw.).
Metadaten-Argumente sind in der API nicht dokumentiert.
Das Frontend validiert die Suche korrekt, aber die Backend-API validiert sie nur teilweise (eine leere Suche wird durchgelassen).
Die Antwortmeldung sollte in jedem Fall aussagekräftig sein.
Ich hoffe, diese Übersicht hilft.
Meiner Meinung nach ist dies ein Fehler. Ich wäre überrascht, wenn dies das beabsichtigte Verhalten wäre.
Trotzdem danke