GithubHelp home page GithubHelp logo

spring-cloud / spring-cloud-gateway Goto Github PK

View Code? Open in Web Editor NEW
4.5K 4.5K 3.3K 11.59 MB

An API Gateway built on Spring Framework and Spring Boot providing routing and more.

Home Page: http://cloud.spring.io

License: Apache License 2.0

Java 99.49% HTML 0.03% Kotlin 0.40% Lua 0.08%
api-gateway java microservices proxy reactor spring spring-boot spring-cloud spring-cloud-core

spring-cloud-gateway's People

Contributors

abelsromero avatar albertoimpl avatar altus34 avatar bijukunjummen avatar dennis-menge avatar dependabot[bot] avatar dlsrb6342 avatar eacdy avatar fitzoh avatar fombico avatar glenacota avatar gsealy avatar ilozano2 avatar making avatar marcingrzejszczak avatar martamedio avatar nkonev avatar olgamaciaszek avatar robertmcnees avatar ryanjbaxter avatar spencergibb avatar spring-builds avatar spring-operator avatar thirunar avatar tommas1988 avatar tony-clarke-amdocs avatar tysewyn avatar violetagg avatar weizibin avatar wilder avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spring-cloud-gateway's Issues

[Discussion] UI aggregator / gateway / fragment service

First at all that project seems really promising, far better then Zuul 1 version!

Last day I was talking with @dsyer about designing/prototyping a kind of layout service / ui composition service (whatever the name) inspired from Zalando Tailor project (from global Mosaic project - Microservices for the Frontend).

Goal of such service is to avoid getting a well designed and decoupled backend service used by a big monster monolith (SPA?) frontend. Each microservices could be responsible on their own frontend/ui fragments, layout service / ui composition service will be only responsible to aggregate every fragments using a base/master template and returns it.

diagram16

I wanted to develop by myself a kind of closely inspired fork to Zalando Tailor but using Java + Spring 5 + Spring Boot 2.0 + Reactor. Though I really need such piece of service on my current stack, at start that project was also a good candidate for training myself to Spring 5 + Spring Boot 2.0 + Reactor.

When I spoke that to @dsyer I also proposed an possible architecture based on Zalando one

diagram

And mine (Yes is a totally a clone of Zalando one :trollface: )(Attention is a prototype, any box is not necessary a dedicated services. Is more a logical view)

page-service2

At this point, @dsyer ask me why I have separated gateway and layout service. I don't really have a clear answer but in my mind, only reasons was separation of concerns and resilience (if layout service get down, you can continue using API). But I didn't think more.

That why I open you an issue (is more a discussion, I'm not asking feature request) to

  1. Have your feedback to such service in microservices/cloud architecture
  2. Your point about integrating it inside gateway or should be a dedicated services


Existing alternative or similar project to Zalando Tailor

Here some sources of inspirations about Microservices for Frontend topic:

Fail on client Error

Hi,

As it is, the default behaviour is to fail on client error (ie if the underlying service response is 4xx, the gateway will return a 500 Http error).

I had to modify the org.springframework.cloud.gateway.filter.NettyRoutingFilter class and add failOnClientError(false) to the HttpClientRequest creation (l.79).

I think the failOnClentError(false) should be the default behaviour (transparent gateway), or at least configurable.

Thanks for this awesome project, I'm looking forward to using it ( if you have an ETA, I'd be very pleased ;) )

Spring MVC/Servlet implementation

Would probably need a Servlet implementation of ServerWebExchange so that predicates and filters can be reused.

This was a bad idea, though I tried.

Allow modification of the response body

Hi,

I need to modify the body of both the request and the response (encryption/decryption).
As I see it, I can create a filter that sets a ServerHttpRequestDecorator in the exchange and override the getBody method, but I didn't find a way to do the same with the response. The WriteResponseFilter is the first filter and consequently the exchange used is the original exchange.
Would it be possible to add a ResponseBodyHandler interface to allow modifying the response body? Or did I overlook something?

Thanks in advance.

Unable to set default filters via configuration properties

In M1 it does not appear to be possible to add a default filter via configuration properties.
Given the following configuration:

spring:
  cloud:
    gateway:
      default-filters:
       - name: filter1
       - name: filter2

with a breakpoint on GatewayProperties::getDefaultFilters I always end up with a single RemoveNonProxyHeadersWebFilterFactory filter which is added via GatewayProperties::loadDefaults.

I can verify that filter1 and filter2 are being created by setting breakpoints in the constructor.

Add more filters

  • Add Request Header
  • Add Response Header
  • Set Request Header
  • Set Response Header
  • Remove Request Header
  • Remove Response Header
  • Rewrite Path
  • Set Path
  • Redirect To
  • Set HTTP Status
  • Hystrix
  • Ribbon (Via Spring Cloud LoadBalancerClient)
  • Set Query Param
  • Remove Query Param (Might take a PR in spring-framework, would make AddRequestParameter easier).
  • Request Size
  • Compress
  • Spring Retry
  • CORS
  • Tee (ala unix tee): send one request to two places, ignoring one response from skipper
  • Rate Limiting: token-bucket, rolling-rate-limiter (NodeJS/Redis), GCRA go, GCRA Java or here zuul-throttle filter
  • Simian Army Filters (latency, random text, bandwidth limits) #64
  • Versioning?

Update mvnw to 3.5.0

distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip

JDBC routes repository

Seems there is only memory based implementation now, would be great if it supports persistable repository.

Messaging support

A Route locator that looks up queues from kafka or the like and sends messages to the broker.

Metrics

Determine what metrics could be useful and define a strategy for exporting them using boots metrics apis

Add more predicates

  • Cookie
  • Header
  • Host
  • Method
  • Query
  • URL
  • After Date/Time
  • Before Date/Time
  • Between Date/Time
  • Source IP

Consider project name

My Top Choices

  • Conduit
  • Hub
  • Gateway

My Next Choices

  • Interchange
  • Junction
  • Influx
  • Ingress
  • Jetway
  • Onramp

Other Choices

  • Airlock
  • Passage (way)
  • Pipe
  • Turnstile
  • Highway
  • Router
  • Convergence

Aggregation Gateway Pattern / Batch request / multipart request

This is a feature request.

The Aggregation Gateway Pattern describes some kind of multi-request endpoint. Example:

Instead of calling GET http://gateway/foo and GET http://gateway/bar as two separate requests, there is an endpoint which can take a single request which contains multiple requests, processes them, and then returns a single response which contains the aggregated responses.

Maybe it's possible to implement this using multipart/mixed (which is basically the same as multipart/form-data but with slightly different semantics).

I'm not sure whether this already exists or if it's necessary at all when using HTTP/2.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.