Apollo Client をSpring Boot を使う際に、introspection を利用したコードの自動生成を行いたい
Maven Plugin があるのでこれを利用する(Apollo v2用)
github.com
https://mvnrepository.com/artifact/com.github.aoudiamoncef/apollo-client-maven-plugin
schema.jsonがある場合は src/main/graphql
にそれを配置した上で、pom.xml ファイルに以下のように記述する
<plugin> <groupId>com.github.aoudiamoncef</groupId> <artifactId>apollo-client-maven-plugin</artifactId> <version>4.0.6</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <services> <example-api> <compilationUnit> <name>example</name> <compilerParams> <rootPackageName>com.example.graphql.client</rootPackageName> </compilerParams> </compilationUnit> </example-api> </services> </configuration> </execution> </executions> </plugin>
schema.jsonがない場合は、以下のようにintrospection.enable.true
にしてオプションを記述すると introspection を利用して自動で作成してくれる
<plugin> <groupId>com.github.aoudiamoncef</groupId> <artifactId>apollo-client-maven-plugin</artifactId> <version>4.0.6</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <services> <example-api> <compilationUnit> <name>example</name> <compilerParams> <rootPackageName>com.example.graphql.client</rootPackageName> </compilerParams> </compilationUnit> <introspection> <enabled>true</enabled> <endpointUrl>com.endpoint.url</endpointUrl> <schemaFile>${project.basedir}/src/main/graphql/schema.json</schemaFile> </introspection> </example-api> </services> </configuration> </execution> </executions> </plugin>
ヘッダーに認証情報を含めたい場合
introspection のクエリ実行時にヘッダーに認証情報を含めたい場合は<headers></headers>
に記載する
<introspection> ... <headers> <X-My-Api-Key>my-api-token</X-My-Api-Key> </headers> </introspection>
ドキュメントには<headers></headers>
しか書いてなくて、中をどうやって書けばいいか調査に苦労したが上のやり方で行けた
これでschema.json が自動生成され、src/main/graphql
にクエリも置いておけば、Javaコードも生成される