Reactive types, HTTP clients, and non-blocking patterns.
@Controller("/users")
public class UserController {
@Get("/{id}")
public Mono<User> findById(Long id) {
return userService.findById(id);
}
@Get(produces = MediaType.TEXT_EVENT_STREAM)
public Flux<User> stream() {
return userService.streamAll();
}
}
@Client("order-service")
public interface OrderClient {
@Get("/orders/{userId}")
Flux<Order> getOrders(Long userId);
@Post("/orders")
Mono<Order> createOrder(@Body CreateOrderRequest request);
}
@Singleton
public class ExternalApiService {
private final HttpClient httpClient;
public ExternalApiService(@Client("https://api.external.com") HttpClient httpClient) {
this.httpClient = httpClient;
}
public Mono<ExternalData> fetchData(String id) {
return Mono.from(httpClient.retrieve(
HttpRequest.GET("/data/" + id),
ExternalData.class
));
}
}
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer