So erstellen Sie eine Abfrage mithilfe von Variablen in GraphQL [Verwenden von Ruby on Rails]

Einführung

In der im vorherigen Artikel vorgestellten GraphQL-Abfrageschreibmethode Sie fragen sich möglicherweise: "Wie verwende ich eine Variable in einer Abfrage?"

Im Fall von I. Ich wollte die von der REST-API erhaltenen Daten an die GraphQL-API übergeben Wie kann ich Variablen in eine Abfrage aufnehmen? Ich hatte eine Frage.

Wenn Sie also "Variablen an GraphQL-Abfrage übergeben" googeln __ Leicht verständliche Artikel treffen schließlich nicht! __ __

Auch diesmal ist es für Anfänger leicht zu verstehen (obwohl ich auch Anfänger bin ... Ich werde erklären, wie Variablen in GraphQL-Abfragen verwendet werden.

Statische Abfrage

Dieses Mal werde ich die folgende Abfrage als Beispiel erläutern.

query {
    repositoryOwner(login:"Github Benutzername") {
        repositories(last:5){
            nodes {
                name
            }
        }
    }
}

Wenn Sie den Benutzernamen von github angeben, Es ist eine Abfrage, um 5 neue aus dem Repository des angegebenen Benutzers zu erhalten.

In diesem Zustand handelt es sich jedoch nicht um eine dynamische Abfrage. Wenn Sie den Benutzernamen direkt in die Abfrage schreiben, können Sie nur das Repository für diesen Benutzer abrufen.

Wenn Sie beispielsweise den Benutzernamen von github eingeben, Beim Erstellen einer App, in der die letzten 5 Repositorys dieses Benutzers angezeigt werden Diese Abfrage kann nicht verwendet werden. Wie kann ich diese Abfrage zu einer dynamischen Abfrage machen?

Um diese Abfrage zu einer dynamischen Abfrage zu machen Sie müssen verstehen, wie die Abfrage variables geschrieben wird.

Was sind Variablen?

Bei der Übersetzung ins Japanische sind Variablen Variablen. ~~ (Ich kann nicht sagen, dass ich es bemerkt habe, als ich nach diesem Artikel gesucht habe oder sogar wenn mir der Mund gebrochen hat) ~~

Hier werde ich die "Schreibmethode" dieser Variablen erklären. Wenn Sie der vorherigen Abfrage Variablen hinzufügen und diese neu schreiben, sieht dies wie folgt aus.

query ($user: String!) {
    repositoryOwner(login:$user) {
        repositories(last:5){
            nodes {
                name
            }
        }
    }
}

--variables--
{
  "user": "username"
}

Wenn Sie vor und nach dem Umschreiben vergleichen, unterscheiden sich die erste und zweite Zeile sowie die drei Stellen unter den Variablen.

Beginnen wir zunächst mit der ersten Zeile

query ($user: String!) {

Die Beschreibung $ user: String! Wird nach der Abfrage hinzugefügt. Es schreibt Argumente, dh GraphQL-Argumente und Argumenttypen. Wenn Sie vor dem Argument user "$" schreiben, Außerhalb der Abfrage geschriebene Variablen können innerhalb der Abfrage als Argumente verwendet werden.

Dann die zweite Zeile

repositoryOwner(login:$user) {

Vor dem Umschreiben habe ich den Github-Benutzernamen direkt in den Anmeldewert geschrieben. Ich denke, es hat sich zu $ user geändert. Dadurch werden die übergebenen Daten als Argument verwendet Es handelt sich um eine dynamische Abfrage, bei der der Wert für die Anmeldung angegeben wird.

Schließlich die Beschreibung unten Variablen

{
  "user": "username"
}

Mit GraphiQL können im Abfrageeditor Variablen geschrieben werden. Wenn Sie es dort schreiben, wird es mit der Beschreibung in der ersten und zweiten Zeile kombiniert, die ich zuvor erklärt habe. Es wird in der Abfrage als variabler Benutzer verfügbar sein.

… Dies ist in Ordnung für die Verwendung in GraphiQL. Bei der Verwendung in Rails-Apps ist dies etwas anders.

So schreiben Sie Variablen in Rails

Deshalb ist es in Rails geschrieben.

Dieses Mal werde ich in Form des Hinzufügens zur neu erstellten Anwendung mit Gerüst erklären. Das ausgefüllte Formular lautet "Geben Sie den Namen eines Github-Benutzers ein und es werden die 5 neuesten Repositorys für diesen Benutzer angezeigt." Erstellen Sie so etwas.

Fügen Sie nach der Installation dem Controller Folgendes hinzu.

controllers/users_controller.rb


class UsersController < ApplicationController
...Kürzung...
  Query = GqlTest(Dein eigener App-Name)::Client.parse <<-GRAPHQL
  query ($user: String!) {
    repositoryOwner(login: $user) {
        repositories(last:5){
            nodes {
                name
            }
        }
    }
}
    GRAPHQL

  def show
    username = @user.name
    @works = result(user: username).data.repository_owner.repositories.nodes
  end

···Kürzung···
  private
  def result(variables = {})
    response = GqlTest(* Ihr eigener App-Name)::Client.query(Query, variables: variables)
  end
end

Wenn Sie den hinzugefügten Code erklären Die Abfrage ist Query = GqlTest (Ihr App-Name) :: Client.parse << - GRAPHQL Es ist in Ordnung, wenn Sie die Abfrage schreiben, die Sie zuvor nach dem Code in erstellt haben.

controllers/users_controller.rb


Query = GqlTest(Dein eigener App-Name)::Client.parse <<-GRAPHQL
  query ($user: String!) {
    repositoryOwner(login: $user) {
        repositories(last:5){
            nodes {
                name
            }
        }
    }
}

Was ich in der Show-Aktion hinzugefügt habe Mit dem Code, mit dem der in der neuen Aktion registrierte Benutzername als @ user.name registriert und im Benutzernamen gespeichert wird Code, der die Ergebnisdaten mit diesem Benutzernamen als Argument abruft. Benutzer: Benutzername ist Es wird im Variablenbereich unter dem Abfrageeditor von GraphiQL beschrieben.

controllers/users_controller.rb


def show
    username = @user.name
    @works = result(user: username).data.repository_owner.repositories.nodes
end

In der Ergebnismethode unter privat habe ich Folgendes hinzugefügt. Der Unterschied zum vorherigen Artikel liegt nach der Abfrage variables: variables Variablen können durch Beschreibung verwendet werden. Eine ausführliche Erläuterung dieses Teils finden Sie in der offiziellen Referenz von graphql-client. bitte bestätigen. (Offizielle Referenz: https://github.com/github/graphql-client)

controllers/users_controller.rb


private
  def result(variables = {})
    response = GqlTest(* Ihr eigener App-Name)::Client.query(Query, variables: variables)
  end
end

Zum Abschluss wird die Ansicht show.html.erb geändert.

Ruby:views/show.html.erb


<% @works.each do |work|%>
   <p><%= work.name %></p>
<% end %>

Bitte fügen Sie den obigen Code an einer beliebigen Stelle in show.html.erb hinzu, die von scaffold erstellt wurde. Ich denke, es wird angezeigt.

スクリーンショット 2020-08-28 23.24.05.png

Wenn es wie oben angezeigt werden kann, ist es abgeschlossen!

Das ist alles, danke für deine harte Arbeit!

(Da ich diesmal mitten in der Nacht gekritzelt habe, kann es verschiedene Tippfehler geben ...)

Recommended Posts

So erstellen Sie eine Abfrage mithilfe von Variablen in GraphQL [Verwenden von Ruby on Rails]
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
So erstellen Sie einfach ein Pulldown mit Rails
[Ruby on Rails] Wie schreibe ich eine Enumeration auf Japanisch?
[Ruby On Rails] So setzen Sie die Datenbank in Heroku zurück
(Ruby on Rails6) So erstellen Sie ein Modell und eine Tabelle
Verwendung von Ruby on Rails
[Ruby] So teilen Sie jede GraphQL-Abfrage in Dateien auf
Wenden Sie CSS auf eine bestimmte Ansicht in Ruby on Rails an
So fügen Sie ein Video in Rails ein
[Ruby on Rails] Verwendung von redirect_to
[Rails] So erstellen Sie eine Teilvorlage
Anfänger haben mit Ruby on Rails ein Portfolio erstellt
[Rails 6] So erstellen Sie mit cocoon einen dynamischen Formular-Eingabebildschirm
(Ruby on Rails6) Erstellen Sie eine Funktion zum Bearbeiten des veröffentlichten Inhalts
Wechseln Sie in einem neuen Ruby on Rails-Projekt von SQLite3 zu PostgreSQL
So implementieren Sie eine Diashow mit Slick in Rails (einzeln und mehrfach nacheinander)
So erstellen Sie ein Thema in Liferay 7 / DXP
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)
So implementieren Sie eine ähnliche Funktion in Rails
[Rails] So erstellen Sie eine Twitter-Freigabeschaltfläche
(Ruby on Rails6) Erstellen von Daten in einer Tabelle
So debuggen Sie die Verarbeitung im Ruby on Rails-Modell nur mit der Konsole
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 5.x)
So implementieren Sie Paginierung in GraphQL (für Ruby)
[Ruby on Rails] So melden Sie sich nur mit Ihrem Namen und Passwort mit dem Gem-Gerät an
[Ruby on Rails] Beim ersten Anmelden ・ So teilen Sie den Bildschirm mit jQuery in zwei Hälften
So beheben Sie Fehler, die beim Integrationstest "Ruby on Rails" auftreten
Ein Memo zum Erstellen eines einfachen Formulars, das nur HTML und CSS in Rails 6 verwendet
[Ruby on Rails] Versuchen Sie, einen Service zu erstellen, der einheimische Katzen glücklich macht
So implementieren Sie eine nette Funktion in Ajax mit Rails
[Ruby on Rails] So ändern Sie den Spaltennamen
So erstellen Sie ein Spring Boot-Projekt in IntelliJ
So erstellen Sie einen Daten-URI (base64) in Java
So starten Sie einen anderen Befehl in einem Ruby-Programm
[So fügen Sie ein Video mit Rails in haml ein]
So schreiben Sie eine Datumsvergleichssuche in Rails
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Abfragen von Arrays in jsonb mit Rails + postgres
[Rails 6] So legen Sie ein Hintergrundbild in Rails [CSS] fest
[Rails] So laden Sie JavaScript in einer bestimmten Ansicht
Versuchen Sie es mit dem Ruby on Rails-Abfrageattribut
Erstellen Sie eine Lotterie mit Ruby
So erstellen Sie eine Methode
Docker-Befehl zum Erstellen eines Rails-Projekts in einem einzigen Schlag in einer Umgebung ohne Ruby
So implementieren Sie ein kreisförmiges Profilbild mit CarrierWave und R Magick in Rails
Festlegen von Umgebungsvariablen bei Verwendung von Payjp mit Rails