pub struct Backend { /* private fields */ }
Expand description
A named backend.
This represents a backend associated with a service that we can send requests to, potentially caching the responses received.
Backends come in one of two flavors:
- Static Backends: These backends are created using the Fastly UI or API,
and are predefined by the user. Static backends have short names (see the
precise naming rules in
Backend::from_name
) that are usable across every session of a service. - Dynamic Backends: These backends are created programmatically using the
Backend::builder
API. They are defined at runtime, and may or may not be shared across sessions depending on how they are configured.
To use a backend, pass it to the crate::Request::send
method. Alternatively, the following
values can be automatically coerced into a backend for you, without the need to explicitly
create a Backend
object, although they may all induce panics:
- Any string type (
&str
,String
, or&String
) will be automatically turned into the static backend of the same name.
§Using Static Backends
As stated at the top level, the following snippet is a minimal program that resends a request to a static backend named “example_backend”:
use fastly::{Error, Request, Response};
#[fastly::main]
fn main(ds_req: Request) -> Result<Response, Error> {
Ok(ds_req.send("example_backend")?)
}
A safer alternative to this example would be the following:
use fastly::{Backend, Error, Request, Response};
#[fastly::main]
fn main(ds_req: Request) -> Result<Response, Error> {
match Backend::from_name("example_backend") {
Ok(backend) => Ok(ds_req.send(backend)?),
Err(_) => {
// custom backend failure response
unimplemented!()
}
}
}
as this version allows you to handle backend errors more cleanly.
§Validating Support for Dynamic Backends
Since dynamic backends are only enabled for some services, it may be particularly
useful to ensure that dynamic backends are supported in your Compute service.
The easiest way to do so is to try to create a dynamic backend, and then explicitly
check for the crate::backend::BackendCreationError::Disallowed
code, as follows:
use fastly::{Backend, Error, Request, Response};
use fastly::backend::BackendCreationError;
#[fastly::main]
fn main(ds_req: Request) -> Result<Response, Error> {
match Backend::builder("custom_backend", "example.org:993").finish() {
Ok(backend) => Ok(ds_req.send(backend)?),
Err(BackendCreationError::Disallowed) => {
// custom code ofr handling when dynamic backends aren't supported
unimplemented!()
}
Err(err) => {
// more specific logging/handling for backend misconfigurations
unimplemented!()
}
}
}
Implementations§
source§impl Backend
impl Backend
sourcepub fn from_name(s: &str) -> Result<Self, BackendError>
pub fn from_name(s: &str) -> Result<Self, BackendError>
Get a backend by its name.
This function will return a BackendError
if an invalid name was given.
Backend names:
- cannot be empty
- cannot be longer than 255 characters
- cannot ASCII control characters such as
'\n'
orDELETE
. - cannot contain special Unicode characters
- should only contain visible ASCII characters or spaces
Future versions of this function may return an error if your service does not have a backend with this name.
sourcepub fn builder(name: impl ToString, target: impl ToString) -> BackendBuilder
pub fn builder(name: impl ToString, target: impl ToString) -> BackendBuilder
Create a new dynamic backend builder.
The arguments are the name of the new backend to use, along with a string describing the backend host. The latter can be of the form:
"<ip address>"
"<hostname>"
"<ip address>:<port>"
"<hostname>:<port>"
The name can be whatever you would like, as long as it does not match the name of any of the static service backends nor match any other dynamic backends built during this session. (Names can overlap between different sessions of the same service – they will be treated as completely separate entities and will not be pooled – but you cannot, for example, declare a dynamic backend named “dynamic-backend” twice in the same session.)
The builder will start with default values for all other possible fields for the
backend, which can be overridden using the other methods provided. Call
finish()
to complete the construction of the dynamic backend.
Dynamic backends must be enabled for this Compute service. You can determine
whether or not dynamic backends have been allowed for the current service by
using this builder, and then checking for the BackendCreationError::Disallowed
error result. This error only arises when attempting to use dynamic backends
with a service that has not had dynamic backends enabled, or dynamic backends
have been administratively prohibited for the node in response to an ongoing
incident.
sourcepub fn into_string(self) -> String
pub fn into_string(self) -> String
Turn the backend into its name as a string.
sourcepub fn is_dynamic(&self) -> bool
pub fn is_dynamic(&self) -> bool
sourcepub fn get_host_override(&self) -> Option<HeaderValue>
pub fn get_host_override(&self) -> Option<HeaderValue>
Returns the host header override when contacting this backend.
This method returns None
if no host header override is configured for this backend.
This is used to change the Host
header sent to the backend. For more information, see
the Fastly documentation on host overrides here:
https://docs.fastly.com/en/guides/specifying-an-override-host
Use
BackendBuilder::override_host
to set this for a dynamic backend.
§Panics
If the name()
of this backend does not match any of the backends associated
with this service, this function will panic. Use exists()
to explicitly
check that this backend exists.
sourcepub fn get_connect_timeout(&self) -> Duration
pub fn get_connect_timeout(&self) -> Duration
Returns the connection timeout for this backend.
Use
BackendBuilder::connect_timeout
to set this for a dynamic backend.
§Panics
If the name()
of this backend does not match any of the backends associated
with this service, this function will panic. Use exists()
to explicitly
check that this backend exists.
sourcepub fn get_first_byte_timeout(&self) -> Duration
pub fn get_first_byte_timeout(&self) -> Duration
Returns the “first byte” timeout for this backend.
This timeout applies between the time of connection and the time we get the first byte back.
Use
BackendBuilder::first_byte_timeout
to set this for a dynamic backend.
§Panics
If the name()
of this backend does not match any of the backends associated
with this service, this function will panic. Use exists()
to explicitly
check that this backend exists.
sourcepub fn get_between_bytes_timeout(&self) -> Duration
pub fn get_between_bytes_timeout(&self) -> Duration
Returns the “between bytes” timeout for this backend.
This timeout applies between any two bytes we receive across the wire.
Use
BackendBuilder::between_bytes_timeout
to set this for a dynamic backend.
§Panics
If the name()
of this backend does not match any of the backends associated
with this service, this function will panic. Use exists()
to explicitly
check that this backend exists.
sourcepub fn is_ssl(&self) -> bool
pub fn is_ssl(&self) -> bool
Returns true
if SSL/TLS is used to connect to the backend.
Use
BackendBuilder::enable_ssl
or
BackendBuilder::disable_ssl
to set this for a dynamic backend.
§Panics
If the name()
of this backend does not match any of the backends associated
with this service, this function will panic. Use exists()
to explicitly
check that this backend exists.
sourcepub fn get_ssl_min_version(&self) -> Option<SslVersion>
pub fn get_ssl_min_version(&self) -> Option<SslVersion>
Returns the minimum TLS version for connecting to the backend.
This method returns None
if SSL/TLS is not enabled for this backend.
Use
BackendBuilder::set_min_tls_version
to set this for a dynamic backend.
§Panics
If the name()
of this backend does not match any of the backends associated
with this service, this function will panic. Use exists()
to explicitly
check that this backend exists.
sourcepub fn get_ssl_max_version(&self) -> Option<SslVersion>
pub fn get_ssl_max_version(&self) -> Option<SslVersion>
Returns the maximum TLS version for connecting to the backend.
This method returns None
if SSL/TLS is not enabled for this backend.
Use
BackendBuilder::set_max_tls_version
to set this for a dynamic backend.
§Panics
If the name()
of this backend does not match any of the backends associated
with this service, this function will panic. Use exists()
to explicitly
check that this backend exists.
Trait Implementations§
source§impl BackendExt for Backend
impl BackendExt for Backend
source§fn is_healthy(&self) -> Result<BackendHealth, Error>
fn is_healthy(&self) -> Result<BackendHealth, Error>
source§impl Ord for Backend
impl Ord for Backend
source§impl PartialEq for Backend
impl PartialEq for Backend
source§impl PartialOrd for Backend
impl PartialOrd for Backend
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more