Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Implement backend, test endpoint, and annotate the method with swagger annotations
  2. Build backend module and check that Open API spec is generated
  3. Build client module 
  4. Use generated client

Additional dependencies

REST ignite-rest module will have additional dependencies:

  • io.micronaut:micronaut-inject:jar:3.4.1
  • javax.annotation:javax.annotation-api:jar:1.3.2 (transitive from micronaut-inject)
  • jakarta.inject:jakarta.inject-api:jar:2.0.1
  • io.micronaut:micronaut-core:jar:3.4.1
  • io.micronaut:micronaut-http-server-netty:jar:3.4.1
  • io.micronaut:micronaut-http-server:jar:3.4.1
  • io.micronaut:micronaut-router:jar:3.4.1
  • io.micronaut:micronaut-http-netty:jar:3.4.1
  • io.micronaut:micronaut-buffer-netty:jar:3.4.1
  • io.micronaut:micronaut-runtime:jar:3.4.1
  • io.micronaut:micronaut-http:jar:3.4.1
  • io.micronaut:micronaut-aop:jar:3.4.1
  • io.micronaut:micronaut-context:jar:3.4.1
  • io.micronaut:micronaut-core-reactive:jar:3.4.1
  • Io.micronaut:micronaut-json-core:jar:3.3.3
  • io.micronaut:micronaut-jackson-core:jar:3.3.3
  • io.micronaut.serde:micronaut-serde-api:jar:1.0.1
  • io.micronaut.serde:micronaut-serde-support:jar:1.0.1
  • javax.validation:validation-api:jar:2.0.1.Final (transitive from micronaut-runtime)
  • jakarta.annotation:jakarta.annotation-api:jar:2.0.0
  • io.swagger.core.v3:swagger-annotations:jar:2.1.12

any other module that wants to expose an enpoint:

  • com.fasterxml.jackson.core:jackson-annotations:jar:2.13.1
  • jakarta.annotation:jakarta.annotation-api:jar:2.0.0
  • jakarta.inject:jakarta.inject-api:jar:2.0.0:compile
  • io.swagger.core.v3:swagger-annotations:jar:2.1.12
  • io.micronaut.serde:micronaut-serde-jackson:jar:1.0.1
  • io.micronaut:micronaut-jackson-core:jar:3.3.3
  • io.micronaut:micronaut-json-core:jar:3.3.3
  • com.fasterxml.jackson.core:jackson-core:jar:2.13.1
  • io.micronaut:micronaut-context:jar:3.3.3
  • io.micronaut.serde:micronaut-serde-api:jar:1.0.1
  • io.micronaut.serde:micronaut-serde-support:jar:1.0.1
  • io.micronaut:micronaut-http:jar:3.4.1
  • io.micronaut:micronaut-inject:jar:3.4.1
  • io.micronaut:micronaut-http-server:jar:3.4.1
  • io.micronaut:micronaut-runtime:jar:3.4.1


NOTE: modules that expose api do not include micronaut-http-netty.


Info
titleJava code style changes

IMPORTANT: additional dependencies here mean that Java Code Style Best Practices (3d party libraries) are going to be adjusted: Micrionaut for REST, Swagger for Open API annotations, and Micronaut serde for REST serialization.

...

Modular architecture support

TBD

Implementation draft

Ignite modules can provide endpoints that will be included into the netty server by RestComponent at the build time. For example, the configuration module exposes /management/v1/configuration/node by declaring NodeConfigurationController and NodeConfigurationRestFactory. Then ignite-configuration module is added as a dependency for the ignite-rest module and NodeConfigurationController is added to @OpenAPIInclude annotation in RestComponent.


Implementation draft


Code Block
languagejava
titleRestComponent

@OpenAPIDefinition(
        info = @Info(
                title = "Ignite REST module",
                version = "3.0.0-alpha",
                license = @License(name = "Apache 2.0", url = "https://ignite.apache.org"),
                contact = @Contact(email = "user@ignite.apache.org")
        )
)
@OpenAPIInclude(classes = {ClusterConfigurationController.class, NodeConfigurationController.class}) // include to openapi specification
public class RestComponent implements IgniteComponent {
    // ...

    public RestComponent(List<MicronautFactory> micronautFactories, RestConfiguration restConfiguration) {
        // register all factories in micronaut context
    }

    @Override
    public void start() {
       // start REST server
    }


Code Block
languagejava
titleNodeConfigurationRestFactory
@Factory
public class NodeConfigurationRestFactory implements MicronautFactory {
  // define all beans needed 
}



Here is an example of GET /management/v1/configuration/node endpoint (defined in configuration module)

Code Block
languagejava
titleNodeConfigurationController
@Controller("/management/v1/configuration/node")
@Tag(name = "nodeConfiguration")
public class NodeConfigurationController { 

     //…

   @Operation(operationId = "getNodeConfiguration")
   @ApiResponse(responseCode = "200",
           content = @Content(mediaType = MediaType.TEXT_PLAIN,
                   schema = @Schema(type = "string")),
           description = "Whole node configuration")
   @Produces(MediaType.TEXT_PLAIN)
   @Get
   public String getConfiguration() {
       return …;
   }

...