-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Add Roadmap to Readme #1054
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Add Roadmap to Readme #1054
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,41 @@ | |
|
||
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). | ||
|
||
--- | ||
# Roadmap | ||
## Feign 11 and beyond | ||
Making _API_ clients easier | ||
|
||
Short Term - What we're working on now. ⏰ | ||
--- | ||
* Response Caching | ||
* 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. | ||
* Support in-memory caching and external cache implementations (EhCache, Google, Spring, etc...) | ||
* Complete URI Template expression support | ||
* Support [level 1 through level 4](https://tools.ietf.org/html/rfc6570#section-1.2) URI template expressions. | ||
* Use [URI Templates TCK](https://github.com/uri-templates/uritemplate-test) to verify compliance. | ||
* `Logger` API refactor | ||
* 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. | ||
* `Retry` API refactor | ||
* 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** | ||
|
||
Medium Term - What's up next. ⏲ | ||
--- | ||
* Metric API | ||
* 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. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I was more thinking about timers and meters, not tracing, which is a nice to have too |
||
* Async execution support via `CompletableFuture` | ||
* 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. | ||
* Reactive execution support via [Reactive Streams](https://www.reactive-streams.org/) | ||
* For JDK 9+, consider a native implementation that uses `java.util.concurrent.Flow`. | ||
* Support for [Project Reactor](https://projectreactor.io/) and [RxJava 2+](https://github.com/ReactiveX/RxJava) implementations on JDK 8. | ||
|
||
Long Term - The future ☁️ | ||
--- | ||
* Additional Circuit Breaker Support. | ||
* Support additional Circuit Breaker implementations like [Resilience4J](https://resilience4j.readme.io/) and Spring Circuit Breaker | ||
|
||
--- | ||
|
||
### Why Feign and not X? | ||
|
||
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. | ||
|
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you think work mention that we will be breaking feign internal API? Which may affect people
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, should we have a compromise of what we are not going to break?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I mention the breaking changes it in the Async section. Should I make it more prominent?
My thoughts are to defer any information on what is going to break and not going to break until we really dig into it. Anything we put out there now may be interpreted as fact when it's not.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I fat finger the resolve conversation button.
Anyway, probably the retry changes will break some API too.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's probably true. I'll update it.