Récemment, j'implémente une API en utilisant graphql-ruby
. Au début, j'ai écrit la logique dans query_type.rb
. Mais lorsque le nombre de requêtes est important, c'est difficile à voir!
Par conséquent, je voudrais expliquer comment diviser chaque requête sans écrire de logique dans query_type.rb
.
Tout d'abord, supposons que query_type.rb, qui a initialement écrit la requête, ressemble à ceci.
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
C'est une simple requête qui prend id comme argument et renvoie l'utilisateur et la publication. Je voudrais diviser chaque requête qui renvoie cet utilisateur et publier en deux fichiers (user.rb, post.rb).
Maintenant, divisons la requête. Commencez par modifier query_types.rb comme suit.
types/query_type.rb
module Types
class QueryType < Types::BaseObject
field :user, resolver: Queries::User #Définir une requête qui renvoie l'utilisateur
field :post, resolver: Queries::Post #Définir une requête qui renvoie une publication
end
Définissez uniquement le champ dans query_type.rb comme ci-dessus. Utilisez le résolveur pour spécifier où se trouve la logique réelle. Ensuite, définissez la logique réelle (résolveur). Cette fois, j'ai créé un dossier appelé requêtes directement sous le dossier graphql.
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
Maintenant que nous avons écrit le résolveur défini dans query_type.rb, nous pouvons obtenir l'utilisateur. Il n'y a pas de problème si vous préparez également post.rb pour la publication. Personnellement, je le recommande vivement car il sera beaucoup plus facile de voir simplement en divisant le fichier!