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.
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.
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