@@ -23,6 +23,14 @@ service, you can use the same GraphQL client code to access your native data sou
23
23
service online. You might even be able to share some more of that code between a progressive web
24
24
app and your native/hybrid app.
25
25
26
+ If what you're after is a way to consume a GraphQL service from C++, as of
27
+ [ v3.6.0] ( https://github.com/microsoft/cppgraphqlgen/releases/tag/v3.6.0 ) this project also includes
28
+ a ` graphqlclient ` library and a ` clientgen ` utility to generate types matching a GraphQL request
29
+ document, its variables, and all of the serialization code you need to talk to a ` graphqlservice `
30
+ implementation. If you want to consume another service, you will need access to the schema definition
31
+ (rather than the Introspection query results), and you will need send requests and parse responses
32
+ into a ` graphql::response::Value ` (e.g. with the ` graphqljson ` library) in your code.
33
+
26
34
# Getting Started
27
35
28
36
## Related projects
@@ -116,6 +124,41 @@ adds a runtime dependency on a Boost DLL. The `schemagen` tool won't run without
116
124
the install of Boost, vcpkg also takes care of installing the dependencies next to ` schemagen.exe ` when building the
117
125
Windows and UWP shared library targets (the platform triplets which don't end in ` -static ` ).
118
126
127
+ ### clientgen
128
+
129
+ The ` clientgen ` utility is based on ` schemagen ` and shares the same external dependencies. The command line arguments
130
+ are almost the same, except it takes an extra file for the request document and there is no equivalent to ` --no-stubs ` or
131
+ ` --separate-files ` :
132
+ ```
133
+ Usage: clientgen [options] <schema file> <request file> <output filename prefix> <output namespace>
134
+ Command line options:
135
+ --version Print the version number
136
+ -? [ --help ] Print the command line options
137
+ -v [ --verbose ] Verbose output including generated header names as
138
+ well as sources
139
+ -s [ --schema ] arg Schema definition file path
140
+ -r [ --request ] arg Request document file path
141
+ -o [ --operation ] arg Operation name if the request document contains more
142
+ than one
143
+ -p [ --prefix ] arg Prefix to use for the generated C++ filenames
144
+ -n [ --namespace ] arg C++ sub-namespace for the generated types
145
+ --source-dir arg Target path for the <prefix>Client.cpp source file
146
+ --header-dir arg Target path for the <prefix>Client.h header file
147
+ --no-introspection Do not expect support for Introspection
148
+ ```
149
+
150
+ This utility should output one header and one source file for each request document. A request document may contain
151
+ more than one operation, in which case you must specify the ` --operation ` (or ` -o ` ) parameter to indicate which one
152
+ should be used to generate the files. If you want to generate client code for more than one operation in the same
153
+ document, you will need to run ` clientgen ` more than once and specify another operation name each time.
154
+
155
+ The generated code depends on the ` graphqlclient ` library for serialization of built-in types. If you link the generated
156
+ code, you'll also need to link ` graphqlclient ` , ` graphqlpeg ` for the pre-parsed, pre-validated request AST, and
157
+ ` graphqlresponse ` for the ` graphql::response::Value ` implementation.
158
+
159
+ Sample output for ` clientgen ` is in the [ samples/client] ( samples/client ) directory, and each sample is consumed by
160
+ a unit test in [ test/ClientTests.cpp] ( test/ClientTests.cpp ) .
161
+
119
162
### tests (` GRAPHQL_BUILD_TESTS=ON ` )
120
163
121
164
- Unit testing: [ Google Test] ( https://github.com/google/googletest ) for the unit testing framework. If you don't want to
0 commit comments