Add reference docs section on codegen

Closes gh-848
This commit is contained in:
rstoyanchev
2023-11-21 09:19:26 +00:00
parent 0f8d20f901
commit 6cd3e425ee
2 changed files with 64 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
include::attributes.adoc[]
[[codegen]]
= Code Generation
You can use tools such as
https://netflix.github.io/dgs/generating-code-from-schema/[DGS Code Generation] to generate
Java types from the GraphQL schema. The following can be generated:
1. Client types for requests (e.g. queries, mutations) input types, and other types to
express the response selection set.
2. Data types.
3. Server handling classes (e.g. controllers).
Code generation provides convenience initially, but is not ideal for your own application
domain types over which you'll typically want control. For client types, however, code
generation can be very useful since you typically don't need to manually change generated
request types, input types, and selection set types. Response types could be imported,
if you have access to them, or otherwise could also be generated.
Client generated types can be used with Spring's `GraphQlClient`. Start by following the
instructions for the DGS code generation plugin to generate client API types. Then, given
a schema like this:
[source,graphql,indent=0,subs="verbatim,quotes"]
----
type Query {
books: [Book]
}
type Book {
id: ID
name: String
}
----
DGS Codegen will generate a `BooksGraphQLQuery` and `BooksProjectionRoot` classes.
You can then use those with Spring's `GraphQlClient` along with your own `Book` class
for the response:
[source,java,indent=0,subs="verbatim,quotes"]
----
HttpGraphQlClient client =
HttpGraphQlClient.create(WebClient.create("http://localhost:8080/graphql"));
BooksGraphQLQuery query = new BooksGraphQLQuery();
String document = new GraphQLQueryRequest(query, new BooksProjectionRoot<>().id().name()).serialize();
List<Book> books = client.document(document)
.retrieve(query.getOperationName())
.toEntityList(Book.class)
.block();
----
NOTE: Spring Initializer at https://start.spring.io is scheduled to add support for the DGS
Code Generation with Gradle and Maven. See
https://github.com/spring-io/start.spring.io/pull/1348[start.spring.io#1348].

View File

@@ -1727,6 +1727,11 @@ include::client.adoc[leveloffset=+1]
include::codegen.adoc[leveloffset=+1]
include::testing.adoc[leveloffset=+1]