REST Proxies
The juneau-rest-client library can also be used to define interface proxies against 3rd-party REST interfaces.
This is an extremely powerful feature that allows you to quickly define easy-to-use interfaces against
virtually any REST interface.
Remote resources are instantiated using one of the following methods:
- {@link oajrc.RestClient}
- {@link oajrc.RestClient#getRemote(Class) getRemote(Class)}
- {@link oajrc.RestClient#getRemote(Class,Object) getRemote(Class,Object)}
- {@link oajrc.RestClient#getRemote(Class,Object,Serializer,Parser) getRemote(Class,Object,Serializer,Parser)}
Annotations are used on the interface and interface methods to specify how to convert input and output to HTTP headers, query parameters, form
post parameters, or request/response bodies.
- {@link oaj.http.remote}
- {@link oaj.http.remote.Remote}
- {@link oaj.http.remote.RemoteMethod}
- {@link oaj.http.annotation}
- {@link oaj.http.annotation.Body}
- {@link oaj.http.annotation.Header}
- {@link oaj.http.annotation.FormData}
- {@link oaj.http.annotation.Query}
- {@link oaj.http.annotation.Path}
- {@link oaj.http.annotation.Request}
- {@link oaj.http.annotation.Response}
@Remote(path="/petstore")
public interface PetStore {
@RemoteMethod(httpMethod=POST, path="/pets")
String addPet(
@Body CreatePet pet,
@Header("E-Tag") UUID etag,
@Query("debug") boolean debug
);
}
// Use a RestClient with default Simple JSON support.
try (RestClient client = RestClient.create().simpleJson().build()) {
PetStore store = client.getRemote(PetStore.class, "http://localhost:10000");
CreatePet pet = new CreatePet("Fluffy", 9.99);
String response = store.createPet(pet, UUID.randomUUID(), true);
}
The call above translates to the following REST call:
POST http://localhost:10000/petstore/pets?debug=true HTTP/1.1
Accept: application/json
Content-Type: application/json
E-Tag: 475588d4-0b27-4f56-9296-cc683251d314
{
name: 'Fluffy',
price: 9.99
}