[RAILS] [Ruby] Comment diviser chaque requête GraphQL en fichiers

introduction

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.

Chose que tu veux faire

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

Diviser la requête

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!

Recommended Posts

[Ruby] Comment diviser chaque requête GraphQL en fichiers
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
Comment diviser un fichier de message Spring Boot
[Ruby] Comment convertir un fichier CSV en Yaml (Yml)
[Ruby] Comment générer une chaîne de caractères d'alphabet aléatoire
Comment implémenter la pagination dans GraphQL (pour ruby)
Comment passer d'Eclipse Java à un fichier SQL
Comment lancer une autre commande dans un programme Ruby
Comment télécharger des fichiers (Servlet, HTML, Apache, Tomcat)
Comment convertir un fichier en tableau d'octets en Java
[Ruby] Comment extraire une valeur spécifique d'un tableau sous plusieurs conditions [sélectionner / chacun]
Comment demander un fichier CSV au format JSON avec jMeter
Comment utiliser le retour Ruby
Comment charger l'interface utilisateur créée avec un fichier Xib dans View
Comment changer une chaîne dans un tableau en un nombre dans Ruby
Comment laisser un commentaire
[Facile] Comment formater automatiquement les fichiers Ruby erb avec vsCode
[Ruby] Comment commenter
Apprendre Ruby avec AtCoder 13 Comment créer un tableau à deux dimensions
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
[Ruby] Comment récupérer le contenu du double hachage
Ruby: Comment utiliser les cookies
Je veux créer un fichier Parquet même en Ruby
Comment insérer une vidéo
Comment créer une méthode
Comment créer un fichier jar et un fichier war à l'aide de la commande jar
Comment créer un fichier jar sans dépendances dans Maven
Comment charger un fichier de téléchargement Spring et afficher son contenu
Comment lire un fichier et le traiter comme une entrée standard
Comment ouvrir un fichier de script à partir d'Ubuntu avec du code VS
[chown] Comment changer le propriétaire d'un fichier ou d'un répertoire
Comment construire un peu délicat avec la génération de requêtes SQL dynamiques
Comment itérer indéfiniment en Ruby
Comment créer un conteneur Java
Comment installer Ruby via rbenv
Comment utiliser Ruby on Rails
Comment signer Minecraft MOD
Comment créer un pilote JDBC
Comment convertir un fichier erb en haml
Comment installer Bootstrap dans Ruby
[Swift] Comment envoyer une notification
Comment créer un écran de démarrage
Comment créer un plug-in Jenkins
Comment faire un projet Maven
[Débutant] Comment supprimer AUCUN FICHIER
Comment utiliser la méthode Ruby inject
Comment créer un tableau Java
Comment exécuter l'IRB de Ruby (Ruby interactif)
[IntelliJ IDEA] Comment ajouter automatiquement la finale lors de l'enregistrement d'un fichier Java
Comment exécuter un fichier GIF à partir de la ligne de commande Linux (Ubuntu)
Comment enregistrer JFR (Java Flight Recorder) et générer un fichier de vidage
Comment créer un environnement de développement Ruby on Rails avec Docker (Rails 6.x)