[RUBY] Bestätigung und Umgestaltung des Flusses von der Anfrage zum Controller in [httpclient]

Einführung

Zuvor habe ich die automatische Vervollständigung mit JQuerys Autocomplete, Ajax und httpclient implementiert, konnte den Inhalt jedoch nur vage erfassen. Überprüfen Sie den Inhalt beim Refactoring.

Schneiden Sie zuerst den Teil, der auf die externe API zugreift, in eine Klasse aus und legen Sie ihn im lib-Verzeichnis ab. lib/api_suggest.rb

require 'httpclient'
require 'json'

class ApiSuggest
  API_KEY = Rails.application.credentials.api[:API_KEY]
  API_URI = Rails.application.credentials.api[:API_URI]

  def self.suggest(keyword, max_num)
    uri = API_URI
    headers = {
      Authorization: "Bearer #{API_KEY}",
    }
    params = {
      keyword: keyword,
      max_num: max_num,
    }

    client = HTTPClient.new
    req = client.get(uri, body: params, header: headers)
    req
  end
end

Vor dem Refactoring

    client = HTTPClient.new
    req = client.get(uri, body: params, header: headers)
    res = JSON.parse(req.body)
    res

Und ich habe "JSON.parse (req.body)" gemacht, Nach dem Refactoring

req = client.get(uri, body: params, header: headers)

Geben Sie den req-Teil, der das Ergebnis von client.get ist, unverändert an den Controller zurück.

Auf der Controllerseite app/controllers/suggests_controller.rb

require 'api_suggest'
class SuggestsController < ApplicationController
  SUGGEST_MAX_COUNT = 5
  def search
    @suggests = ApiSuggest.suggest(params[:keyword], SUGGEST_MAX_COUNT)

    render body: @suggests.body, status: @suggests.code
  end
end

In der 7. Zeile rendern,

render body: @suggests.body, status: @suggests.code

Durch Einfügen in jeden Parameter ist es nicht mehr erforderlich, "JSON.parse" zu verwenden.

Und dieser Parameter ist app/assets/javascripts/suggest.js

$("#form").autocomplete ({
  source: function (req, res) {
    $.ajax({
      url: '/suggest',
      type: 'GET',
      cache: false,
      dataType: "json",
      data: { keyword: req.term },
  n    success: function (data) {
        res(data);
      },
      error: function (xhr, ts, err) {
 n       res(xhr, ts, err);
      }
    });
  }
});

Der Fluss ist, dass es unter dem Erfolg von Ajax zurückgegeben wird.

Überprüfen Sie den Gesamtdurchfluss

Angegeben durch Ajax-Option Eine Anfrage wurde an url: '/ suggest' und gesendet Durch Routing

get 'suggest',    to: 'suggests#search'

Die Suchmethode von app / controller / suggests_controller.rb heißt:

  def search
    @suggests = ApiSuggest.suggest(params[:keyword], SUGGEST_MAX_NUM)
    render body: @suggests.body, status: @suggests.code
  end

Als Ergebnis der Verwendung einer externen API-Anforderung auf httpclient durch "ApiSuggest.suggest"

render body: @suggests.body, status: @suggests.code Ist zurück gekommen,

Ajax in "App / Assets / Javascripts / Suggestions.js"

success: function (res) {
  resp(res);
},
error: function (xhr, ts, err) {
  resp(xhr, ts, err);
}

Es wird in jedem Fall von Erfolg und Misserfolg zurückgegeben. Der Fluss.

Erfahren Sie mehr über den Ajax-Teil

Die Render-Body-Option gibt den Body des Rückgabewerts zurück. Gibt das Ergebnis einer externen API zurück, deren Status ein Statuscode ist (200, 404, 500 usw.).

Wenn Sie es auf der Ajax-Seite erhalten, Beziehen Sie sich in Ajax auf den Statuscode, beurteilen Sie 200 Serien und 300 Serien wie gewohnt und führen Sie die Erfolgsseite aus.

Wenn ein anderer Statuscode kommt, führen Sie die Fehlerseite aus. Wird verarbeitet.

das ist alles.

Am Ende.

Vielen Dank für das Lesen bis zum Ende: bow_tone1: Ich lerne Rails aus einem unerfahrenen Zustand, weil ich den Job wechsle. Ich möchte ständig das richtige Wissen erwerben und ein kompetenter Ingenieur werden. Während ich weiter poste, denke ich, dass der Input dafür unvermeidlich zunehmen wird, was zu Wachstum führen wird. Im Moment kann ich keine Ausreden machen, nur weil ich ein Anfänger bin, aber ich denke, es gibt viele Dinge, die mit dem Inhalt des Beitrags falsch sind und die ich hinzufügen sollte, also würde ich es begrüßen, wenn Sie darauf hinweisen könnten. Vielen Dank für das Lesen dieses Artikels.

Recommended Posts

