avaje/avaje-http-client

ENH: Add HttpClientContext.create() method to obtain a http client implementation

rbygrave opened this issue · 0 comments

1. Define a @Client interface

@Client
@Path("users")
public interface GitHubUsers {

  @Get("{user}/repos")
  List<Repo> listRepos(String user);

  ...
}

2. avaje-http-client-generator

Use avaje-http-client-generator to generate a client that implements the interface. It uses @Client [or @Client.Import] annotation to find the interfaces that it should generate the http client code for.

3. HttpClientContext.create(...)

    final HttpClientContext clientContext =
      HttpClientContext.newBuilder()
        .withBaseUrl("https://api.github.com")
        .withRequestListener(new RequestLogger())
        .withBodyAdapter(new JacksonBodyAdapter(objectMapper))
        .build();


    GitHubUsers client = clientContext.create(GitHubUsers.class);

    final List<Repo> repos = client.listRepos("rbygrave");