Skip to content

HTTP Client Module

The HTTP Client module generates typed HTTP clients from annotated partial classes — producing a complete effects-native pipeline: client implementation, interface, capability interface, Eff-wrapped effects module, test client, and DI registration.

Quick Start

using Deepstaging.HttpClient;

[HttpClient<ApiConfig>(BaseAddress = "https://api.example.com")]
[BearerAuth]
public partial class UsersClient
{
    [Get("/users/{id}")]
    public partial Task<User> GetUser(int id);

    [Post("/users")]
    public partial Task<User> CreateUser([Body] CreateUserRequest request);

    [Get("/users")]
    public partial Task<List<User>> ListUsers(
        [Query] int page,
        [Query("per_page")] int perPage,
        [Header("X-Request-Id")] string requestId);

    [Delete("/users/{id}")]
    public partial Task<Unit> DeleteUser(int id);
}

The generator produces:

  • Client implementationHttpClient-backed methods with JSON or form-encoded serialization
  • IUsersClient interface — for dependency injection and testing
  • IHasUsersClient capability — runtime capability interface for effects composition
  • UsersClientEffects — Eff-wrapped methods with activity tracing and error mapping
  • TestUsersClient — test double with call recording and configurable responses
  • UsersClientRegistration — DI registration with IHttpClientFactory

STJ Source-Generated Serialization

Pass a JsonSerializerContext type to use source-generated JSON serialization:

[HttpClient(JsonContext = typeof(AppJsonContext))]
public partial class OrderClient
{
    [Get("/api/orders/{id}")]
    public partial Task<OrderDto> GetOrder(int id);
}

The generated client uses AppJsonContext.Default.Options for all JSON serialization and deserialization.

Learn More

Page Description
Attributes [HttpClient], HTTP verbs, parameter and auth attributes
Generated Code Interfaces, request types, capability, effects, DI registration
Effects Effects-native HTTP calls with activity tracing
Testing Test clients with call recording
Authentication [BearerAuth], [ApiKeyAuth], [BasicAuth] configuration

Diagnostics

ID Severity Description
DSHTTP01 Error HttpClient class must be partial
DSHTTP02 Error HTTP method must be partial
DSHTTP04 Error HTTP path must not be empty
DSHTTP05 Error [Form] and [Body] cannot be combined on the same method