UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【Apollo Client 】Apollo Client Maven Plugin でコードの自動生成

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コードも生成される