|
| 1 | +[[graphiql]] |
| 2 | += GraphiQL |
| 3 | + |
| 4 | +https://github.com/graphql/graphiql/tree/main/packages/graphiql#readme[GraphiQL] is a graphical interactive in-browser GraphQL IDE. |
| 5 | +It is very popular amongst developers as it makes it easy to explore and interactively develop GraphQL APIs. |
| 6 | +During development, a stock GraphiQL integration is often enough to help developers work on an API. |
| 7 | +In production, applications can require a custom GraphiQL build, that ships with a company logo or specific authentication support. |
| 8 | + |
| 9 | +Spring for GraphQL ships with https://github.com/spring-projects/spring-graphql/blob/main/spring-graphql/src/main/resources/graphiql/index.html[a stock GraphiQL `index.html` page] that uses static resources hosted on the unpkg.com CDN. |
| 10 | +Spring Boot applications can easily {spring-boot-ref-docs}/web.html#web.graphql.graphiql[enable this page with a configuration property]. |
| 11 | + |
| 12 | +Your application may need a custom GraphiQL build if it requires a setup that doesn't rely on a CDN, or if you wish to customize the user interface. |
| 13 | +This can be done in two steps: |
| 14 | + |
| 15 | +1. Configure and compile a GraphiQL build |
| 16 | +2. Expose the built GraphiQL instance through the Spring web infrastructure |
| 17 | + |
| 18 | +[[graphiql.custombuild]] |
| 19 | +== Creating a custom GraphiQL build |
| 20 | + |
| 21 | +This part is generally outside of the scope of this documentation, as there are several options for custom builds. |
| 22 | +You will find more information in the https://github.com/graphql/graphiql/tree/main/packages/graphiql#readme[official GraphiQL documentation]. |
| 23 | +You can choose to copy the build result directly in your application resources. |
| 24 | +Alternatively, you can integrate the JavaScript build in your project as a separate module by leveraging Node.js https://github.com/node-gradle/gradle-node-plugin[Gradle] or https://github.com/eirslett/frontend-maven-plugin[Maven] build plugins. |
| 25 | + |
| 26 | + |
| 27 | +[[graphiql.configuration]] |
| 28 | +== Exposing a GraphiQL instance |
| 29 | + |
| 30 | +Once a GraphiQL build is available on the classpath, you can expose it as an endpoint with the {spring-framework-ref-docs}/web/webmvc-functional.html#webmvc-fn-router-functions[functional web frameworks]. |
| 31 | + |
| 32 | +include::code:GraphiQlConfiguration[] |
| 33 | +<1> Load the GraphiQL page from the classpath (here, we are using the version shipped with Spring for GraphQL) |
| 34 | +<2> Configure a web handler for processing HTTP requests; you can implement a custom `HandlerFunction` depending on your use case |
| 35 | +<3> Finally, map the handler to a specific HTTP endpoint |
| 36 | +<4> Expose this new route through a `RouterFunction` bean |
| 37 | + |
| 38 | +You might also need to configure your application to {spring-boot-ref-docs}/web.html#web.servlet.spring-mvc.static-content[serve the relevant static resources]. |
0 commit comments