Extensions
You can use extensions to add dynamic content to response headers and response
body.
For example, if you create a response with body
{ "Number": "{{randomInteger}}", "Date": "{{httpNow}}" }
it will be rendered as
{ "Number": "165007562", "Date": "Sat, 02 Apr 2017 18:41:35 GMT" }
Below you will find all available extensions.
Load CSV data file
Save your data in trafficparrot-release-x.y.z/data/data.csv in CSV format.
To load the data in the response use {{csvDataFile 'row,col'}} in the response definition.
For example,
{{csvDataFile '2,4'}} will read file trafficparrot-release-x.y.z/data/data.csv
then load the 2nd row in the file and then lookup the 4th column value.
Generate random values
To generate a random value in the response use one of the following:
- {{randomInteger}} - A random integer, e.g. 1543243211
- {{randomDouble}} - A random double, e.g. -0.3476573
- {{randomString}} - A random String, e.g. lW7H2gRfFqALsev0zDoJ4o3qGMtNYYgs
- {{randomUUID}} - A random UUID, e.g. 5d0d4989-b5c1-412e-bbe6-457fd5d58493
Use request data in response *
To use request attributes in the response:
- {{request.url}} - URL
- {{request.path}} - Path
- {{request.path.[n]}} - N-th path element
- {{request.query.parameterName}} - Parameter value
- {{request.query.parameterName.[n]}} - N-th parameter value
- {{request.headers.headerName}} - First value of a header
- {{request.headers.[headerName]}} - First value of a header
- {{request.headers.headerName.[n]}}- N-th value of header
- {{request.cookies.cookieName}} - Cookie value
- {{request.body}} - Request body
Extension functions
All of jknack Handlebars string helpers are available for use in response headers and body.
- {{defaultIfEmpty value ["default value"]}}} - Render a default value if the specified value is not available, for example {{defaultIfEmpty request.query.username "Username parameter was not present in the request"}}
- {{substring value start end}} - Render the beginning of the string value, for example {{defaultIfEmpty request.query.username 0 3}}
- {{substring value start}} - Render the end of the string value, for example {{defaultIfEmpty request.query.username 5}}
- {{replace value "aaa" "bbb"}} - Replace string aaa with bbb
- {{abbreviate value 5}} - Render a truncated version of a string. Minimum value is 4.
- {{yesno value [yes="yes"] [no="no"] maybe=["maybe"]}} - Convert a boolean "true", "false" to a string representation
- {{capitalize value [fully=false]}} - Capitalize a string
- {{stripTags value}} - Remove all HTML or XML tags from the string
- {{stringFormat string param0 param1 ... paramN}} - Format the string
- {{slugify value}} - Create a slug, for example "a b c" will be rendered as "a-b-c"
- {{numberFormat number ["format"] [locale=default]}} - Format a number for a given locale or format
- {{now ["format"] [tz=timeZone|timeZoneId]}} - Date is a specified format and timezone
- {{upper value}} - Uppercase string
- {{lower value}} - Lowercase string
- {{rjust value 20 [pad=" "]}} - Right adjust string
- {{ljust value 20 [pad=" "]}} - Left adjust string
- {{cut value [" "]}} - Cut out all the occurrences in the string
- {{center value size=19 [pad="char"]}} - Center string value padded with the specified character
- {{capitalizeFirst value}} - Capitalize first word
- {{join value "," [prefix="aPrefix"] [suffix="aSuffix"]}} - Join an array of values
Loops and iterators
All block helpers
defined in handlebars specification are available.
As an example the following use of
{{#each}} in a response body will render all request headers:
<requestHeaders>
{{#each request.headers}}
<name>{{@key}}</name>
<value>{{this}}</value>
{{/each}}
</requestHeaders>
Conditionals (if, else)
All block helpers
defined in handlebars specification are available.
As an example the following use of
{{#if}} in a response body will render a different response based on availability of a request paramater:
{{#if request.query.password}}
Password was present in the request.
{{else}}
Please provide a password!
{{/if}}
Assorted
- {{httpNow}} - Date in RFC 1123 format (HTTP date format), e.g. Date: {{httpNow}} can be rendered as Date: Sat, 01 Apr 2017 10:55:05 GMT. Typically used as a value for the "Date" header.
Disabling {{...}}
If you would like to use
{{...}} notation in your templates and not having it interpreted as
an attempt to use an extension you need to do
one of the following things:
- For individual responses, use escaped syntax: \{{...}}
- Or, disable extensions globally by setting
trafficparrot.virtualservice.responsetemplate.enabled=false in trafficparrot.properties
and restarting Traffic Parrot
Create your own extensions
In order to create your own extensions
basic Java programming language
knowledge is required. We use Java to write extensions because it is
a simple to use and yet very powerful language.
It is also the most popular programming language in the world.
If this is not something you can do, we can create the extensions for you instead.
Please download the SDK
and follow the instructions in the video below.
Alternatively follow these steps:
- Open the SDK project in an IDE like IntelliJ or Eclipse
- Create a new extension class based on the examples provided in the
SDK. If the name of the class you have created is FooBar
the extension you will use in response templates
will be called {{fooBar}}
- Build the project ./mvnw clean install
- Copy
target/trafficparrot-sdk-workspace-x.y.z.jar to directory
trafficparrot-enterprise-release-x.y.z/lib/virtualservice-x.y.z
-
Look for property
trafficparrot.virtualservice.responsetemplate.extensions
in trafficparrot.properties and add your new class to the list of
extension classes there.
- Stop Traffic Parrot
- Start Traffic Parrot
Old version warning!
This documentation is for an old version of Traffic Parrot. There is a more recent Traffic Parrot version available for download at trafficparrot.com
Browse documentation for recent version