skills/.system/guicedee-rest-client/SKILL.md
Annotation-driven REST client for GuicedEE using Vert.x 5 WebClient: @Endpoint declarations, RestClient<Send, Receive> injection, authentication strategies (Bearer, Basic, API Key), path parameters, environment variable overrides, package-level endpoints, and RestClientConfigurator SPI. Use when making outbound REST calls, configuring REST client endpoints, or wiring reactive HTTP clients with Guice injection.
npx skillsauth add guicedee/ai-rules guicedee-rest-clientInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Annotation-driven REST client using the Vert.x 5 WebClient, fully managed by GuicedEE.
Declare an @Endpoint on any RestClient<Send, Receive> field, add @Named, and inject — URL, HTTP method, authentication, timeouts, and connection options are all driven from the annotation. Every call returns a Uni<Receive> for fully reactive composition.
com.guicedee:rest-client dependency.module-info.java:
module my.app {
requires com.guicedee.rest.client;
opens my.app.clients to com.google.guice, com.guicedee.rest.client;
opens my.app.dto to com.fasterxml.jackson.databind;
}
@Endpoint:
public class UserService {
@Endpoint(url = "https://api.example.com/users", method = "POST",
security = @EndpointSecurity(value = SecurityType.Bearer,
token = "${API_TOKEN}"))
@Named("create-user")
private RestClient<CreateUserRequest, UserResponse> createUserClient;
public Uni<UserResponse> createUser(CreateUserRequest request) {
return createUserClient.send(request);
}
}
public class OrderService {
@Inject @Named("create-user")
private RestClient<CreateUserRequest, UserResponse> client;
}
client.send(); // no body
client.send(body); // with body
client.send(body, headers, queryParams); // with headers and query params
client.publish(body); // fire-and-forget (no response)
All methods return Uni<Receive>.
Use {paramName} placeholders in the endpoint URL:
@Endpoint(url = "https://api.example.com/users/{userId}", method = "GET")
@Named("get-user")
private RestClient<Void, UserResponse> getUserClient;
// Usage
getUserClient.pathParam("userId", "123").send();
| Strategy | Annotation |
|---|---|
| Bearer/JWT | @EndpointSecurity(value = SecurityType.Bearer, token = "${API_TOKEN}") |
| Basic | @EndpointSecurity(value = SecurityType.Basic, username = "user", password = "${PASSWORD}") |
| API Key | @EndpointSecurity(value = SecurityType.ApiKey, apiKeyName = "X-API-Key", apiKeyValue = "${API_KEY}") |
Declare a shared base URL on package-info.java:
@Endpoint(url = "http://localhost:8080/api",
options = @EndpointOptions(readTimeout = 1000))
package com.example.api;
Field-level URLs starting with / are appended to the package-level base URL.
Every annotation attribute can be overridden via REST_CLIENT_* environment variables without code changes.
IGuiceContext.instance().inject()
└─ RestClientPreStartup (scans for @Endpoint-annotated fields)
└─ RestClientBinder (binds RestClient instances per @Named endpoint)
├─ RestClientRegistry (metadata: URL, types, security, options)
├─ WebClient cache (one per endpoint)
└─ RestClientConfigurator SPI (custom WebClientOptions)
opens to com.google.guice and com.guicedee.rest.client.opens to com.fasterxml.jackson.databind.requires transitive com.guicedee.rest.client;.@Endpoint field is needed per named endpoint; other classes inject by @Named alone.RestClientConfigurator SPI implementations must be dual-registered for tests.development
Install Codex skills into $CODEX_HOME/skills from a curated list or a GitHub repo path. Use when a user asks to list installable skills, install a curated skill, or install a skill from another repo (including private repos).
tools
Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Codex's capabilities with specialized knowledge, workflows, or tool integrations.
development
WebAwesome icon integration for JWebMP — modern, open-source icon library. Provides 1,500+ icons with solid/regular styles, sizing, rotation, animation, and CSS utilities. Drop-in FontAwesome alternative with fresh designs. Use when working with WebAwesome icons, modern icon designs, or as FontAwesome alternative in JWebMP applications.
development
WebAwesome Pro integration for JWebMP with premium icons and features. Extends jwebmp-webawesome with additional styles, premium icons, and advanced features. Use when working with WebAwesome Pro icons or premium WebAwesome features in JWebMP applications.