Tutorial: Create a REST API with an HTTP non-proxy integration
In this tutorial, you create an API from scratch using the Amazon API Gateway console. You can think of the console as an API design studio and use it to scope the API features, to experiment with its behaviors, to build the API, and to deploy your API in stages.
Create an API with HTTP custom integration
This section walks you through the steps to create resources, expose methods on a resource, configure a method to achieve the desired API behaviors, and to test and deploy the API.
In this step, you create an empty API. In the following steps you create resources and methods to connect your
API to the http://petstore-demo-endpoint.execute-api.com/petstore/pets
endpoint, using a non-proxy HTTP integration.
To create an API
Sign in to the API Gateway console at https://console.aws.amazon.com/apigateway
. -
If this is your first time using API Gateway, you see a page that introduces you to the features of the service. Under REST API, choose Build. When the Create Example API popup appears, choose OK.
If this is not your first time using API Gateway, choose Create API. Under REST API, choose Build.
For API name, enter
HTTPNonProxyAPI
.(Optional) For Description, enter a description.
Keep API endpoint type set to Regional.
Choose Create API.
The Resources tree
shows the root resource (/
) without any methods. In this exercise,
we will build the API with the HTTP custom integration of the PetStore website
(http://petstore-demo-endpoint.execute-api.com/petstore/pets.) For illustration
purposes, we will create a /pets
resource as a child of the root
and expose a GET method on this resource for a client to retrieve a list of
available Pets items from the PetStore website.
To create a /pets resource
Choose Create resource.
Keep Proxy resource turned off.
Keep Resource path as
/
.For Resource name, enter
pets
.Keep CORS (Cross Origin Resource Sharing) turned off.
Choose Create resource.
In this step, you create a GET
method on the /pets resource. The
GET
method is integrated with the
http://petstore-demo-endpoint.execute-api.com/petstore/pets
website. Other options for an API
method include the following:
-
POST, primarily used to create child resources.
-
PUT, primarily used to update existing resources (and, although not recommended, can be used to create child resources).
-
DELETE, used to delete resources.
-
PATCH, used to update resources.
-
HEAD, primarily used in testing scenarios. It is the same as GET but does not return the resource representation.
-
OPTIONS, which can be used by callers to get information about available communication options for the target service.
For the integration request's HTTP method, you must
choose one supported by the backend. For HTTP
or Mock
integration
, it makes sense that the method request and the
integration request use the same HTTP verb. For other integration types the
method request will likely use an HTTP verb different from the integration
request. For example, to call a Lambda function, the integration request must
use POST
to invoke the function, whereas the method request may
use any HTTP verb depending on the logic of the Lambda function.
To create a GET
method on the /pets resource
Select the /pets resource.
Choose Create method.
For Method type, select GET.
For Integration type, select HTTP integration.
Keep HTTP proxy integration turned off.
For HTTP method, select GET.
For Endpoint URL, enter
http://petstore-demo-endpoint.execute-api.com/petstore/pets
.The PetStore website allows you to retrieve a list of
Pet
items by the pet type, such as "Dog" or "Cat", on a given page.For Content handling, select Passthrough.
Choose URL query string parameters.
The PetStore website uses the
type
andpage
query string parameters to accept an input. You add query string parameters to the method request and map them into corresponding query string parameters of the integration request.To add the query string parameters, do the following:
Choose Add query string.
For Name, enter
type
Keep Required and Caching turned off.
Repeat the previous steps to create an additional query string with the name
page
.Choose Create method.
The client can now supply a pet type and a page number as query string parameters when submitting a request. These input parameters must be mapped into the integration's query string parameters to forward the input values to our PetStore website in the backend.
To map input parameters to the Integration request
On the Integration request tab, under Integration request settings, choose Edit.
Choose URL query string parameters, and then do the following:
Choose Add query string parameter.
For Name, enter
type
.For Mapped from, enter
method.request.querystring.type
Keep Caching turned off.
Choose Add query string parameter.
For Name, enter
page
.For Mapped from, enter
method.request.querystring.page
Keep Caching turned off.
Choose Save.
To test the API
-
Choose the Test tab. You might need to choose the right arrow button to show the tab.
-
For Query strings, enter
type=Dog&page=2
. Choose Test.
The result is similar to the following:
Now that the test is successful, we can deploy the API to make it publicly available.
Choose Deploy API.
For Stage, select New stage.
For Stage name, enter
Prod
.(Optional) For Description, enter a description.
Choose Deploy.
-
(Optional) Under Stage details, for Invoke URL, you can choose the copy icon to copy your API's invoke URL. You can use this with tools such as Postman
and cURL to test your API.
If you use an SDK to create a client, you can call the methods exposed by the
SDK to sign the request. For implementation details, see the AWS SDK
Note
When changes are made to your API, you must redeploy the API to make the new or updated features available before invoking the request URL again.
(Optional) Map request parameters
Map request parameters for an API Gateway API
This tutorial shows how to create a path parameter of {petId}
on the API's method request
to specify an item ID, map it to the {id}
path parameter in the
integration request URL, and send the request to the HTTP endpoint.
Note
If you enter the incorrect case of a letter, such as lowercase letter instead of an uppercase letter, this will cause errors later in the walkthrough.
Step 1: Create resources
In this step, you create a resource with a path parameter {petId}.
To create the {petId} resource
-
Select the /pets resource, and then choose Create resource.
Keep Proxy resource turned off.
For Resource path, select /pets/.
For Resource name, enter
{petId}
.Use the curly braces (
{ }
) aroundpetId
so that /pets/{petId} is displayed.Keep CORS (Cross Origin Resource Sharing) turned off.
Choose Create resource.
Step 2: Create and test the methods
In this step, you create a GET
method with a {petId}
path parameter.
To set up GET method
Select the /{petId} resource, and then choose Create method.
For Method type, select GET.
For Integration type, select HTTP integration.
Keep HTTP proxy integration turned off.
For HTTP method, select GET.
For Endpoint URL, enter
http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}
For Content handling, select Passthrough.
Keep the Default timeout turned on.
Choose Create method.
Now you map the {petId}
path parameter that you just created to the {id}
path parameter
in the HTTP endpoint URL of the integration request. The HTTP endpoint URL was
http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}
.
To map the {petId}
path parameter
-
On the Integration request tab, under Integration request settings, choose Edit.
Choose URL path parameters.
-
API Gateway creates a path parameter for the integration request named petId, however this path parameter isn't valid for the HTTP endpoint URL that you set as the backend integration. The HTTP endpoint uses
{id}
as the path parameter. For Name, delete petId and enterid
.This maps the method request's path parameter of
petId
to the integration request's path parameter ofid
. Choose Save.
Now you test the method.
To test the method
-
Choose the Test tab. You might need to choose the right arrow button to show the tab.
Under Path for petId, enter
4
.Choose Test.
If successful, Response body displays the following:
{ "id": 4, "type": "bird", "price": 999.99 }
Step 3: Deploy the API
In this step, you deploy the API so that you can begin calling it outside of the API Gateway console.
To deploy the API
Choose Deploy API.
For Stage, select Prod.
(Optional) For Description, enter a description.
Choose Deploy.
Step 4: Test the API
In this step, you go outside of the API Gateway console and use your API to access the HTTP endpoint.
-
In the main navigation pane, choose Stage.
-
Under Stage details, choose the copy icon to copy your API's invoke URL.
It should look something like this:
https://
my-api-id
.execute-api.region-id
.amazonaws.com/prod -
Enter this URL in the address box of a new browser tab and append
/pets/4
to the URL before you submit your request. -
The browser will return the following:
{ "id": 4, "type": "bird", "price": 999.99 }
Next steps
You can further customize your API by turning on request validation, transforming data, or creating custom gateway responses.
To explore more ways to customize your API, see the following tutorials:
-
For more information about request validation, see Set up basic request validation in API Gateway.
-
For information about how to transform request and response payloads, see Set up data transformations in API Gateway.
-
For information about how to create custom gateway responses see, Set up a gateway response for a REST API using the API Gateway console.