Java에서 GraphQL 시작하기
19619 단어 javaspringbootgraphql
GraphQl:Java 시작하기
1. 메이븐 의존성 추가
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>16.2</version>
</dependency>
2. GraphQL ObjectType 및 DataFetcher 생성
<dependency>
<groupId>com.graphql-java</groupId>
<artifactId>graphql-java</artifactId>
<version>16.2</version>
</dependency>
SchemaBuilderHelper에서 사용합니다.
import graphql.Scalars;
import graphql.schema.GraphQLObjectType;
import org.springframework.stereotype.Component;
@Component
public class MyGraphQLObjectTypes {
public GraphQLObjectType getUserType() {
return new GraphQLObjectType.Builder()
.name("User")
.field(builder ->
builder
.name("name")
.type(Scalars.GraphQLString)
)
.field(builder ->
builder
.name("email")
.type(Scalars.GraphQLString)
).build();
}
// define your own data type for your Model classes
}
getUserType 메서드는 아래 사용자 클래스와 동일한 GraphQLObjectType을 반환합니다.
import lombok.Data;
@Data
public class User {
private String name;
private String email;
}
import graphql.Scalars;
import graphql.schema.*;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@RequiredArgsConstructor
@Component
public class SchemaBuilderHelper {
private final MyGraphQLObjectTypes myGraphQLObjectTypes;
public void buildQuery(GraphQLObjectType.Builder queryBuilder, GraphQLCodeRegistry.Builder codeRegistry) {
queryBuilder.name("Query");
buildUserQuery(queryBuilder, codeRegistry);
}
private void buildUserQuery(GraphQLObjectType.Builder queryBuilder, GraphQLCodeRegistry.Builder codeRegistry) {
GraphQLObjectType userType = myGraphQLObjectTypes.getUserType();
codeRegistry.dataFetcher(FieldCoordinates.coordinates("Query", "user"), (DataFetcher<HashMap<String, Object>>) dataFetchingEnvironment -> {
HashMap<String, Object> res = new HashMap<>();
res.put("name", "Ram");
res.put("email", "[email protected]");
return res;
});
queryBuilder.field(builder -> builder
.name("user")
.type(userType));
}
}
지금은 사용자(사용자 유형)에 대한 정적 dataFetcher를 만들었지만 동적 데이터 소스로 대체할 수 있습니다.
3. 또 다른 클래스 GraphQLConfig 생성
이 클래스는 SchemaBuilderHelper를 사용하여 GraphQLSchema를 빌드하고 이를 위한 스프링 빈을 생성합니다.
graphQL 쿼리를 실행하는 데 사용되는 GraphQL.
import com.example.graphqljava.graphql.SchemaBuilderHelper;
import graphql.GraphQL;
import graphql.schema.GraphQLCodeRegistry;
import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLSchema;
import graphql.schema.idl.SchemaPrinter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class GraphQLConfig {
@Bean
public SchemaPrinter getSchemaPrinter() {
return new SchemaPrinter();
}
@Bean
public GraphQLSchema getGraphQLSchema(SchemaBuilderHelper schemaBuilderHelper) {
GraphQLCodeRegistry.Builder codeRegistry = GraphQLCodeRegistry.newCodeRegistry();
GraphQLObjectType.Builder queryBuilder = GraphQLObjectType.newObject();
//build query type
schemaBuilderHelper.buildQuery(queryBuilder, codeRegistry);
return GraphQLSchema.newSchema()
.query(queryBuilder.build())
.codeRegistry(codeRegistry.build())
.build();
}
@Bean
public GraphQL getGraphQl(GraphQLSchema graphQLSchema) {
return GraphQL.newGraphQL(graphQLSchema).build();
}
}
4. 모델 클래스 GraphQLRequest 생성
이것은 클라이언트가 보낸 graphQl 요청을 나타냅니다.
import lombok.Data;
@Data
public class GraphQLRequest {
private String query;
private String operationName;
private Map<String, Object> variables;
}
5. GraphQL 요청(GraphQLController)을 처리하기 위한 컨트롤러 클래스를 생성해 봅시다.
이 GraphQLController에는 기본적으로 두 개의 엔드포인트가 포함됩니다.
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/graphql")
public class GraphQLController {
private final GraphQL graphQL;
private final GraphQLSchema schema;
private final SchemaPrinter schemaPrinter;
@GetMapping(produces = MediaType.TEXT_PLAIN_VALUE)
public String schema() {
return schemaPrinter.print(schema);
}
@PostMapping
public Object execute(@RequestBody GraphQLRequest graphQLRequest) {
Map<String, Object> variables = Optional.ofNullable(graphQLRequest.getVariables())
.orElse(new HashMap<>());
ExecutionInput input = new ExecutionInput
.Builder()
.query(graphQLRequest.getQuery())
.operationName(graphQLRequest.getOperationName())
.variables(variables).build();
ExecutionResult execute = graphQL.execute(input);
Map<String, Object> result = new HashMap<>();
result.put("data", execute.getData());
//set error if any
if (!execute.getErrors().isEmpty()) {
result.put("error", execute.getErrors());
}
return result;
}
}
이제 graphQL을 사용하여 간단한 Spring 앱을 빌드했습니다.
이 데모의 github 저장소는 다음과 같습니다https://github.com/vijaypatidar/graph-ql-java.
Reference
이 문제에 관하여(Java에서 GraphQL 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/vijaypatidar/getting-start-with-graphql-in-java-11n1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Java에서 GraphQL 시작하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vijaypatidar/getting-start-with-graphql-in-java-11n1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)