OpenAPI UI

Easily enhance your Helidon SE application by adding an interactive user interface web page based on your service’s OpenAPI document.

Overview

SmallRye offers an OpenAPI user interface component which displays a web page based on your application’s OpenAPI document. Through that UI, users can invoke the operations declared in the document. While not generally suitable for end-users, the OpenAPI UI can be useful for demonstrating and "test driving" your service’s endpoints.

The Helidon OpenAPI component allows you to integrate the SmallRye UI into your application, adding the UI web page to your application very simply.

Maven Coordinates

To enable Helidon OpenAPI UI support add the following dependency to your project’s pom.xml (see Managing Dependencies).

<dependency>
    <groupId>io.helidon.integrations.openapi-ui</groupId>
    <artifactId>helidon-integrations-openapi-ui</artifactId>
</dependency>
Copied

Also, make sure your project has the following dependency.

<dependency>
    <groupId>io.helidon.openapi</groupId>
    <artifactId>helidon-openapi</artifactId>
</dependency>
Copied

This dependency allows your application to create, configure, and register the OpenAPISupport service.

Usage

Make sure your application creates a Helidon OpenAPISupport instance and registers it for routing (described in detail in the Helidon OpenAPI documentation). OpenAPISupport automatically prepares the OpenAPI UI with default settings if you also declare a dependency on the Helidon OpenAPI UI integration component as explained above. The API section below illustrates adding OpenAPI to your application and customizing the UI behavior.

After you modify, build, and start your Helidon SE service, you can access the OpenAPI UI by default at http://your-host:your-port/openapi/ui. Helidon also uses conventional content negotiation at http://your-host:your-port/openapi returning the UI to browsers (or any client that accepts HTML) and the OpenAPI document otherwise.

You can customize the path using either the API or configuration.

The example below shows the UI if you modify the Helidon SE QuickStart greeting application to contain a static OpenAPI file which describes the service endpoints.

Example OpenAPI UI Screen
openapi ui screen capture greeting se start

With the OpenAPI UI displayed, follow these steps to access one of your service’s operations.

  1. Find the operation you want to run and click on its row in the list.
  2. The UI expands the operation, showing any input parameters and the possible responses. Click the "Try it out" button in the operation’s row.
  3. The UI now allows you to type into the input parameter field(s) to the right of each parameter name. Enter any required parameter values (first highlighted rectangle) and any non-required values you wish, then click "Execute" (highlighted arrow).
  4. Just below the "Execute" button the UI shows several sections:
    • the equivalent curl command for submitting the request with your inputs,

    • the URL used for the request, and

    • a new "Server response" section (second highlighted rectangle) containing several items from the response:

      • HTTP status code

      • body

      • headers

The next image shows the screen after you submit the "Returns a personalized greeting" operation.

Note that the UI shows the actual response from invoking the operation in the "Server response" section. The "Responses" section farther below describes the possible responses from the operation as declared in the OpenAPI document for the application.

Example OpenAPI UI Screen
openapi ui screen capture greeting se expanded

API

Creating OpenAPISupport with Automatic UI Behavior

With the Helidon OpenAPI UI dependency in your pom.xml file, any OpenAPISupport object your application builds prepares the default OpenAPI UI behavior, possibly modified by any UI settings you have in your configuration.

Create OpenAPISupport with automatic UI
Config config = Config.create(); 
Config openApiConfig = config.get(OpenAPISupport.Builder.CONFIG_KEY)); 

OpenAPISupport openApiSupport =
    OpenAPISupport.builder()
        .config(openApiConfig) 
        .build();
Copied
  • Load the configuration.
  • Extract the OpenAPISupport configuration.
  • Build the OpenAPISupport instance using the configuration.

If your code invokes the OpenAPISupport.Builder config method, Helidon automatically applies the ui section of the openapi configuration to the UI.

Customizing the UI Behavior

You can control some of the behavior of the UI programmatically in two steps:

  1. Create an OpenApiUi.Builder and invoke methods on it to set the UI behavior.
  2. Invoke the ui method on OpenAPISupport.Builder, passing the OpenApiUi.Builder you prepared above.

The following example illustrates these steps, combining configuration with explicit programmatic settings.

