Код IT
← Каталог

Синхронная коммуникация — Реализация на Java (GraphQL Java)

Фрагмент из «Синхронная коммуникация»: Реализация на Java (GraphQL Java).

java infra-securityencyclopedia8-05-mikroservisy-i-integratsiya-115 embed URL статья в энциклопедии
Java main.java

import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.RuntimeWiring;
import graphql.schema.idl.SchemaGenerator;
import graphql.schema.idl.SchemaParser;
import graphql.schema.idl.TypeDefinitionRegistry;

import java.io.InputStream;

public class GraphQLSchemaProvider {
    
    public GraphQLSchema createSchema() {
        SchemaParser parser = new SchemaParser();
        TypeDefinitionRegistry typeRegistry = parser.parse(
            this.getClass().getResourceAsStream("/schema.graphqls")
        );
        
        RuntimeWiring wiring = RuntimeWiring.newRuntimeWiring()
            .type("Query", typeWiring -> typeWiring
                .dataFetcher("user", new UserDataFetcher())
                .dataFetcher("users", new UsersDataFetcher())
                .dataFetcher("post", new PostDataFetcher())
                .dataFetcher("posts", new PostsDataFetcher())
            )
            .type("Mutation", typeWiring -> typeWiring
                .dataFetcher("createUser", new CreateUserMutation())
                .dataFetcher("updateUser", new UpdateUserMutation())
                .dataFetcher("deleteUser", new DeleteUserMutation())
                .dataFetcher("createPost", new CreatePostMutation())
            )
            .type("User", typeWiring -> typeWiring
                .dataFetcher("posts", new UserPostsDataFetcher())
            )
            .type("Post", typeWiring -> typeWiring
                .dataFetcher("author", new PostAuthorDataFetcher())
            )
            .build();
        
        SchemaGenerator generator = new SchemaGenerator();
        return generator.makeExecutableSchema(typeRegistry, wiring);
    }
}

import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.RuntimeWiring;
import graphql.schema.idl.SchemaGenerator;
import graphql.schema.idl.SchemaParser;
import graphql.schema.idl.TypeDefinitionRegistry;

import java.io.InputStream;

public class GraphQLSchemaProvider {
    
    public GraphQLSchema createSchema() {
        SchemaParser parser = new SchemaParser();
        TypeDefinitionRegistry typeRegistry = parser.parse(
            this.getClass().getResourceAsStream("/schema.graphqls")
        );
        
        RuntimeWiring wiring = RuntimeWiring.newRuntimeWiring()
            .type("Query", typeWiring -> typeWiring
                .dataFetcher("user", new UserDataFetcher())
                .dataFetcher("users", new UsersDataFetcher())
                .dataFetcher("post", new PostDataFetcher())
                .dataFetcher("posts", new PostsDataFetcher())
            )
            .type("Mutation", typeWiring -> typeWiring
                .dataFetcher("createUser", new CreateUserMutation())
                .dataFetcher("updateUser", new UpdateUserMutation())
                .dataFetcher("deleteUser", new DeleteUserMutation())
                .dataFetcher("createPost", new CreatePostMutation())
            )
            .type("User", typeWiring -> typeWiring
                .dataFetcher("posts", new UserPostsDataFetcher())
            )
            .type("Post", typeWiring -> typeWiring
                .dataFetcher("author", new PostAuthorDataFetcher())
            )
            .build();
        
        SchemaGenerator generator = new SchemaGenerator();
        return generator.makeExecutableSchema(typeRegistry, wiring);
    }
}