The module sda-commons-starter
provides all basics required to build a service for the SDA Platform with
Dropwizard.
Apps built with the SdaPlatformBundle
automatically contain
- Support for environment variables in configuration files and default console appender configuration
- Trace Token support
- a tolerant
ObjectMapper
, HAL support and a field filter - Security checks on startup
- Authentication support
- Prometheus metrics
- OpenApi documentation
- Open Telemetry
- support for the Metadata Context
They may be configured easily to
Using the SdaPlatformBundle
is the easiest
and fastest way to create a service for the SDA Platform.
To bootstrap a Dropwizard application for the SDA Platform only the
SdaPlatformBundle
has to be added. The
API should be documented with Swagger annotations:
import io.dropwizard.core.Application;
import io.dropwizard.core.setup.Bootstrap;
import io.dropwizard.core.setup.Environment;
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import SdaPlatformBundle;
import SdaPlatformConfiguration;
@OpenAPIDefinition(info = @Info(
title = "My First App",
description =
"The description of my first application",
version = "1.0.0",
contact =
@Contact(
name = "John Doe",
email = "info@example.com",
url = "j.doe@example.com"),
license = @License(name = "Sample License")))
public class MyFirstApp extends Application<SdaPlatformConfiguration> {
public static void main(String[] args) throws Exception {
new MyFirstApp().run(args);
}
@Override
public void initialize(Bootstrap<SdaPlatformConfiguration> bootstrap) {
bootstrap.addBundle(SdaPlatformBundle.builder()
.usingSdaPlatformConfiguration()
// more Open API data that may also be added with annotations
.addOpenApiResourcePackageClass(this.getClass())
// or use an existing OpenApi definition
.withExistingOpenAPI("openApiJsonOrYaml")
.build());
}
@Override
public void run(SdaPlatformConfiguration configuration, Environment environment) {
environment.jersey().register(MyFirstEndpoint.class);
}
}
The SdaPlatformConfiguration
may be
extended to add application specific configuration properties.
The config.yaml
of the
SdaPlatformConfiguration
supports
configuration of authentication and CORS
additionally to the defaults of Dropwizard's Configuration
:
# See sda-commons-server-auth
auth:
disableAuth: ${DISABLE_AUTH:-false}
leeway: ${AUTH_LEEWAY:-0}
keys: ${AUTH_KEYS:-[]}
opa:
disableOpa: ${OPA_DISABLE:-false}
baseUrl: ${OPA_URL:-http://localhost:8181}
policyPackage: ${OPA_POLICY_PACKAGE:-<your_package>}
readTimeout: ${OPA_READ_TIMEOUT:-500}
# See sda-commons-server-cors
cors:
# List of origins that are allowed to use the service. "*" allows all origins
allowedOrigins:
- "*"
# Alternative: If the origins should be restricted, you should add the pattern
# allowedOrigins:
# - https://*.sdase.com
# - https://*test.sdase.com
# To use configurable patterns per environment the Json in Yaml syntax may be used with an environment placeholder:
# allowedOrigins: ${CORS_ALLOWED_ORIGINS:-["*"]}
By using .usingSdaPlatformConfiguration()
or .usingSdaPlatformConfiguration(MyCustomConfiguration.class)
the authorization including the open policy agent are automatically enabled as well as the cors settings.
Instead of .usingSdaPlatformConfiguration()
and .usingSdaPlatformConfiguration(MyCustomConfiguration.class)
, the configuration may be fully customized using
.usingCustomConfig(MyCustomConfiguration.class)
to support configurations that do not extend
SdaPlatformConfiguration
. This may
also be needed to disable some features of the starter module or add special features such as
Authorization.
Please note that .withOpaAuthorization(MyConfiguration::getAuth, MyConfiguration::getOpa)
will configure the AuthBundle
to use .withExternalAuthorization()
. Please read the
documentation of the Auth Bundle carefully before
using this option.