|
6 | 6 |
|
7 | 7 | Feign is a Java to HTTP client binder inspired by [Retrofit](https://github.com/square/retrofit), [JAXRS-2.0](https://jax-rs-spec.java.net/nonav/2.0/apidocs/index.html), and [WebSocket](http://www.oracle.com/technetwork/articles/java/jsr356-1937161.html). Feign's first goal was reducing the complexity of binding [Denominator](https://github.com/Netflix/Denominator) uniformly to HTTP APIs regardless of [ReSTfulness](http://www.slideshare.net/adrianfcole/99problems).
|
8 | 8 |
|
| 9 | +--- |
| 10 | +# Roadmap |
| 11 | +## Feign 11 and beyond |
| 12 | +Making _API_ clients easier |
| 13 | + |
| 14 | +Short Term - What we're working on now. ⏰ |
| 15 | +--- |
| 16 | +* Response Caching |
| 17 | + * Support caching of api responses. Allow for user's to define under what conditions a response is eligible for caching and what type of caching mechanism should be used. |
| 18 | + * Support in-memory caching and external cache implementations (EhCache, Google, Spring, etc...) |
| 19 | +* Complete URI Template expression support |
| 20 | + * Support [level 1 through level 4](https://tools.ietf.org/html/rfc6570#section-1.2) URI template expressions. |
| 21 | + * Use [URI Templates TCK](https://github.com/uri-templates/uritemplate-test) to verify compliance. |
| 22 | +* `Logger` API refactor |
| 23 | + * Refactor the `Logger` API to adhere closer to frameworks like SLF4J providing a common mental model for logging within Feign. This model will be used by Feign itself throughout and provide clearer direction on how the `Logger` will be used. |
| 24 | +* `Retry` API refactor |
| 25 | + * Refactor the `Retry` API to support user-supplied conditions and better control over back-off policies. **This may result in non-backward-compatible breaking changes** |
| 26 | + |
| 27 | +Medium Term - What's up next. ⏲ |
| 28 | +--- |
| 29 | +* Metric API |
| 30 | + * Provide a first-class Metrics API that user's can tap into to gain insight into the request/response lifecycle. Possibly provide better [OpenTracing](https://opentracing.io/) support. |
| 31 | +* Async execution support via `CompletableFuture` |
| 32 | + * Allow for `Future` chaining and executor management for the request/response lifecycle. **Implementation will require non-backward-compatible breaking changes**. However this feature is required before Reactive execution can be considered. |
| 33 | +* Reactive execution support via [Reactive Streams](https://www.reactive-streams.org/) |
| 34 | + * For JDK 9+, consider a native implementation that uses `java.util.concurrent.Flow`. |
| 35 | + * Support for [Project Reactor](https://projectreactor.io/) and [RxJava 2+](https://github.com/ReactiveX/RxJava) implementations on JDK 8. |
| 36 | + |
| 37 | +Long Term - The future ☁️ |
| 38 | +--- |
| 39 | +* Additional Circuit Breaker Support. |
| 40 | + * Support additional Circuit Breaker implementations like [Resilience4J](https://resilience4j.readme.io/) and Spring Circuit Breaker |
| 41 | + |
| 42 | +--- |
| 43 | + |
9 | 44 | ### Why Feign and not X?
|
10 | 45 |
|
11 | 46 | Feign uses tools like Jersey and CXF to write java clients for ReST or SOAP services. Furthermore, Feign allows you to write your own code on top of http libraries such as Apache HC. Feign connects your code to http APIs with minimal overhead and code via customizable decoders and error handling, which can be written to any text-based http API.
|
|
0 commit comments