Over the past few weeks, we’ve made mapping requests and responses easier. This post takes you through the new features we introduced and gives practical examples of how to use them.
Multiple 2xx responses
We heard from many of you that you want to return more than one 2xx response code from your API. You can now configure Amazon API Gateway to return multiple 2xx response codes, each with its own header and body mapping templates. For example, when creating resources, you can return 201 for “created” and 202 for “accepted”.Context variables in parameter mapping
We have added the ability to reference context variables from the parameter mapping fields. For example, you can include the identity principal or the stage name from the context variable in a header to your HTTP backend. To send theprincipalId
returned by a custom authorizer in an X-User-ID
header to your HTTP backend, use this mapping expression:context.authorizer.principalIdFor more information, see the context variable in the Mapping Template Reference page of the documentation.
Access to raw request body
Mapping templates in API Gateway help you transform incoming requests and outgoing responses from your API’s back end. The$input
variable in mapping templates enables you to read values from a JSON
body and its properties. You can now also return the raw payload,
whether it’s JSON, XML, or a string using the $input.body
property.For example, if you have configured your API to receive raw data and pass it to Amazon Kinesis using an AWS service proxy integration, you can use the body property to read the incoming body and the
$util
variable to encode it for an Amazon Kinesis stream.{ "Data" : "$util.base64Encode($input.body)", "PartitionKey" : "key", "StreamName" : "Stream" }
JSON parse function
We have also added aparseJson()
method to the $util
object in mapping templates. The parseJson()
method parses stringified JSON input into its object representation.
You can manipulate this object representation in the mapping templates.
For example, if you need to return an error from AWS Lambda, you can now
return it like this:exports.handler = function(event, context) { var myErrorObj = { errorType : "InternalFailure", errorCode : 9130, detailedMessage : "This is my error message", stackTrace : ["foo1", "foo2", "foo3"], data : { numbers : [1, 2, 3] } } context.fail(JSON.stringify(myErrorObj)); };Then, you can use the
parseJson()
method in the mapping template to extract values from the error and return a meaningful message from your API, like this:#set ($errorMessageObj = $util.parseJson($input.path('$.errorMessage'))) #set ($bodyObj = $util.parseJson($input.body)) { "type" : "$errorMessageObj.errorType", "code" : $errorMessageObj.errorCode, "message" : "$errorMessageObj.detailedMessage", "someData" : "$errorMessageObj.data.numbers[2]" }This will produce a response that looks like this:
{ "type" : "InternalFailure", "code" : 9130, "message" : "This is my error message", "someData" : "3" }
QUANTUM BINARY SIGNALS
ReplyDeleteGet professional trading signals sent to your mobile phone daily.
Follow our trades today and earn up to 270% per day.
Nice article, thanks for sharing AWS Online Training
ReplyDelete