Micronaut für zeitgemäße Webanwendungen

Seite 2: HTTP-Client und -Server

Inhaltsverzeichnis

Micronaut bietet sowohl einen HTTP-Server als auch einen HTTP-Client. Der Server soll es einfach machen, APIs zu veröffentlichen, die Clients nutzen können. Entwickler können Clients deklarativ mit Annotationen erstellen, woraufhin sie zur Kompilierzeit implementiert werden.

Ein HTTP-Client für den Zugriff mit HTTP-GET auf eine API "/workshops/{workshopId}"[i], wobei [i]"workshopId" ein dynamischer Pfadparameter ist, der an einen gleichnamigen Methodenparameter gebunden ist, sieht folgendermaßen aus:

@Client("/workshops")
public interface WorkshopsClient {
@Get("/{workshopId}")
Single<Workshop> workshopById(@NotBlank String workshopId);
}

Die Interpretation des ReactiveX-Typs Single (io.reactivex.Single) aus RxJava erfolgt automatisch innerhalb des Micronaut Frameworks.

Zur Kompilierzeit erzeugt Micronaut aus dem Beispiel auf Basis der AOP-Annotationen eine entsprechende Client-Klasse. Mit Dependency Injection kann man den Client über das Interface wie folgt binden, beispielsweise in einem Service:

@Singleton
public class WorkshopsService {
private final WorkshopsClient workshopsClient;

public WorkshopsService(WorkshopsClient workshopsClient) {
this.workshopsClient = workshopsClient;
}

Single<Workshop> workshopById(String workshopId) {
return workshopsClient.workshopById(workshopId);
}
}

Es sei angemerkt, dass es diverse Annotationen für die Erzeugung von Beans mit unterschiedlichen Scopes (@Singleton, @Prototype, @Refreshable etc.) gibt. Die aus JSR 330 bekannten Annotationen @Inject, @Named und @Qualifier sind unterstützt für die Dependency Injection per Konstruktor, Feld, JavaBean-Property- und Methodenparameter. Injection von Beans über den Konstruktor kann sogar ohne @Inject-Annotation, wie in obigem Beispiel gezeigt, erfolgen.

Die Referenzierung und Bindung von Konfigurationswerten (per @Value), typsichere Definition von Konfigurationen (per @ConfigurationProperties), JSR-380-basierte Bean Validation 2 von Properties per Hibernate Validation (zum Beispiel @NotNull, @Size, @Min, @Max), Bean Configurations (@Configuration) und Conditional Beans (@Requires) sind gleich oder ähnlich zu den von Spring Boot bekannten Konfigurationsmöglichkeiten.

Mit der @Scheduled-Annotation können Entwickler Methoden annotieren, die Aufgaben innerhalb eines bestimmten Intervalls (Rate), nach einer definierten Verzögerung (Delay) oder zu einem bestimmten Zeitpunkt (Cron) starten sollen:

@Scheduled(
initialDelay="${scheduling.mytask.initialdelay:1m}",
fixedRate="${scheduling.mytask.rate:5m}"
)
void scheduledTask() { ... }

Das Beispiel führt nach einer einminütigen Verzögerung (initialDelay) in einer festgelegten Rate von fünf Minuten (fixedRate) die Methode scheduledTask aus, sofern die Properties scheduling.mytask.initialdelay und scheduling.mytask.rate keine abweichenden Werte in einer separaten Konfiguration festgelegt haben.

Der HTTP-Server von Micronaut erlaubt das Senden von Server Sent Events (SSE) über eine Event API. Sie ermöglichen es dem Client (zum Beispiel Webbrowser), Updates vom Server zu erhalten, ohne periodisch nach ihnen zu fragen.

Ebenso unterstützt Micronaut WebSocket-Clients und -Server nativ. Per WebSocketBroadcaster sowie den Annotationen zur Definition des Serverendpunkts @ServerWebSocket und der WebSocket Callbacks @OnOpen, @OnMessage, @OnClose können Clients die WebSocketSession verwalten. Mit der @ClientWebSocket-Annotation und dem WebSocketClient-Interface kann man einen WebSocket-Client implementieren.

Micronaut unterstützt eine Reihe von Authentifizierungsstrategien wie Basic Auth, Session-basierte Authentifizierung und LDAP. Ebenso ist eine Authentifizierung per JSON Web Tokens (JWT) denkbar. Die JWT-Authentifizierung erfolgt in nur wenigen Schritten, die mit dem Hinzufügen einer Abhängigkeit zum Modul io.micronaut:security-jwt und dem Aktivieren der Option micronaut.security.token.jwt.enabled per YAML beginnen:

micronaut:
security:
enabled: true
token:
jwt:
enabled: true
signatures:
secret:
generator:
secret: ...
jws-algorithm: HS256

Der Micronaut Guide beschreibt das Auslesen von JWT Tokens, deren Generierung und Validierung im Detail.