Как сгенерировать клиентский api из другого модуля - PullRequest
0 голосов
/ 04 августа 2020

Я создаю 2 микросервиса. Один назван cart , а второй - product . У обоих из них есть API, сгенерированный через swagger-codegen-maven-plugin, однако теперь я хочу, чтобы микросервис cart сгенерировал клиентский api из определения файла yaml, который находится в модуле продукта (тот, из которого продукт создал клиент сервера). Как я могу этого добиться? Есть ли способ получить доступ к файлу yaml из другого модуля? Какая у меня должна быть зависимость?

            <plugin>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-codegen-maven-plugin</artifactId>
            <version>2.3.1</version>
            <executions>
                <execution>
                    <id>generate-cart-server</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <inputSpec>${project.basedir}/src/main/resources/static/api.yaml</inputSpec>
                        <language>spring</language>
                        <configOptions>
                            <dateLibrary>joda</dateLibrary>
                        </configOptions>
                    </configuration>
                </execution>
            </executions>
        </plugin>

Структура проекта

1 Ответ

1 голос
/ 05 августа 2020

Вы можете использовать относительные пути, пока находитесь внутри одного проекта. Вам нужно добавить несколько тегов execution, чтобы сгенерировать оба, клиент для продукта и сервер для корзины.

<executions>
    <execution>
        <id>generate-cart-server</id>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <inputSpec>${project.basedir}/src/main/resources/static/api.yaml</inputSpec>
            <language>spring</language>
            <configOptions>
                <dateLibrary>joda</dateLibrary>
            </configOptions>
        </configuration>
    </execution>
    <execution>
        <id>generate-product-client</id>
        <goals>
            <goal>generate</goal>
        </goals>
        <configuration>
            <inputSpec>${project.basedir}/../product/src/main/resources/static/api.yaml</inputSpec>
            <language>java</language>
            <library>resttemplate</library>
            <configOptions>
                <dateLibrary>joda</dateLibrary>
            </configOptions>
        </configuration>
    </execution>
</executions>

Используйте <language>java</language> для генерации кода клиента Java и выберите библиотеку, которую вы хотите использовать с <library>...</library>. RestTemplate является частью Spring, но есть и многие другие.

Цитата из Baeldung :

 Swagger Codegen supports the following Java libraries (pairs of HTTP 
clients and JSON processing libraries):

    jersey1 – Jersey1 + Jackson
    jersey2 – Jersey2 + Jackson
    feign – OpenFeign + Jackson
    okhttp-gson – OkHttp + Gson
    retrofit (Obsolete) – Retrofit1/OkHttp + Gson
    retrofit2 – Retrofit2/OkHttp + Gson
    resttemplate – Spring RestTemplate + Jackson
    rest-easy – Resteasy + Jackson

Конечно, вам нужно добавить выбранную библиотеку в свой также зависимости.

...