Bestätigung und Umgestaltung des Flusses von der Anfrage zum Controller in [httpclient]
Verstehen Sie den groben Fluss von der Anforderung zur Antwort in SpringWebMVC
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Vom jungen Java (3 Jahre) bis zu Node.js (4 Jahre). Und der Eindruck, nach Java zurückzukehren
[Java] Ablauf von der Einführung von STS bis zur Bestätigung der dynamischen Seite auf dem lokalen Host (2/3)
Die Geschichte, zu vergessen, eine Datei in Java zu schließen und zu scheitern
[Java] Ablauf von der Einführung von STS bis zur Bestätigung der dynamischen Seite auf dem lokalen Host (1/3)
So ändern Sie die maximale und maximale Anzahl von POST-Daten in Spark
Ich habe versucht, die Grammatik von R und Java zu übersetzen [Von Zeit zu Zeit aktualisiert]
[Rails] Artikel für Anfänger, um den Fluss von form_with zu organisieren und zu verstehen
[Swift] So ändern Sie die Reihenfolge der Balkenelemente in Tab Bar Controller [Anfänger]
Der Weg vom Git-Klon zum Aufbau der Umgebung und zur Teilnahme am Projekt (alles in vollem Umfang)
ArrayList und die Rolle der Schnittstelle aus List
Jsons Anfrage im Unit Test des Controllers mit MockMvc
Von der Einführung des Geräts bis zur Erstellung der Benutzertabelle
Wie schreibe ich Scala aus der Perspektive von Java
[Für Anfänger] DI ~ Die Grundlagen von DI und DI im Frühjahr ~
Konvertieren Sie das Array von error.full_messages in Zeichen und geben Sie es aus
Verstehen Sie die Eigenschaften von Scala in 5 Minuten (Einführung in Scala)
Java-Sprache aus der Sicht von Kotlin und C #
Binden Sie die Anfrage an eine Klasse und erhalten Sie sie
Die Objekte in der Liste waren Referenzen, richtig? Bestätigung von
In der Abbildung verstandene Java-Klassen und -Instanzen
So ermitteln Sie die Prefetch-Anforderung (Prefetch) im Browser
In Java möchte ich mehrere angegebene Zeichen nur von Anfang bis Ende abschneiden.
Ich möchte den Inhalt von Assets in der mit capistrano erstellten Umgebung von Grund auf neu erstellen
Die Geschichte der Erhöhung von Spring Boot von 1.5 auf 2.1 Serie Teil2
[Rails] So speichern Sie die Anforderungs-URL eines Benutzers, der nicht angemeldet ist, vorübergehend und kehren nach der Anmeldung zu dieser URL zurück
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Kommen Sie zu den Abkürzungen aus den fünf Beispielen für kursive Java-Listen
Befehl zum Überprüfen der Anzahl und des Status von Java-Threads
Die Geschichte des Werfens von BLOB-Daten von EXCEL in DBUnit
So erhalten Sie die längsten Informationen von Twitter ab dem 12.12.2016
Korrigieren Sie den Zeichencode in Java und lesen Sie von der URL
Hat zu Gradle beigetragen und wurde im Release Note genannt
So leiten Sie den letzten Tag des Monats in Java ab
[Rails] Bei der Beschreibung der Validierung ist Vorsicht geboten
So überprüfen Sie die Erweiterung und Größe der hochgeladenen Dateien
Erstellen Sie weitere Registerkarten und Fragmente im Fragment von BottomNavigationView
802.1X-Authentifizierung für das Netzwerk der Bonding-Einstellung in CentOS7
Ich möchte die Methode des Controllers kennen, bei der die Ausnahme im ExceptionHandler von Spring Boot ausgelöst wurde
Speicherort der Methodendefinition Zusammenfassung der zu überprüfenden Informationen Wenn im Projekt und in Rails / Gem definiert
[Java] Verschiedene Zusammenfassungen an die Leiter von Klassen und Mitgliedern
Beendigung von Docker und Kubernetes: Nachfrist von SIGTERM bis SIGKILL
[Rails / Routing] So verweisen Sie auf den Controller in Ihrem eigenen Verzeichnis
[Rails] So erhalten Sie die URL der Übergangsquelle und leiten sie um
Es reagiert nicht auf die Beschreibung in .js der Packs-Datei
[Java] Ordnen Sie die Daten des vergangenen Montags und Sonntags der Reihe nach an
[Swift5] So erhalten Sie ein Array und eine Reihe von Unterschieden zwischen Arrays
So legen Sie die IP-Adresse und den Hostnamen von CentOS8 fest
[Webpacker] Zusammenfassung der Installation von Bootstrap und jQuery in Rails 6.0
Betrachten wir die Bedeutung von "Stream" und "Collect" in der Stream-API von Java.
Korrigieren Sie den Namen der Kriegsdatei auf den in Maven festgelegten
Was ich bei der Migration von der Spring Boot 1.4-Serie zur 2.0-Serie getan habe
[jOOQ] Wie in der WHERE / AND / OR-Klausel WANN FALLEN
So löschen Sie große Datenmengen in Rails und Bedenken
Methode, um die Anzahl der Jahre zu addieren und das Monatsende zu erhalten