Page properties | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Goals:
- Simplify how remoteable interface proxies are exposed in the server and used in the clients.
User interaction and design
The goal on the server side is to simply map a method URL to a method using the existing @RestMethod annotation. A new "PROXY" method name is used in place of the usual GET/PUT/POST/DELETE...
...
@Remoteable(path="/proxy/*")
public IAddressBook getProxy() {
return addressBookImpl;
}
...
- Allow interface proxies to be defined against 3rd-party REST interfaces.
- Allow interface proxies to pass Java method parameters as GET parameters.
New annotations:
- @Remotable
Annotation applied to interface proxy classes. - path(String), optional
The absolute or relative path to the REST service.
When relative path is specified, it's relative to the root-url defined on the RestClient.
- expose(String), optional
Defines the methods on the interface that are visible.
Possible values:- "ALL" (default) - All methods defined on the interface are visible.
- "REMOTEABLE" - Only methods marked with the @RemoteableMethod annotation are visible.
- @RemoteableMethod
Annotation applied to Java methods on interface proxy classes.- path(String), optional
The path to the REST service for this Java method.
The default value is the Java method name itself. - httpMethod(String), optional
Defines whether to use GET or POST for the method call.
Possible values:- "POST" (default) - Parameters are serialized using the serializer registered with the RestClient.
- "GET" - Parameters are serialized using the UrlEncodingSerializer registered with the RestClient.
- path(String), optional
Example:
@Remoteable(url="/myremoteableinterface") |
The code above causes the following HTTP request:
HTTP GET http://hostname/myremoteableinterface/method1?bar=123&baz=foo&qux=(...) |
...
On the client side, the proxy is retrieved using the RestClient class:
IAddressBook ab = |
Optionally, the @Remoteable annotation can be used to specify the URL on the client side....
@Remoteable(path="/addressBook/proxy")
public interface IAddressBook {
...
}
...
// or a new @RestProxy annotation with no path?
@RestProxy
public IAddressBook getProxy() {
...
}
IAddressBook ab =
new RestClientBuilder()
.rootUrl(microserviceURI)
.getRemoteableProxy(IAddressBook.class);
Questions...
...