| Modifier and Type | Class and Description |
|---|---|
class |
AnnotatedHttpService
An
HttpService which is defined by a Path or HTTP method annotations. |
| Modifier and Type | Method and Description |
|---|---|
HttpService |
AnnotatedHttpServiceElement.buildSafeDecoratedService(Function<? super HttpService,? extends HttpService> localDecorator)
Builds a safe decorated
HttpService by wrapping the localDecorator with
exceptionHandlingDecorators. |
| Modifier and Type | Method and Description |
|---|---|
Function<? super HttpService,? extends HttpService> |
AnnotatedHttpServiceElement.decorator()
Returns the decorator of the
AnnotatedHttpService which will be evaluated at service
registration time. |
Function<? super HttpService,? extends HttpService> |
AnnotatedHttpServiceElement.decorator()
Returns the decorator of the
AnnotatedHttpService which will be evaluated at service
registration time. |
Function<? super HttpService,? extends HttpService> |
AnnotatedHttpService.exceptionHandlingDecorator()
Returns a
Function which produces an HttpService wrapped with an
ExceptionFilteredHttpResponseDecorator. |
Function<? super HttpService,? extends HttpService> |
AnnotatedHttpService.exceptionHandlingDecorator()
Returns a
Function which produces an HttpService wrapped with an
ExceptionFilteredHttpResponseDecorator. |
| Modifier and Type | Method and Description |
|---|---|
HttpService |
AnnotatedHttpServiceElement.buildSafeDecoratedService(Function<? super HttpService,? extends HttpService> localDecorator)
Builds a safe decorated
HttpService by wrapping the localDecorator with
exceptionHandlingDecorators. |
HttpService |
AnnotatedHttpServiceElement.buildSafeDecoratedService(Function<? super HttpService,? extends HttpService> localDecorator)
Builds a safe decorated
HttpService by wrapping the localDecorator with
exceptionHandlingDecorators. |
| Modifier and Type | Interface and Description |
|---|---|
interface |
HttpServiceWithRoutes
An interface that enables getting all the
Routes where an HttpService should be bound. |
interface |
TransientHttpService
An
HttpService that handles transient requests, for example, health check requests. |
| Modifier and Type | Class and Description |
|---|---|
class |
AbstractHttpService
A skeletal
HttpService for easier HTTP service implementation. |
class |
RedirectService
An
HttpService that sends a redirect response such as "307 Temporary Redirect". |
class |
SimpleDecoratingHttpService
An
HttpService that decorates another HttpService. |
| Modifier and Type | Method and Description |
|---|---|
default HttpService |
HttpService.decorate(DecoratingHttpServiceFunction function)
Creates a new
HttpService that decorates this HttpService with the specified
DecoratingHttpServiceFunction. |
HttpService |
ServiceRequestContextWrapper.service() |
HttpService |
ServiceRequestContext.service()
Returns the
HttpService that is handling the current Request. |
HttpService |
ServiceConfig.service()
Returns the
HttpService. |
HttpService |
DefaultServiceRequestContext.service() |
| Modifier and Type | Method and Description |
|---|---|
VirtualHostBuilder |
VirtualHostServiceBindingBuilder.build(HttpService service)
Sets the
HttpService and returns the VirtualHostBuilder that this
VirtualHostServiceBindingBuilder was created from. |
ServerBuilder |
ServiceBindingBuilder.build(HttpService service)
Sets the
HttpService and returns the ServerBuilder that this
ServiceBindingBuilder was created from. |
List<VirtualHost> |
ServerConfig.findVirtualHosts(HttpService service)
|
HttpResponse |
DecoratingHttpServiceFunction.serve(HttpService delegate,
ServiceRequestContext ctx,
HttpRequest req)
Serves an incoming
HttpRequest. |
ServiceRequestContextBuilder |
ServiceRequestContextBuilder.service(HttpService service)
Sets the
Service that handles the request. |
VirtualHostBuilder |
VirtualHostBuilder.service(Route route,
HttpService service)
Binds the specified
HttpService at the specified Route. |
ServerBuilder |
ServerBuilder.service(Route route,
HttpService service)
|
VirtualHostBuilder |
VirtualHostBuilder.service(String pathPattern,
HttpService service)
Binds the specified
HttpService at the specified path pattern. e.g. |
ServerBuilder |
ServerBuilder.service(String pathPattern,
HttpService service)
Binds the specified
HttpService at the specified path pattern of the default VirtualHost. |
VirtualHostBuilder |
VirtualHostBuilder.serviceAt(String pathPattern,
HttpService service)
Deprecated.
Use
VirtualHostBuilder.service(String, HttpService) instead. |
ServerBuilder |
ServerBuilder.serviceAt(String pathPattern,
HttpService service)
Deprecated.
Use
ServerBuilder.service(String, HttpService) instead. |
VirtualHostBuilder |
VirtualHostBuilder.serviceUnder(String pathPrefix,
HttpService service)
Binds the specified
HttpService under the specified directory. |
ServerBuilder |
ServerBuilder.serviceUnder(String pathPrefix,
HttpService service)
Binds the specified
HttpService under the specified directory of the default VirtualHost. |
| Modifier and Type | Method and Description |
|---|---|
VirtualHostBuilder |
VirtualHostBuilder.annotatedService(Object service,
Function<? super HttpService,? extends HttpService> decorator,
Object... exceptionHandlersAndConverters)
Binds the specified annotated service object under the path prefix
"/". |
VirtualHostBuilder |
VirtualHostBuilder.annotatedService(Object service,
Function<? super HttpService,? extends HttpService> decorator,
Object... exceptionHandlersAndConverters)
Binds the specified annotated service object under the path prefix
"/". |
ServerBuilder |
ServerBuilder.annotatedService(Object service,
Function<? super HttpService,? extends HttpService> decorator,
Object... exceptionHandlersAndConverters)
Binds the specified annotated service object under the path prefix
"/". |
ServerBuilder |
ServerBuilder.annotatedService(Object service,
Function<? super HttpService,? extends HttpService> decorator,
Object... exceptionHandlersAndConverters)
Binds the specified annotated service object under the path prefix
"/". |
VirtualHostBuilder |
VirtualHostBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Iterable<?> exceptionHandlersAndConverters)
Binds the specified annotated service object under the specified path prefix.
|
VirtualHostBuilder |
VirtualHostBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Iterable<?> exceptionHandlersAndConverters)
Binds the specified annotated service object under the specified path prefix.
|
ServerBuilder |
ServerBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Iterable<?> exceptionHandlersAndConverters)
Binds the specified annotated service object under the specified path prefix.
|
ServerBuilder |
ServerBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Iterable<?> exceptionHandlersAndConverters)
Binds the specified annotated service object under the specified path prefix.
|
VirtualHostBuilder |
VirtualHostBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Iterable<? extends ExceptionHandlerFunction> exceptionHandlerFunctions,
Iterable<? extends RequestConverterFunction> requestConverterFunctions,
Iterable<? extends ResponseConverterFunction> responseConverterFunctions)
Binds the specified annotated service object under the specified path prefix.
|
VirtualHostBuilder |
VirtualHostBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Iterable<? extends ExceptionHandlerFunction> exceptionHandlerFunctions,
Iterable<? extends RequestConverterFunction> requestConverterFunctions,
Iterable<? extends ResponseConverterFunction> responseConverterFunctions)
Binds the specified annotated service object under the specified path prefix.
|
ServerBuilder |
ServerBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Iterable<? extends ExceptionHandlerFunction> exceptionHandlerFunctions,
Iterable<? extends RequestConverterFunction> requestConverterFunctions,
Iterable<? extends ResponseConverterFunction> responseConverterFunctions)
Binds the specified annotated service object under the specified path prefix.
|
ServerBuilder |
ServerBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Iterable<? extends ExceptionHandlerFunction> exceptionHandlerFunctions,
Iterable<? extends RequestConverterFunction> requestConverterFunctions,
Iterable<? extends ResponseConverterFunction> responseConverterFunctions)
Binds the specified annotated service object under the specified path prefix.
|
VirtualHostBuilder |
VirtualHostBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Object... exceptionHandlersAndConverters)
Binds the specified annotated service object under the specified path prefix.
|
VirtualHostBuilder |
VirtualHostBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Object... exceptionHandlersAndConverters)
Binds the specified annotated service object under the specified path prefix.
|
ServerBuilder |
ServerBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Object... exceptionHandlersAndConverters)
Binds the specified annotated service object under the specified path prefix.
|
ServerBuilder |
ServerBuilder.annotatedService(String pathPrefix,
Object service,
Function<? super HttpService,? extends HttpService> decorator,
Object... exceptionHandlersAndConverters)
Binds the specified annotated service object under the specified path prefix.
|
VirtualHostBuilder |
VirtualHostDecoratingServiceBindingBuilder.build(Function<? super HttpService,? extends HttpService> decorator)
Sets the
decorator and returns VirtualHostBuilder that this
VirtualHostDecoratingServiceBindingBuilder was created from. |
VirtualHostBuilder |
VirtualHostDecoratingServiceBindingBuilder.build(Function<? super HttpService,? extends HttpService> decorator)
Sets the
decorator and returns VirtualHostBuilder that this
VirtualHostDecoratingServiceBindingBuilder was created from. |
ServerBuilder |
DecoratingServiceBindingBuilder.build(Function<? super HttpService,? extends HttpService> decorator)
Sets the
decorator and returns ServerBuilder that this
DecoratingServiceBindingBuilder was created from. |
ServerBuilder |
DecoratingServiceBindingBuilder.build(Function<? super HttpService,? extends HttpService> decorator)
Sets the
decorator and returns ServerBuilder that this
DecoratingServiceBindingBuilder was created from. |
default <R extends Service<R_I,R_O>,R_I extends Request,R_O extends Response> |
HttpService.decorate(Function<? super HttpService,R> decorator)
|
VirtualHostServiceBindingBuilder |
VirtualHostServiceBindingBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator) |
VirtualHostServiceBindingBuilder |
VirtualHostServiceBindingBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator) |
VirtualHostBuilder |
VirtualHostBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator)
Decorates all
HttpServices with the specified decorator. |
VirtualHostBuilder |
VirtualHostBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator)
Decorates all
HttpServices with the specified decorator. |
VirtualHostAnnotatedServiceBindingBuilder |
VirtualHostAnnotatedServiceBindingBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator) |
VirtualHostAnnotatedServiceBindingBuilder |
VirtualHostAnnotatedServiceBindingBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator) |
ServiceBindingBuilder |
ServiceBindingBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator) |
ServiceBindingBuilder |
ServiceBindingBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator) |
ServerBuilder |
ServerBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator)
Decorates all
HttpServices with the specified decorator. |
ServerBuilder |
ServerBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator)
Decorates all
HttpServices with the specified decorator. |
AnnotatedServiceBindingBuilder |
AnnotatedServiceBindingBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator) |
AnnotatedServiceBindingBuilder |
AnnotatedServiceBindingBuilder.decorator(Function<? super HttpService,? extends HttpService> decorator) |
VirtualHostBuilder |
VirtualHostBuilder.decorator(Route route,
Function<? super HttpService,? extends HttpService> decorator)
|
VirtualHostBuilder |
VirtualHostBuilder.decorator(Route route,
Function<? super HttpService,? extends HttpService> decorator)
|
ServerBuilder |
ServerBuilder.decorator(Route route,
Function<? super HttpService,? extends HttpService> decorator)
Decorates
HttpServices with the specified Route. |
ServerBuilder |
ServerBuilder.decorator(Route route,
Function<? super HttpService,? extends HttpService> decorator)
Decorates
HttpServices with the specified Route. |
VirtualHostBuilder |
VirtualHostBuilder.decorator(String pathPattern,
Function<? super HttpService,? extends HttpService> decorator)
|
VirtualHostBuilder |
VirtualHostBuilder.decorator(String pathPattern,
Function<? super HttpService,? extends HttpService> decorator)
|
ServerBuilder |
ServerBuilder.decorator(String pathPattern,
Function<? super HttpService,? extends HttpService> decorator)
|
ServerBuilder |
ServerBuilder.decorator(String pathPattern,
Function<? super HttpService,? extends HttpService> decorator)
|
VirtualHostBuilder |
VirtualHostBuilder.decoratorUnder(String prefix,
Function<? super HttpService,? extends HttpService> decorator)
Decorates
HttpServices under the specified directory. |
VirtualHostBuilder |
VirtualHostBuilder.decoratorUnder(String prefix,
Function<? super HttpService,? extends HttpService> decorator)
Decorates
HttpServices under the specified directory. |
ServerBuilder |
ServerBuilder.decoratorUnder(String prefix,
Function<? super HttpService,? extends HttpService> decorator)
Decorates
HttpServices under the specified directory. |
ServerBuilder |
ServerBuilder.decoratorUnder(String prefix,
Function<? super HttpService,? extends HttpService> decorator)
Decorates
HttpServices under the specified directory. |
VirtualHostBuilder |
VirtualHostBuilder.service(HttpServiceWithRoutes serviceWithRoutes,
Iterable<Function<? super HttpService,? extends HttpService>> decorators)
Decorates and binds the specified
HttpServiceWithRoutes at multiple Routes
of the default VirtualHost. |
VirtualHostBuilder |
VirtualHostBuilder.service(HttpServiceWithRoutes serviceWithRoutes,
Iterable<Function<? super HttpService,? extends HttpService>> decorators)
Decorates and binds the specified
HttpServiceWithRoutes at multiple Routes
of the default VirtualHost. |
ServerBuilder |
ServerBuilder.service(HttpServiceWithRoutes serviceWithRoutes,
Iterable<Function<? super HttpService,? extends HttpService>> decorators)
Decorates and binds the specified
HttpServiceWithRoutes at multiple Routes
of the default VirtualHost. |
ServerBuilder |
ServerBuilder.service(HttpServiceWithRoutes serviceWithRoutes,
Iterable<Function<? super HttpService,? extends HttpService>> decorators)
Decorates and binds the specified
HttpServiceWithRoutes at multiple Routes
of the default VirtualHost. |
| Constructor and Description |
|---|
SimpleDecoratingHttpService(HttpService delegate)
Creates a new instance that decorates the specified
HttpService. |
| Modifier and Type | Method and Description |
|---|---|
Function<? super HttpService,? extends HttpService> |
DecoratorFactoryFunction.newDecorator(T parameter)
Creates a new decorator with the specified
parameter. |
Function<? super HttpService,? extends HttpService> |
DecoratorFactoryFunction.newDecorator(T parameter)
Creates a new decorator with the specified
parameter. |
| Modifier and Type | Method and Description |
|---|---|
Function<? super HttpService,? extends HttpService> |
LoggingDecoratorFactoryFunction.newDecorator(LoggingDecorator parameter)
Creates a new decorator with the specified
parameter. |
Function<? super HttpService,? extends HttpService> |
LoggingDecoratorFactoryFunction.newDecorator(LoggingDecorator parameter)
Creates a new decorator with the specified
parameter. |
Function<? super HttpService,? extends HttpService> |
RateLimitingDecoratorFactoryFunction.newDecorator(RateLimitingDecorator parameter)
Creates a new decorator with the specified
parameter. |
Function<? super HttpService,? extends HttpService> |
RateLimitingDecoratorFactoryFunction.newDecorator(RateLimitingDecorator parameter)
Creates a new decorator with the specified
parameter. |
| Modifier and Type | Class and Description |
|---|---|
class |
HttpAuthService
Decorates an
HttpService to provide HTTP authorization functionality. |
| Modifier and Type | Method and Description |
|---|---|
Function<? super HttpService,HttpAuthService> |
HttpAuthServiceBuilder.newDecorator()
Returns a newly-created decorator that decorates an
HttpService with a new
HttpAuthService based on the Authorizers added to this builder. |
static Function<? super HttpService,HttpAuthService> |
HttpAuthService.newDecorator(Authorizer<HttpRequest>... authorizers)
Creates a new HTTP authorization
HttpService decorator using the specified
Authorizers. |
static Function<? super HttpService,HttpAuthService> |
HttpAuthService.newDecorator(Iterable<? extends Authorizer<HttpRequest>> authorizers)
Creates a new HTTP authorization
HttpService decorator using the specified
Authorizers. |
| Modifier and Type | Method and Description |
|---|---|
HttpAuthService |
HttpAuthServiceBuilder.build(HttpService delegate)
Returns a newly-created
HttpAuthService based on the Authorizers added to this builder. |
| Modifier and Type | Class and Description |
|---|---|
class |
SimpleCompositeService
A general purpose
AbstractCompositeService implementation. |
| Modifier and Type | Method and Description |
|---|---|
HttpService |
SimpleCompositeService.serviceAt(int index) |
| Modifier and Type | Method and Description |
|---|---|
Routed<HttpService> |
SimpleCompositeService.findService(RoutingContext routingCtx) |
List<CompositeServiceEntry<HttpService>> |
SimpleCompositeService.services() |
| Modifier and Type | Method and Description |
|---|---|
SimpleCompositeServiceBuilder |
SimpleCompositeServiceBuilder.service(Route route,
HttpService service) |
SimpleCompositeServiceBuilder |
SimpleCompositeServiceBuilder.service(String pathPattern,
HttpService service) |
SimpleCompositeServiceBuilder |
SimpleCompositeServiceBuilder.serviceUnder(String pathPrefix,
HttpService service) |
| Constructor and Description |
|---|
SimpleCompositeService(Iterable<CompositeServiceEntry<HttpService>> services)
Creates a new instance that is composed of the specified entries.
|
| Modifier and Type | Class and Description |
|---|---|
class |
CorsService
Decorates an
HttpService to add the
Cross-Origin Resource Sharing
(CORS) support. |
| Modifier and Type | Method and Description |
|---|---|
Function<? super HttpService,CorsService> |
CorsServiceBuilder.newDecorator()
Returns a newly-created decorator that decorates an
HttpService with a new CorsService
based on the properties of this builder. |
Function<? super HttpService,? extends HttpService> |
CorsDecoratorFactoryFunction.newDecorator(CorsDecorator parameter) |
Function<? super HttpService,? extends HttpService> |
CorsDecoratorFactoryFunction.newDecorator(CorsDecorator parameter) |
Function<? super HttpService,? extends HttpService> |
CorsDecoratorsFactoryFunction.newDecorator(CorsDecorators parameter) |
Function<? super HttpService,? extends HttpService> |
CorsDecoratorsFactoryFunction.newDecorator(CorsDecorators parameter) |
| Modifier and Type | Method and Description |
|---|---|
CorsService |
CorsServiceBuilder.build(HttpService delegate)
Returns a newly-created
CorsService based on the properties of this builder. |
| Constructor and Description |
|---|
CorsService(HttpService delegate,
CorsConfig config)
Creates a new
CorsService that decorates the specified delegate to add CORS support. |
| Modifier and Type | Class and Description |
|---|---|
class |
DocService
|
| Modifier and Type | Class and Description |
|---|---|
class |
HttpEncodingService
Decorates an
HttpService to apply HTTP encoding (e.g., gzip) to an HttpService. |
| Constructor and Description |
|---|
HttpEncodingService(HttpService delegate)
Creates a new
SimpleDecoratingHttpService that HTTP-encodes the response data published from
delegate. |
HttpEncodingService(HttpService delegate,
Predicate<MediaType> encodableContentTypePredicate,
int minBytesToForceChunkedAndEncoding)
Creates a new
SimpleDecoratingHttpService that HTTP-encodes the response data published from
delegate. |
HttpEncodingService(HttpService delegate,
Predicate<MediaType> encodableContentTypePredicate,
Predicate<HttpHeaders> encodableRequestHeadersPredicate,
long minBytesToForceChunkedAndEncoding)
Creates a new
SimpleDecoratingHttpService that HTTP-encodes the response data published from
delegate. |
| Modifier and Type | Class and Description |
|---|---|
class |
HttpFileService
An
HttpService that serves static files from a file system. |
| Modifier and Type | Method and Description |
|---|---|
HttpService |
HttpFile.asService()
|
HttpService |
AbstractHttpFile.asService() |
HttpService |
HttpFileService.orElse(HttpService nextService)
Creates a new
HttpService that tries this HttpFileService first and then the specified
HttpService when this HttpFileService does not have a requested resource. |
| Modifier and Type | Method and Description |
|---|---|
HttpService |
HttpFileService.orElse(HttpService nextService)
Creates a new
HttpService that tries this HttpFileService first and then the specified
HttpService when this HttpFileService does not have a requested resource. |
| Modifier and Type | Class and Description |
|---|---|
class |
HealthCheckService
An
HttpService that responds with HTTP status "200 OK" if the server is healthy and can
accept requests and HTTP status "503 Service Not Available" if the server is unhealthy and cannot
accept requests. |
class |
HttpHealthCheckService
Deprecated.
Use
HealthCheckService. |
class |
ManagedHttpHealthCheckService
Deprecated.
Use
HealthCheckService. |
| Modifier and Type | Class and Description |
|---|---|
class |
LoggingService
|
| Modifier and Type | Method and Description |
|---|---|
Function<? super HttpService,LoggingService> |
LoggingServiceBuilder.newDecorator()
Returns a newly-created
LoggingService decorator based on the properties of this builder. |
static Function<? super HttpService,LoggingService> |
LoggingService.newDecorator()
Returns a new
HttpService decorator that logs HttpRequests and HttpResponses at
LogLevel.INFO for success, LogLevel.WARN for failure. |
| Modifier and Type | Method and Description |
|---|---|
LoggingService |
LoggingServiceBuilder.build(HttpService delegate)
Returns a newly-created
LoggingService decorating HttpService based on the properties
of this builder. |
| Modifier and Type | Class and Description |
|---|---|
class |
StructuredLoggingService<L>
A decorating service which provides support of structured and optionally externalized request/response
content logging.
|
| Constructor and Description |
|---|
StructuredLoggingService(HttpService delegate,
StructuredLogBuilder<L> logBuilder)
Creates a new
StructuredLoggingService. |
| Modifier and Type | Class and Description |
|---|---|
class |
MetricCollectingService
Decorates an
HttpService to collect metrics into MeterRegistry. |
class |
PrometheusExpositionService
Exposes Prometheus metrics in text
format 0.0.4.
|
| Modifier and Type | Method and Description |
|---|---|
static Function<? super HttpService,MetricCollectingService> |
MetricCollectingService.newDecorator(MeterIdPrefixFunction meterIdPrefixFunction)
Returns a new
HttpService decorator that tracks request stats using MeterRegistry. |
| Modifier and Type | Class and Description |
|---|---|
class |
ThrottlingService
Decorates an
HttpService to throttle incoming requests. |
| Modifier and Type | Method and Description |
|---|---|
static Function<? super HttpService,ThrottlingService> |
ThrottlingService.newDecorator(ThrottlingStrategy<HttpRequest> strategy)
Creates a new decorator using the specified
ThrottlingStrategy instance. |
| Constructor and Description |
|---|
ThrottlingService(HttpService delegate,
ThrottlingStrategy<HttpRequest> strategy)
Creates a new instance that decorates the specified
HttpService. |
Copyright © 2020 LeanCloud. All rights reserved.