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!