pub struct BodyTransformerPlugin {
request: Option<String>,
response: Option<String>,
}Expand description
Rewrites context.request.body and/or context.response.body by
rendering a template against the parsed JSON body and context variables.
A node with a request transform must sit before the upstream
node; a node with a response transform must sit after it (the
response body is empty until the upstream runs). Configuring both on one
node only makes sense in single-node positions where both sides are
populated — normally use two nodes.
Failures (a non-empty body that is not valid JSON, or an undecodable
response encoding) exit through the error port with code
BODY_DECODE_FAILED — status 400 for request bodies, 502 for response
bodies. An empty body renders the template with all {{body...}}
placeholders empty.
Fields§
§request: Option<String>§response: Option<String>Implementations§
Source§impl BodyTransformerPlugin
impl BodyTransformerPlugin
Sourcepub fn from_config(config: &HashMap<String, Value>) -> Result<Self, String>
pub fn from_config(config: &HashMap<String, Value>) -> Result<Self, String>
Builds the plugin from node config.
Accepted keys (at least one of request / response is required):
request(object): transform applied to the request body.template(string, required): the output body; see the module docs for the{{body.path}}/{{$var}}placeholder subset.input_format(string, defaultjson): onlyjsonis accepted.
response(object): same shape, applied to the response body.
Rejected at config load: missing/empty templates, unbalanced {{,
any input_format other than json, and template_is_base64: true
(both documented deviations from APISIX).
type: body-transformer
config:
request:
input_format: json
template: '{"name":"{{body.user.name}}","trace":"{{$http_x_request_id}}"}'Trait Implementations§
Source§impl Plugin for BodyTransformerPlugin
impl Plugin for BodyTransformerPlugin
Source§fn plugin_type(&self) -> &str
fn plugin_type(&self) -> &str
Source§fn execute<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Context,
_named_inputs: &'life1 HashMap<String, Value>,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn execute<'life0, 'life1, 'async_trait>(
&'life0 self,
ctx: Context,
_named_inputs: &'life1 HashMap<String, Value>,
) -> Pin<Box<dyn Future<Output = Result<PluginOutput, PluginExecutionError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Auto Trait Implementations§
impl Freeze for BodyTransformerPlugin
impl RefUnwindSafe for BodyTransformerPlugin
impl Send for BodyTransformerPlugin
impl Sync for BodyTransformerPlugin
impl Unpin for BodyTransformerPlugin
impl UnsafeUnpin for BodyTransformerPlugin
impl UnwindSafe for BodyTransformerPlugin
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more