Create OpenApiUi and OpenAPISupport instances
Config config = Config.create(); 
Config openApiConfig = config.get(OpenAPISupport.Builder.CONFIG_KEY)); 

OpenApiUi.Builder uiBuilder =
    OpenApiUi.builder() 
        .webContext("/my-openapi-ui"); 

OpenAPISupport openApiSupport =
    OpenAPISupport.builder() 
        .ui(uiBuilder)
        .config(openApiConfig) 
        .build();
Copied
  • Load the configuration.
  • Extract the OpenAPISupport configuration.
  • Create the OpenApiUi.Builder instance.
  • Explicitly set the web context where the UI should respond.
  • Create the OpenAPISupport instance using the OpenApiUi.Builder just created. You can refine the behavior of the OpenAPISupport object by invoking additional methods on its builder before invoking its build method.
  • Apply the openapi configuration to the OpenAPISupport builder. This also automatically applies any openapi.ui configuration to the UI.

The order in which your code invokes the methods on OpenApiUi.Builder and OpenAPISupport.Builder determines the outcome. For instance, the example above sets the UI on the OpenAPISupport.Builder before applying configuration. If the configuration contains a setting for the UI’s web-context value then the UI uses the configured value, not the programmatic value, because your code applied the configuration later. Your code should typically apply configuration after setting any values programmatically. Doing so allows users or deployers of your service to set the behavior using configuration according to their particular needs which your code might not be able to anticipate.

Note

The webContext(String) method on OpenApiUi.Builder sets the web context where the UI should respond instead of the default /openapi/ui. Helidon uses the provided string to set the entire web context for the UI, not as a suffix appended to the web context for the OpenAPISupport service.

Registering OpenAPISupport

Whether or not your code tailors the UI or OpenAPISupport behavior, it must register the resulting OpenAPISupport instance so that the OpenAPI and UI endpoints can respond correctly.

Register services for routing
Routing.builder()
        .register(openApiSupport)
        // Add registrations of your service(s) and other Helidon services you need.
        .build();
Copied

The UI is implemented as part of the OpenAPISupport service which registers the UI automatically. Your code does not register the UI explicitly.

Configuration

To use configuration to control how the Helidon OpenAPI UI service behaves, add an openapi.ui section to your configuration file, such as application.yaml.

Type: io.helidon.openapi.OpenApiUi

Config key
ui
Copied

Configuration options

Optional configuration options
keytypedefault valuedescription
enabled

boolean

true

Sets whether the UI should be enabled.

options

Map<string, string>

 

Sets implementation-specific UI options.

web-context

string

 

web context (path) where the UI will respond

The default UI web-context value is the web context for your OpenAPISupport service with the added suffix /ui. If you use the default web context for both OpenAPISupport and the UI, the UI responds at /openapi/ui.

You can use configuration to affect the UI path in two ways:

  • Configure the OpenAPI endpoint path (the /openapi part).

    Recall that you can configure the Helidon OpenAPI component to change where it serves the OpenAPI document.

    Configuring the OpenAPI web context
    openapi:
      web-context: /my-openapi
    Copied

    In this case, the path for the UI component is your customized OpenAPI path with /ui as a suffix. With the example above, the UI responds at /my-openapi/ui and Helidon uses standard content negotiation at /my-openapi to return either the OpenAPI document or the UI.

  • Separately, configure the entire web context path for the UI independently from the web context for OpenAPI.

    Configuring the OpenAPI UI web context
    openapi:
      ui:
        web-context: /my-ui
    Copied

    Note

    The openapi.ui.web-context setting assigns the entire web-context for the UI, not the suffix appended to the OpenAPISupport endpoint.

    With this configuration, the UI responds at /my-ui regardless of the path for OpenAPI itself.

The SmallRye OpenAPI UI component accepts several options, but they are of minimal use to application developers and they must be passed to the SmallRye UI code programmatically. Helidon allows you to specify these values using configuration in the openapi.ui.options section. Helidon then passes the corresponding options to SmallRye for you. To configure any of these settings, use the enum values—​they are all lower case—​declared in the SmallRye Option.java class as the keys in your Helidon configuration.

Note

Helidon prepares several of the SmallRye options automatically based on other settings. Any options you configure override the values Helidon assigns, possibly interfering with the proper operation of the UI.

Additional Information