[RAILS] [Ruby] So teilen Sie jede GraphQL-Abfrage in Dateien auf

Einführung

Vor kurzem implementiere ich API mit graphql-ruby. Am Anfang habe ich die Logik in query_type.rb geschrieben. Aber wenn die Anzahl der Abfragen groß ist, ist es schwer zu sehen! Daher möchte ich erklären, wie jede Abfrage geteilt wird, ohne Logik in query_type.rb zu schreiben.

Was du machen willst

Angenommen, query_type.rb, der die Abfrage ursprünglich geschrieben hat, sieht folgendermaßen aus.

types/query_type.rb


module Types
  class Query < Types::BaseObject
    field :user, ObjectTypes::UserType, null: false do
    argument :id, ID, required: true
    end

    def user(id:)
      User.find(id)
    end


    field :post, ObjectTypes::PostType, null: false do
    argument :id, ID, required: true
    end

    def post(id:)
      Post.find(id)
    end
  end

Es ist eine einfache Abfrage, die id als Argument verwendet und Benutzer und Beitrag zurückgibt. Ich möchte jede Abfrage, die diesen Benutzer zurückgibt, aufteilen und in zwei Dateien (user.rb, post.rb) posten.

Teilen Sie die Abfrage

Lassen Sie uns nun die Abfrage aufteilen. Ändern Sie zunächst query_types.rb wie folgt.

types/query_type.rb


module Types
  class QueryType < Types::BaseObject
    field :user, resolver: Queries::User #Definieren Sie eine Abfrage, die den Benutzer zurückgibt
    field :post, resolver: Queries::Post #Definieren Sie eine Abfrage, die einen Beitrag zurückgibt
  end

Definieren Sie nur das Feld in query_type.rb wie oben. Verwenden Sie den Resolever, um anzugeben, wo sich die eigentliche Logik befindet. Definieren Sie als Nächstes die eigentliche Logik (Resolver). Dieses Mal habe ich einen Ordner namens "Abfragen" direkt unter dem Ordner "graphql" erstellt.

queries/user.rb


module Queries
  class User < BaseQuery
    type ObjectTypes::UserType, null: false
    argument :id, ID, required: true

    def resolve(id:)
      User.find(id)
    end
  end

Nachdem wir den in query_type.rb definierten Resolver geschrieben haben, können wir den Benutzer abrufen. Es ist kein Problem, wenn Sie post.rb auch für die Post vorbereiten. Ich persönlich kann es nur empfehlen, da es viel einfacher zu sehen ist, wenn Sie die Datei teilen!

Recommended Posts

[Ruby] So teilen Sie jede GraphQL-Abfrage in Dateien auf
So erstellen Sie eine Abfrage mithilfe von Variablen in GraphQL [Verwenden von Ruby on Rails]
So teilen Sie eine Spring Boot-Nachrichtendatei
[Ruby] So konvertieren Sie eine CSV-Datei in Yaml (Yml)
[Ruby] So generieren Sie eine zufällige Alphabet-Zeichenfolge
So implementieren Sie Paginierung in GraphQL (für Ruby)
So springen Sie von Eclipse Java zu einer SQL-Datei
So starten Sie einen anderen Befehl in einem Ruby-Programm
Herunterladen von Dateien (Servlet, HTML, Apache, Tomcat)
So konvertieren Sie eine Datei in ein Byte-Array in Java
[Ruby] So extrahieren Sie einen bestimmten Wert aus einem Array unter mehreren Bedingungen [select / each]
So fordern Sie mit jMeter eine CSV-Datei als JSON an
Verwendung von Ruby return
Laden der mit der Xib-Datei erstellten Benutzeroberfläche in View
So ändern Sie eine Zeichenfolge in einem Array in eine Zahl in Ruby
Wie hinterlasse ich einen Kommentar?
[Einfach] So formatieren Sie Ruby erb-Dateien automatisch mit vsCode
[Ruby] Wie man auskommentiert
Ruby mit AtCoder lernen 13 So erstellen Sie ein zweidimensionales Array
So zeigen Sie Diagramme in Ruby on Rails an (LazyHighChart)
[Ruby] So rufen Sie den Inhalt des Doppel-Hash ab
Ruby: Wie man Cookies benutzt
Ich möchte eine Parkettdatei auch in Ruby erstellen
So fügen Sie ein Video ein
So erstellen Sie eine Methode
So erstellen Sie eine JAR-Datei und eine War-Datei mit dem Befehl jar
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
So laden Sie eine Spring-Upload-Datei und zeigen ihren Inhalt an
So lesen Sie eine Datei und behandeln sie als Standardeingabe
So öffnen Sie eine Skriptdatei von Ubuntu mit VS-Code
[chown] So ändern Sie den Eigentümer einer Datei oder eines Verzeichnisses
Wie man mit der Generierung dynamischer SQL-Abfragen ein wenig knifflig baut
Wie man in Ruby auf unbestimmte Zeit iteriert
So erstellen Sie einen Java-Container
So installieren Sie Ruby über rbenv
Verwendung von Ruby on Rails
Wie unterschreibe ich Minecraft MOD?
So erstellen Sie einen JDBC-Treiber
So konvertieren Sie erb-Datei in haml
So installieren Sie Bootstrap in Ruby
[Swift] So senden Sie eine Benachrichtigung
So erstellen Sie einen Begrüßungsbildschirm
So erstellen Sie ein Jenkins-Plug-In
Wie erstelle ich ein Maven-Projekt?
[Anfänger] So löschen Sie NO FILE
Verwendung der Ruby-Inject-Methode
So erstellen Sie ein Java-Array
Wie man Ruby's irb ausführt (interaktiver Ruby)
[IntelliJ IDEA] So fügen Sie beim Speichern einer Java-Datei automatisch final hinzu
So führen Sie eine GIF-Datei über die Linux-Befehlszeile aus (Ubuntu)
So zeichnen Sie JFR (Java Flight Recorder) auf und geben eine Dump-Datei aus
So erstellen Sie eine Ruby on Rails-Entwicklungsumgebung mit Docker (Rails 6.x)