OpenAPI Specification

    +
    "The OpenAPI Specification, originally known as the Swagger Specification, is a specification for machine-readable interface files for describing, producing, consuming, and visualizing RESTful web services." - Wikipedia. Often OpenAPI specification acts as documentation for developers. It helps UI and Backend developers to work side by side.

    Release date: January 2021 | Spring Boot: 2.4.x | Revision: 1

    Action: OpenAPI

    Enable OpenAPI

    Springfox provide good support to auto generate OpenAPI specification. They have spring boot starter io.springfox:springfox-boot-starter library for spring boot project. To enable OpenAPI do the following.

    1. Include version information at gradle.properties.

      gradle.properties
      projectName=Brain Station 23 Bank
      #
      openApiVersion=3.0.0
    2. Include springfox starter at build.gradle.

      build.gradle
      dependencies {
          compileOnly "io.springfox:springfox-boot-starter:${openApiVersion}"
      }
    3. Enable spring boot build properties through gradle build configuration to build.gradle. After enabling spring boot build properties, spring boot will generate build-info.properties inside the .jar which is accessible during runtime. We will use build properties to dynamically generates OpenAPI information (e.g. project name, version or any custom information).

      build.gradle
      springBoot {
          buildInfo {
              properties {
                  name = projectName
              }
          }
      }
    4. Add java configuration to override default configurations.

      OpenApiConfiguration.java
      @Configuration
      @ConditionalOnClass(OpenApiAutoConfiguration.class)
      public class OpenApiConfiguration {
      
        private final BuildProperties buildProperties;
      
        public OpenApiConfiguration(BuildProperties buildProperties) {
          this.buildProperties = buildProperties;
        }
      
        @Bean
        public Docket api() {
          return new Docket(DocumentationType.OAS_30)
              .groupName(buildProperties.getName() + " " + buildProperties.getVersion())
              .select()
              .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
              .paths(PathSelectors.any())
              .build()
              .apiInfo(
                  new ApiInfoBuilder()
                      .title(buildProperties.getName() + " API")
                      .description(buildProperties.getName() + " REST API")
                      .version(buildProperties.getVersion())
                      .license("© Brain Station 23 Ltd.")
                      .licenseUrl("https://brainstation-23.com")
                      .contact(
                          new Contact(
                              "Md. Rezaul Hasan", "https://brainstation-23.com/", "reza@bs-23.net"))
                      .build());
        }
      }
    5. Now OpenAPI specification will be accessible at http://localhost:8081/swagger-ui/index.html It will look like the bellow.

      Open API

    Learn More

    Project Code

    Next Step