[ https://issues.apache.org/jira/browse/CAMEL-12854?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16788198#comment-16788198 ]
Hiram Chirino edited comment on CAMEL-12854 at 3/8/19 7:11 PM: --------------------------------------------------------------- *Ideas*: *1.* issuing a GraphQL query against an http GraphQL endpoint: {code:java} ...to("graphql:http://theurl?query='{put{some(param){here}}}'&variable.param='value'") {code} *2.* Setting up a GraphQL subscription {code:java} from("graphql:http://theurl?subscription='{put{some(param){here}}}'&variable.param='value'") {code} *3.* Perhaps hitting a GraphQL engine ( [https://github.com/graphql-java/graphql-java] ) directly. {code:java} // first register a graphql.GraphQL instance as mygraphqlbean ...to("graphql:bean:mygraphqlbean?query='{put{some(param){here}}}'&variable.param='value'"){code} *4.* Implementing GraphQL data fetchers with camel routes. Something like: {code:java} // Implement a helper method to make it easy to attach a data fetch to given GraphQL field: RuntimeWiring.Builder fetchWithCamel(final RuntimeWiring.Builder builder, String graphQLType , String graphQLField, CamelContext camelContext, String camelEndpoint) { final ProducerTemplate template = context.createProducerTemplate(); builder.type(graphQLType, builder -> builder .dataFetcher(graphQLField, env->{ return template.requestBody(endpoint, env); }) ); return builder; } // Then use it to create a GraphQL object: final CamelContext context = ... String schema = "type Query{hello: String}"; SchemaParser schemaParser = new SchemaParser(); TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema); RuntimeWiring.Builder builder = newRuntimeWiring() fetchWithCamel(builder, "Query", "hello", context, "direct:hello") RuntimeWiring runtimeWiring = builder.build(); SchemaGenerator schemaGenerator = new SchemaGenerator(); GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring); GraphQL graphql = GraphQL.newGraphQL(graphQLSchema).build(); {code} was (Author: chirino): *Ideas*: *1.* issuing a GraphQL query against an http GraphQL endpoint: {code:java} ...to("graphql:http://theurl?query='{put{some(param){here}}}'&variable.param='value'") {code} *2.* Perhaps hitting a GraphQL engine ( [https://github.com/graphql-java/graphql-java] ) directly. {code:java} // first register a graphql.GraphQL instance as mygraphqlbean ...to("graphql:bean:mygraphqlbean?query='{put{some(param){here}}}'&variable.param='value'"){code} *3.* Implementing GraphQL data fetchers with camel routes. Something like: {code:java} // Implement a helper method to make it easy to attach a data fetch to given GraphQL field: RuntimeWiring.Builder fetchWithCamel(final RuntimeWiring.Builder builder, String graphQLType , String graphQLField, CamelContext camelContext, String camelEndpoint) { final ProducerTemplate template = context.createProducerTemplate(); builder.type(graphQLType, builder -> builder .dataFetcher(graphQLField, env->{ return template.requestBody(endpoint, env); }) ); return builder; } // Then use it to create a GraphQL object: final CamelContext context = ... String schema = "type Query{hello: String}"; SchemaParser schemaParser = new SchemaParser(); TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema); RuntimeWiring.Builder builder = newRuntimeWiring() fetchWithCamel(builder, "Query", "hello", context, "direct:hello") RuntimeWiring runtimeWiring = builder.build(); SchemaGenerator schemaGenerator = new SchemaGenerator(); GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring); GraphQL graphql = GraphQL.newGraphQL(graphQLSchema).build(); {code} > Provide a GraphQL component > --------------------------- > > Key: CAMEL-12854 > URL: https://issues.apache.org/jira/browse/CAMEL-12854 > Project: Camel > Issue Type: New Feature > Reporter: Aurélien Pupier > Priority: Major > Labels: gsoc2019 > > GraphQl is a growing and interesting technology https://graphql.org/learn/ > It is providing query language for API, it can be interesting to have it in > Camel. > To investigate what would be interesting capabilities for it, created this > issue to gather ideas. -- This message was sent by Atlassian JIRA (v7.6.3#76005)