Springfox

From NovaOrdis Knowledge Base
Revision as of 22:40, 14 February 2019 by Ovidiu (talk | contribs) (→‎UI Support)
Jump to navigation Jump to search

External

Internal

Overview

Springfox is a suite of Java libraries for automating the generation of machine and human readable specification for JSON APIs written with Spring Framework. Springfox works by examining an application, once, at runtime to infer API semantics based on Spring configurations, class structure and various compile time java annotations.

Dependencies

repositories {

   jcenter()
}

dependencies {

    implementation "io.springfox:springfox-swagger2:2.9.2"
}

Essential Classes

Docket

springfox.documentation.spring.web.plugins.Docket: the primary API configuration mechanism.

ApiSelectorBuilder

ApiSelectorBuilder provides fine grained control over the endpoints exposed via swagger.

Annotations

Security Schemas

The following security schemas are available to protect the API:

  • ApiKey
  • BasicAuth
  • OAuth

Models

Non-reachable Model

A model that should be described in the generated specification but is not explicitly used in any operation.

Generating Swagger/OpenAPI Specification from Spring Code with Springfox

Playground Example

https://github.com/ovidiuf/playground/tree/master/spring/spring-boot/rest-to-swagger-with-springfox

General Considerations

This section was written based on:

It shows how to dynamically generate a Swagger 2.0 specification of the implemented API at runtime, as JSON. The second part of the section shows how to enable UI support for browsing the API specification.

Generating the Swagger Specification

At this point, only the "io.springfox:springfox-swagger2" dependency is needed. This dependency contains all the functionality Springfox needs to generate the specification in the JSON format.

There are two essential code changes:

1. Annotate the Spring Boot application class, or a Configuration with @EnableSwagger2. It is preferable to provide a separated Configuration class, dedicated to Swagger.

2. Expose a configured Docket instance as a bean.

If these two elements are present, the Spring application will generate its JSON-formatted. Swagger2 specification while invoked as: http://localhost:8080/v2/api-docs

UI Support

UI Support Dependency

dependencies {

    implementation 'io.springfox:springfox-swagger-ui:2.9.2'
}