Update section on codegen

See gh-848
This commit is contained in:
rstoyanchev
2023-12-06 15:53:09 +00:00
parent 6cd3e425ee
commit 9ff6bae4a2

View File

@@ -9,16 +9,13 @@ You can use tools such as
https://netflix.github.io/dgs/generating-code-from-schema/[DGS Code Generation] to generate 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: 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 1. Client types for requests (e.g. queries, mutations) input types, and response selection types.
express the response selection set. 2. Data types corresponding to GraphQL schema types.
2. Data types.
3. Server handling classes (e.g. controllers).
Code generation provides convenience initially, but is not ideal for your own application Code generation may not be ideal for your own application's data types especially if you
domain types over which you'll typically want control. For client types, however, code want to add logic to them. Code generation, however, is a good fit for client types since
generation can be very useful since you typically don't need to manually change generated those define the request, and don't need to have other logic. As a client, you may also
request types, input types, and selection set types. Response types could be imported, choose to generate the data types for the response.
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 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 instructions for the DGS code generation plugin to generate client API types. Then, given
@@ -36,9 +33,8 @@ a schema like this:
} }
---- ----
DGS Codegen will generate a `BooksGraphQLQuery` and `BooksProjectionRoot` classes. DGS Codegen generates `BooksGraphQLQuery` and `BooksProjectionRoot` that you can use with
You can then use those with Spring's `GraphQlClient` along with your own `Book` class `GraphQlClient` over HTTP (or any supported transport) as follows:
for the response:
[source,java,indent=0,subs="verbatim,quotes"] [source,java,indent=0,subs="verbatim,quotes"]
---- ----
@@ -50,10 +46,12 @@ for the response:
List<Book> books = client.document(document) List<Book> books = client.document(document)
.retrieve(query.getOperationName()) .retrieve(query.getOperationName())
.toEntityList(Book.class) .toEntityList(Book.class) // possibly also generated or imported if available
.block(); .block();
---- ----
NOTE: Spring Initializer at https://start.spring.io is scheduled to add support for the DGS TIP: We intend to further simplify the above code in
Code Generation with Gradle and Maven. See https://github.com/spring-projects/spring-graphql/issues/846[spring-graphql#846].
https://github.com/spring-io/start.spring.io/pull/1348[start.spring.io#1348].
You can use Spring Initializer at https://start.spring.io to create a Spring project with
the DGS Code Generation Gradle or Maven plugin.