Maison > Java > javaDidacticiel > le corps du texte

Comment SpringBoot utilise GraphQL pour développer une API Web

PHPz
Libérer: 2023-05-13 10:52:05
avant
1539 Les gens l'ont consulté

Avant-propos

L'API Restful traditionnelle a de nombreux problèmes. Tout d'abord, elle ne peut pas contrôler les champs renvoyés, et le front-end ne peut pas prédire les résultats de retour du back-end, de plus, différents résultats de retour correspondent à différentes adresses de requête, ce qui est différent. conduit à de multiples demandes. GraphQL est un langage de requête API construit sur cette base. Par rapport à l'API Restful traditionnelle, il présente les avantages suivants :

  • Flexibilité : GraphQL peut interroger les données de manière flexible en fonction des besoins du client, contrairement à RESTful. L'API renvoie des données fixes. données structurées.

  • Réduire les requêtes réseau : GraphQL permet aux clients d'obtenir plusieurs ressources en une seule requête, ce qui permet de réduire le nombre de requêtes réseau et d'améliorer les performances.

  • Système de typage puissant : GraphQL dispose d'un système de typage puissant qui permet aux clients de détecter les erreurs dans les requêtes au moment de la compilation, ce qui contribue à réduire les erreurs d'exécution.

  • Cacheable : GraphQL peut être mis en cache, ce qui signifie que le serveur peut mettre en cache les résultats d'une requête, améliorant ainsi les performances et l'évolutivité.

  • Documentation : GraphQL a la capacité de s'auto-documenter, permettant aux développeurs de comprendre rapidement la structure et les fonctions de l'API.

Solution d'implémentation de GraphQL dans Spring Boot

Si le langage back-end est Java, alors GraphQL Java est la bibliothèque de base pour implémenter GraphQL. De plus, Spring a intégré GraphQL Si Spring est utilisé dans le projet, Spring GraphQL est plus recommandé.

Le développement de Spring GraphQL est généralement divisé en les étapes suivantes

Ajouter des dépendances Spring GraphQL

Ajouter des dépendances Spring GraphQL dans votre projet. Vous pouvez ajouter des dépendances via des outils de construction comme Maven ou Gradle. Par exemple, si vous utilisez Maven, vous pouvez ajouter la dépendance suivante

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-graphql</artifactId>
        </dependency>
Copier après la connexion

Define GraphQL Schema

Define GraphQL Schema dans votre application. Le schéma définit les types et les champs interrogeables. Vous pouvez définir un schéma à l'aide de SDL (Schema Definition Language) ou par programme.

Pour les projets Spring Boot, le fichier de schéma est placé dans le répertoire resources/graphql/ et le nom du fichier est suffixé par graphqls. Ce qui suit est un simple schema.graphqls que j'ai défini.

Il spécifie deux implémentations de requête. author(id:Int) signifie interroger l'auteur par identifiant, et allAuthors signifie interroger le tableau Author.

schema {
query: Query
}

type Query {
author(id:Int): Author
allAuthors: [Author]
}

type Author {
id:Int
firstName:String
lastName:String
email:String
date de naissance:String
}

Implémentation de RuntimeWiringConfigurer

RuntimeWiringConfigurer est au cœur de l'implémentation de GraphQL pour obtenir des données. L'utilisation de GraphQL ne peut pas supprimer directement les frameworks de couche de persistance tels que Mybatis/Jpa. obtenir des données du support de base de données.

Le RuntimeWiringConfigurer est similaire à la couche de service de Spring, qui est au cœur de la mise en œuvre des données de base.

Ce qui suit est un exemple simple :

@Component
public class AuthorWiring implements RuntimeWiringConfigurer {
    private final AuthorRepository authorRepository;
    public AuthorWiring(AuthorRepository authorRepository) {
        this.authorRepository = authorRepository;
    }
    @Override
    public void configure(RuntimeWiring.Builder builder) {
        builder.type("Query", typeWiring -> typeWiring
                        .dataFetcher("allAuthors", environment -> authorRepository.findAll())
                        .dataFetcher("author", environment -> authorRepository.getReferenceById(environment.getArgument("id")))
    }
}
Copier après la connexion

Ici, deux objets DataFetcher sont définis dans la méthode configure pour spécifier comment l'auteur et tous les auteurs interrogent les données. On peut voir que les données sont toujours interrogées via JPA.

Définissez GraphQL Controller

Nous définissons GraphQLController pour recevoir les paramètres d'entrée des requêtes Web. L'exemple est le suivant :

@RestController
@RequestMapping("graphql")
public class GraphQLController {
    private final GraphQL graphQL;
    @Autowired
    public GraphQLController(GraphQlSource graphQlSource) {
        graphQL = graphQlSource.graphQl();
    }
    @PostMapping("query")
    public ResponseEntity<Object> query(@RequestBody String query) {
        ExecutionResult result = graphQL.execute(query);
        return ResponseEntity.ok(result.getData());
    }
}
Copier après la connexion

L'objet GraphQL dans le code est le point d'entrée pour l'exécution des requêtes, mais GraphQL n'a qu'un constructeur privé, donc il ne peut pas être injecté directement. Les objets GraphQL doivent être obtenus en injectant GraphQlSource.

Notez que dans GraphQL, nous ne pouvons utiliser que String pour recevoir des paramètres et ne pouvons pas utiliser d'objets de modèle. En effet, les paramètres de requête Graph ne sont pas des structures JSON.

Test Graph request

Nous créons un fichier graphql.http pour effectuer des requêtes http dans idea

### Envoyer une requête POST avec le corps json
POST http://localhost:8080/graphql/query
Content-Type : application/json

{
author(id: 1) {
id
firstName
lastName
date de naissance
}
}

### Envoyer une requête POST avec json body
POST http://localhost:8080 /graphql/query
Content-Type : application/json

{
allAuthors {
id
firstName
lastName
birthdate
}
}

Exécutez la requête de l'auteur (id : 1) et vous pourrez voir les résultats de retour normaux. Si nous n'avons besoin que des champs firstName et lastName, supprimez simplement l'identifiant et la date de naissance des paramètres d'entrée de la demande sans modifier le code back-end.

Comment SpringBoot utilise GraphQL pour développer une API Web

Comment SpringBoot utilise GraphQL pour développer une API Web

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal