Fork me on GitHub

GraphQL Plugin

This plugin allows implementing the GraphQL specification with some easy steps.

Getting Started

Add the dependencies:

<dependency>
    <groupId>io.javalin</groupId>
    <artifactId>javalin-graphql</artifactId>
    <version>3.9.1</version>
</dependency>

Register the plugin:

val app = Javalin.create {
    val graphQLOption = GraphQLOptions("/graphql", ContextExample())
            .addPackage("io.javalin.examples")
            .register(QueryExample(message))
            .register(MutationExample(message))
            .register(SubscriptionExample())
            .context()
    it.registerPlugin(GraphQLPlugin(graphQLOption))
}

app.start()

The GraphQL is now available under the /graphql endpoint.

Create Query

This section contains an overview of all the available to create queries.

@GraphQLDescription("Query Example")
class QueryExample : QueryGraphql {
    fun hello(): String = "Hello world"

    fun demoData(@GraphQLDescription("awesome input") data: DemoData): DemoData = data
}

After creating this class is necessary to register the class at the start of the plugin.

Create Command

This section contains an overview of all the available to create commands.

@GraphQLDescription("Command Example")
class CommandExample : CommandGraphql {
    fun hello(): String = "Hello world"

    fun demoData(@GraphQLDescription("awesome input") data: DemoData): DemoData = data
}

After creating this class is necessary to register the class at the start of the plugin.

Create Subscription

This section contains an overview of all the available to create a subscription.

@GraphQLDescription("Subscription Example")
class SubscriptionExample: SubscriptionGraphql {
    fun counter(): Flux<Int> = Flux.interval(Duration.ofMillis(100)).map { 1 }
}

After creating this class is necessary to register the class at the start of the plugin.

Pass context

Sometimes it is necessary to pass the context in the method. You can create this context with this class.

class ContextExample {
    val globalEnvironment = "globalEnvironment"
}

After creating this class is necessary to register the class at the start of the plugin.

Then is possible to access this context with this annotation @GraphQLContext.

class QueryExample() : QueryGraphql {
    fun context(@GraphQLContext context: ContextExample): ContextExample {
        return context
    }
}

TODO

Do you like Javalin?