Tinkoff / invest-openapi-java-sdk

Apache License 2.0
167 stars 46 forks source link

Использование JsonSchema для описания и автогенерации модельных классов #94

Closed newmen closed 3 years ago

newmen commented 4 years ago

В ишуе #93 я уже выразил своё негодование о том, что у вас классы моделей захардкожены, вместо того, чтобы генерить их на лету, на основании схемы. В порыве поправить этот недочёт посылаю свой ПР.

Следует отметить, что уже после того как этот код был написан, я обнаружил таки у вас описанную схему API, на сваггере. Сваггер штука годная, так что даже не знаю стоит ли мой ПР заносить вам. :)

В целом, написаная мною схема вполне реюзаема и для других ЯП, если её вынести в отдельный репо, и повыгашивать проперти, начинающиеся с "java...". Что касается классов для стриминга, то схемы для них я не написал, поскольку у вас там навороты с сериалазией/десериализацией. Возможно такое тоже можно генерировать на лету, но я пока не пробовал.

NikitaMelnikov commented 4 years ago

Отличная работа!

@zlumyo нужно ревью :)

leodev87 commented 4 years ago

Я генерю модель с помощью swagger-codegen-maven-plugin, может пригодится

          <plugin>
            <groupId>io.swagger.codegen.v3</groupId>
            <artifactId>swagger-codegen-maven-plugin</artifactId>
            <version>3.0.20</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <inputSpec>https://tinkoffcreditsystems.github.io/invest-openapi/swagger-ui/swagger.yaml</inputSpec>
                <language>spring</language>
                <library>spring-boot</library>
                <configOptions>
                    <sourceFolder>src/gen/java/main</sourceFolder>
                    <interfaceOnly>true</interfaceOnly>
                    <java8>true</java8>
                    <dateLibrary>java8</dateLibrary>
                </configOptions>
                <modelPackage>ru.tinkoff.invest.openapi.model</modelPackage>
                <apiPackage>ru.tinkoff.invest.openapi.api</apiPackage>
                <generateApis>false</generateApis>
                <generateApiTests>false</generateApiTests>
                <generateApiDocumentation>false</generateApiDocumentation>
                <generateModels>true</generateModels>
                <generateModelTests>false</generateModelTests>
                <generateModelDocumentation>true</generateModelDocumentation>
                <generateSupportingFiles>false</generateSupportingFiles>
            </configuration>
        </plugin>
    </plugins>
zlumyo commented 3 years ago

Позволю себе внести изменения в ПР: сделаю генерацию по swagger, чтобы не беспокоиться об актуальном состоянии json-схемы.

zlumyo commented 3 years ago

Этот ПР я редактировать не могу - открыл #121 . Там реализована генерация по swagger.