[JAVA] Implémenter GraphQL avec Spring Boot

Qu'est-ce que GraphQL

Veuillez vous reporter à Problèmes REST et GraphQL.

environnement

Ajouter des bibliothèques dépendantes

Ajoutez ce qui suit:

pom.xml


    <!-- https://mvnrepository.com/artifact/com.graphql-java/graphql-java -->
    <dependency>
      <groupId>com.graphql-java</groupId>
      <artifactId>graphql-java</artifactId>
      <version>11.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.graphql-java/graphql-spring-boot-starter -->
    <dependency>
      <groupId>com.graphql-java</groupId>
      <artifactId>graphql-spring-boot-starter</artifactId>
      <version>5.0.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.graphql-java/graphql-java-tools -->
    <dependency>
      <groupId>com.graphql-java</groupId>
      <artifactId>graphql-java-tools</artifactId>
      <version>5.2.4</version>
    </dependency>

Définition de schéma

Pour le schéma et les types, veuillez vous référer à GraphQL Schema and Type Definition.

schema.graphqls


type Book {
    id: ID
    name: String
    pageCount: Int
    author: Author
}

type Author {
    id: ID
    firstName: String
    lastName: String
}

type Query {
    bookById(id: ID): Book
}

Créer une classe Type

Créez une classe Java (une classe qui contient des données obtenues à partir d'une source de données) qui correspond au type défini dans la définition de schéma.

Book.java



public class Book {

    private String id;
    private String name;
    private int pageCount;
    private Author author;

    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPageCount(int pageCount) {
        this.pageCount = pageCount;
    }

    public void setAuthor(Author author) {
        this.author = author;
    }
}

Author.java


public class Author {

    private String id;
    private String firstName;
    private String lastName;

    public void setId(String id) {
        this.id = id;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

Créer un résolveur

Comme mentionné dans GraphQL Schema and Type Definition, la définition de schéma définit les requêtes et différents types qui peuvent être exploités par le client. Cependant, le schéma n'est qu'une définition et ne manipule pas réellement les données. Le résolveur est celui qui manipule réellement les données.

BookResolver.java


@Component
public class BookResolver implements GraphQLQueryResolver {
	
	public Book bookById(String bookId) {
		//Dans la plupart des cas, les données sont en fait lues et renvoyées à partir d'un magasin de données, mais ici une valeur fictive est renvoyée.
		Book book = new Book();
		book.setId(bookId);
		book.setName("bookName");
		book.setPageCount(900);
		Author author = new Author();
		author.setId("0001");
		author.setFirstName("fName");
		author.setLastName("lName");
		book.setAuthor(author);
		return book;
	}
}


Courir

Pour exécuter GraphQL, utilisez des outils tels que GraphiQL et GraphQL Playground, comme présenté dans Outils utiles pour GraphQL. Cette fois, nous utiliserons la version bureau de GraphQL Playground.

query {
  bookById(id:1) {
    id
    name
  }
}

Si vous obtenez la réponse suivante, vous réussissez.

{
  "data": {
    "bookById": {
      "id": "1",
      "name": "bookName"
    }
  }
}

Augmentons les éléments d'acquisition. Maintenant, écrivez la requête suivante et appuyez sur le bouton de lecture.

query {
  bookById(id:1) {
    id
    name
    author {
      id
      firstName
      lastName
    }
  }
}

Si vous obtenez la réponse suivante, vous réussissez. Il est possible de modifier dynamiquement les éléments que vous souhaitez acquérir sans changer la source.

{
  "data": {
    "bookById": {
      "id": "1",
      "name": "bookName",
      "author": {
        "id": "0001",
        "firstName": "fName",
        "lastName": "lName"
      }
    }
  }
}

c'est tout.

référence

Recommended Posts

Implémenter GraphQL avec Spring Boot
J'ai essayé GraphQL avec Spring Boot
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
Télécharger avec Spring Boot
Essayez d'implémenter la fonction de connexion avec Spring Boot
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Implémentez une API Rest simple avec Spring Security avec Spring Boot 2.0
Utiliser l'authentification de base avec Spring Boot
gRPC sur Spring Boot avec grpc-spring-boot-starter
Créez une application avec Spring Boot 2
Déploiement à chaud avec le développement Spring Boot
Liaison de base de données avec doma2 (Spring boot)
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Obtenez des résultats de validation avec Spring Boot
Implémenter le téléchargement de fichiers avec Spring MVC
(Intellij) Hello World avec Spring Boot
Créez une application avec Spring Boot
Implémenter l'API REST avec Spring Boot
Google Cloud Platform avec Spring Boot 2.0.0
Implémenter l'application Spring Boot dans Gradle
[Java] Intégration LINE avec Spring Boot
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
La coopération des messages a commencé avec Spring Boot
Implémenter l'API REST avec Spring Boot et JPA (Application Layer)
Implémenter l'API REST avec Spring Boot et JPA (couche d'infrastructure)
Implémenter l'API REST avec Spring Boot et JPA (Domain Layer Edition)
Implémentez une API Rest simple avec Spring Security & JWT avec Spring Boot 2.0
Implémentez un serveur API Web REST simple avec Spring Boot + MySQL
Traitement lors du démarrage d'une application avec Spring Boot
Hello World avec Eclipse + Spring Boot + Maven
Envoyez des notifications régulières avec LineNotify + Spring Boot
Effectuer un test de confirmation de transaction avec Spring Boot
HTTPS avec Spring Boot et Let's Encrypt
Défi Spring Boot
Essayez d'utiliser Spring Boot avec VS Code
Démarrez le développement d'applications Web avec Spring Boot
Lancez l'application Nginx + Spring Boot avec docker-compose
J'ai essayé l'initialisation paresseuse avec Spring Boot 2.2.0
Forme de botte de printemps
Traitement asynchrone avec Spring Boot en utilisant @Async