You're viewing Apigee Edge documentation.
Go to the
Apigee X documentation. info
What you'll learn in this topic
After reading this topic you will know:
- What request and response streaming on Apigee Edge is
- When to use request and response streaming
- How to enable request and response streaming
What is request and response streaming?
By default, HTTP streaming is disabled and HTTP request and response payloads are written to a buffer in memory before they are processed by the API proxy pipeline. You can change this behavior by enabling streaming. With streaming enabled, request and response payloads are streamed without modification to the client app (for responses) and the target endpoint (for requests).
When should I enable streaming?
If your API proxy handles very large requests and/or responses (for size limits, see What else should I know about streaming below), you may want to enable streaming.
What else should I know about streaming?
Message payload size is restricted to 10 MB in Edge Cloud and
Private Cloud, even with streaming enabled. In non-streamed requests and responses, exceeding
that size results in a protocol.http.TooBigBody
error.
In Edge for Private Cloud deployments, you can modify the non-streamed request/response size limit. Be sure to test before deploying the change to production.
- For Edge for Private Cloud releases previous to 4.16.01:
On all Message Processors, edit thehttp.properties
file to increase the limit in theHTTPResponse.body.buffer.limit
parameter and then restart the Message Processor. -
For Edge for Private Cloud release 4.16.01 and later:
-
Edit the file /<inst_root>/apigee/customer/application/message-processor.properties. If that file does not exist, create it.
-
Set the conf_http_HTTPResponse.body.buffer.limit property in message-processor.properties. For example:
conf_http_HTTPResponse.body.buffer.limit=5m -
Restart the Message Processor:
> /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart -
Repeat for all Message Processors.
-
How to enable request and response streaming
To enable request streaming you need to add the request.streaming.enabled
property to the ProxyEndpoint and TargetEndpoint definitions in the proxy bundle and set it to
true
. Similarly, set the response.streaming.enabled
property to enable response streaming.
You can locate these configuration files in the management UI in the Develop view for your
proxy. If you are developing locally, these definition files are in apiproxy/proxies
and apiproxy/targets
.
This sample shows how to enable both request and response streaming in the TargetEndpoint definition.
<TargetEndpoint name="default"> <HTTPTargetConnection> <URL>http://mocktarget.apigee.net</URL> <Properties> <Property name="response.streaming.enabled">true</Property> <Property name="request.streaming.enabled">true</Property> <Property name="supports.http10">true</Property> <Property name="request.retain.headers">User-Agent,Referer,Accept-Language</Property> <Property name="retain.queryparams">apikey</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>
This example shows how to enable response and request streaming in the ProxyEndpoint definition:
<ProxyEndpoint name="default"> <HTTPProxyConnection> <BasePath>/v1/weather</BasePath> <Properties> <Property name="allow.http10">true</Property> <Property name="response.streaming.enabled">true</Property> <Property name="request.streaming.enabled">true</Property> </Properties> </HTTPProxyConnection> </ProxyEndpoint>
For more information about configuring endpoint definitions, see Endpoint properties reference.
Related code samples
API proxy samples on GitHub are easy to download and use. See Using the sample API proxies for information about downloading and using the samples.
Sample proxies that feature streaming include:
- streaming - Demonstrates an API proxy configured for HTTP streaming.
- Edge Callout: Signed URL Generator - Illustrates the best practice of generating a signed URL to access large files instead of trying to stream them in a request/response.