userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
configuration.hpp
Go to the documentation of this file.
1
#
pragma
once
2
3
/// @file userver/server/middlewares/configuration.hpp
4
/// @brief Utility functions/classes for middleware pipelines configuration
5
6
#
include
<
string
>
7
#
include
<
vector
>
8
9
#
include
<
userver
/
components
/
component_base
.
hpp
>
10
11
USERVER_NAMESPACE_BEGIN
12
13
namespace
components
{
14
class
ComponentList;
15
}
16
17
namespace
server::middlewares {
18
19
/// @ingroup userver_middlewares
20
///
21
/// @brief Returns a list of middleware-components which userver uses by
22
/// default in http server.
23
///
24
/// The list contains a bunch of middlewares into which most of
25
/// http-handler functionality is split (metrics, tracing, deadline-propagation
26
/// etc. etc.)
27
components
::ComponentList
DefaultMiddlewareComponents
();
28
29
/// @ingroup userver_middlewares
30
///
31
/// @brief Returns a list of middleware-components required by userver to start
32
/// a http server.
33
///
34
/// Components in this list don't have any useful functionality, they are
35
/// just infrastructure.
36
components
::ComponentList
MinimalMiddlewareComponents
();
37
38
using
MiddlewaresList = std::vector<std::string>;
39
40
/// @ingroup userver_middlewares
41
///
42
/// @brief Returns the default userver-provided middleware pipeline.
43
MiddlewaresList
DefaultPipeline
();
44
45
/// @ingroup userver_middlewares
46
///
47
/// @brief Returns a minimal middleware pipeline sufficient for correct HTTP
48
/// handling.
49
///
50
/// The list keeps only exceptions handling, and omits tracing and
51
/// business-logic middlewares such as auth, rate-limit, baggage, decompression
52
/// and deadline propagation. Useful for simple handlers (e.g. ping) or
53
/// benchmarks.
54
MiddlewaresList
MinimalPipeline
();
55
56
/// @ingroup userver_middlewares userver_base_classes
57
///
58
/// @brief Base class to build a server-wide middleware pipeline.
59
/// One may inherit from it and implement any custom logic, if desired.
60
class
PipelineBuilder
:
public
components
::
ComponentBase
{
61
public
:
62
static
constexpr
std::string_view kName{
"default-server-middleware-pipeline-builder"
};
63
64
PipelineBuilder(
const
components
::ComponentConfig&,
const
components
::ComponentContext&);
65
66
/// @brief The method to build a server-wide middleware pipeline,
67
/// one may override it if custom behavior is desired.
68
/// @param userver_middleware_pipeline default userver-provided middleware
69
/// pipeline
70
///
71
/// @note We recommend against omitting/modifying default userver pipeline,
72
/// but leave a possibility to do so.
73
virtual
MiddlewaresList
BuildPipeline
(MiddlewaresList userver_middleware_pipeline)
const
{
74
auto
& resulting_pipeline = userver_middleware_pipeline;
75
const
auto
& middlewares_to_append = GetMiddlewaresToAppend();
76
77
resulting_pipeline.insert(resulting_pipeline.end(), middlewares_to_append.begin(), middlewares_to_append.end());
78
79
return
resulting_pipeline;
80
}
81
82
static
yaml_config::Schema GetStaticConfigSchema();
83
84
protected
:
85
const
MiddlewaresList& GetMiddlewaresToAppend()
const
;
86
87
private
:
88
MiddlewaresList middlewares_to_append_;
89
};
90
91
/// @ingroup userver_middlewares userver_base_classes
92
///
93
/// @brief Server-wide middleware pipeline builder based on @ref MinimalPipeline.
94
///
95
/// Set `server.middleware-pipeline-builder` to
96
/// `minimal-server-middleware-pipeline-builder` to use it. Same `append` config
97
/// as @ref PipelineBuilder is supported.
98
class
MinimalPipelineBuilder
:
public
PipelineBuilder
{
99
public
:
100
static
constexpr
std::string_view kName{
"minimal-server-middleware-pipeline-builder"
};
101
102
using
PipelineBuilder
::PipelineBuilder;
103
104
MiddlewaresList
BuildPipeline
(MiddlewaresList userver_middleware_pipeline)
const
override
;
105
106
static
yaml_config::Schema GetStaticConfigSchema();
107
};
108
109
/// @ingroup userver_middlewares userver_base_classes
110
///
111
/// @brief Base class to build a per-handler middleware pipeline.
112
/// One may inherit from it and implement any custom logic, if desired.
113
/// By default the behavior is to use the server-wide pipeline.
114
class
HandlerPipelineBuilder
:
public
components
::
ComponentBase
{
115
public
:
116
static
constexpr
std::string_view kName{
"default-handler-middleware-pipeline-builder"
};
117
118
HandlerPipelineBuilder(
const
components
::ComponentConfig&,
const
components
::ComponentContext&);
119
120
/// @brief The method to configure build a per-handler middleware pipeline,
121
/// one may override it if custom behavior is desired.
122
///
123
/// For example, a ping/ handler doesn't necessary need any business-logic
124
/// related functionality, and could use just MinimalPipeline() for itself.
125
///
126
/// @param server_middleware_pipeline the server-wide middleware pipeline
127
virtual
MiddlewaresList
BuildPipeline
(MiddlewaresList server_middleware_pipeline)
const
{
128
return
server_middleware_pipeline;
129
}
130
};
131
132
}
// namespace server::middlewares
133
134
template
<>
135
inline
constexpr
bool
components
::kHasValidate<server::middlewares::PipelineBuilder> =
true
;
136
137
template
<>
138
inline
constexpr
auto
components
::kConfigFileMode<server::middlewares::PipelineBuilder> =
ConfigFileMode
::
kNotRequired
;
139
140
template
<>
141
inline
constexpr
bool
components
::kHasValidate<server::middlewares::MinimalPipelineBuilder> =
true
;
142
143
template
<>
144
inline
constexpr
auto
145
components
::kConfigFileMode<server::middlewares::MinimalPipelineBuilder> =
ConfigFileMode
::
kNotRequired
;
146
147
template
<>
148
inline
constexpr
bool
components
::kHasValidate<server::middlewares::HandlerPipelineBuilder> =
true
;
149
150
template
<>
151
inline
constexpr
auto
152
components
::kConfigFileMode<server::middlewares::HandlerPipelineBuilder> =
ConfigFileMode
::
kNotRequired
;
153
154
USERVER_NAMESPACE_END
userver
server
middlewares
configuration.hpp
Generated on
for userver by
Doxygen
1.17.0