Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can AWS API Gateway support `application/x-www-form-urlencoded` with body and query string parameters?

Numerous services can accept query string parameters in the URL when a POST request is made with Content-Type: application/x-www-form-urlencoded and other parameters in the body, but it seems AWS API Gateway cannot while also accepting query string parameters.

When I call the AWS API Gateway with a POST Mapping Template for application/x-www-form-urlencoded and query string URL parameters (with a Lambda function), I get the following error:

{
  "message":"When Content-Type:application/x-www-form-urlencoded,
    URL cannot include query-string parameters (after '?'):
    '/prod/webhook?inputType=wootric&outputType=glip&url=...'"
}

Here is an example cURL:

curl -XPOST 'https://{myid}.execute-api.{myregion}.amazonaws.com/prod/webhook? \
inputType=wootric&outputType=glip&url=https://hooks.glip.com/webhook/ \
11112222-3333-4444-5555-666677778888' \
-d "@docs/handlers/wootric/event-example_response-created.txt" \
-H 'Content-Type: application/x-www-form-urlencoded' -v

The specific goal is to get a Wootric webhook event posted to a Lambda function using a URL with query string parameters.

You can get the code here:

https://github.com/grokify/chathooks

The Wootric event body file is here:

https://raw.githubusercontent.com/grokify/chathooks/master/docs/handlers/wootric/event-example_response-created.txt

The GitHub issue is here:

https://github.com/grokify/chathooks/issues/15

The error message seems pretty definitive but I wanted to ask:

  1. Is there a workaround to configure an API Gateway to support both?
  2. Is there a standards-based reason why AWS would not support this or is this just a design decision / limitation?

If there's no solution to this, is there a good lightweight solution other than deploying a hosted server solution like Heroku. Also, do other cloud services support this with their API gateway + cloud functions, like Google?

Some examples showing support for both:

  • jQuery example: jQuery send GET and POST parameters simultaneously at AJAX request
  • C# example: Accessing query string variables sent as POST in HttpActionContext
like image 565
Grokify Avatar asked Mar 24 '20 05:03

Grokify


People also ask

What API types are supported by Amazon API gateway?

Amazon API Gateway offers features such as the following: Support for stateful (WebSocket) and stateless (HTTP and REST) APIs. Powerful, flexible authentication mechanisms, such as AWS Identity and Access Management policies, Lambda authorizer functions, and Amazon Cognito user pools.

Which elements are supported by the API gateway?

API Gateway is an AWS service that supports the following: Creating, deploying, and managing a RESTful application programming interface (API) to expose backend HTTP endpoints, AWS Lambda functions, or other AWS services.

What is the role of the integration request in an API method in Amazon API gateway?

An integration request is an HTTP request that API Gateway submits to the backend, passing along the client-submitted request data, and transforming the data, if necessary. The HTTP method (or verb) and URI of the integration request are dictated by the backend (that is, the integration endpoint).

What $context variables can be used with Amazon API gateway API?

For $method and $integration variables, see Amazon API Gateway API request and response data mapping reference . The following $context variables can be used in data models, authorizers, mapping templates, and CloudWatch access logging.

How to integrate AWS service with API gateway?

For AWS Service, choose the service that you're integrating with API Gateway. For example, Simple Notification Service (SNS). (Optional) For AWS Subdomain, enter the subdomain used by the AWS service. Check the service's documentation to confirm the availability of a subdomain.

How do I add a query string to an API gateway method?

In the API Gateway console, go back to the Method Execution pane for your API Gateway API's method, and then choose Integration Request. On the Integration Request pane, expand URL Query String Parameters. Choose Add query string.

What are valid values for AWS API keys?

Valid values include: DELETE , GET, HEAD, OPTIONS , PATCH, POST, and PUT . The AWS account ID associated with the request. For API methods that require an API key, this variable is the API key associated with the method request. For methods that don't require an API key, this variable is null.


1 Answers

Yes,there is a workaround and the key issue is to set the mapping template that will convert string into json . Very detailed example shown in API Gateway any content type.

like image 55
Richard Rublev Avatar answered Oct 29 '22 09:10

Richard Rublev