メニュー
Amazon API Gateway
開発者ガイド

API Gateway REST API を使用してエッジ最適化 API をセットアップする

API GatewayREST API を使用して API をセットアップするには、RestApiResourceMethodMethodResponseIntegration、および IntegrationResponse タイプの API Gateway リソースを使用します。次の手順で、これらの API Gateway リソースを使用して簡単な PetStore API をセットアップするための基本的なステップを説明します。

シンプルな PetStore API を作成するには

  1. エッジ最適化された API をセットアップするには、API Gateway リソースの restapi:create リンクリレーションを呼び出し、選択したリージョンのアカウントに API Gateway リソース RestApi を追加します。

    POST /restapis HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170511T214723Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170511/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=d0abd98a2a06199531c2916b162ede9f63a247032cdc8e4d077216446d13103c Cache-Control: no-cache Postman-Token: 0889d2b5-e507-6aab-f222-ab9548dbacaa { "name": "Simple PetStore (REST API)", "description": "A sample API Gateway API created using the REST API." }

    正常なリクエストでは、201 Created ステータスコードと次の出力のようなペイロードのレスポンスが返されます。

    { "createdDate": "2017-05-11T21:47:24Z", "description": "A sample API Gateway API created using the REST API.", "endpointConfiguration": { "types": "EDGE" }, "id": "x7hyqq0ik7", "name": "Simple PetStore (REST API)" }

    新しく作成した RestApiid 値をメモしておきます。この id 値は、この API に対して後で実行するオペレーションで使用します。新しく作成した RestApi には、API のルートソース (/) が付随しています。子リソースを追加したり、ルートソースにメソッドを追加したりするには、このルートリソースの id 値を指定する必要があります。この API 識別子を取得するには、API の resources コレクションを取得した後、結果を解析し、path 値が / のエントリーの id プロパティー値を取得します。

  2. API ルートリソース識別子を取得するには、restapi:resources リンクリレーションを呼び出します。

    GET /restapis/x7hyqq0ik7/resources HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170511T215738Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170511/us-west-2/apigateway/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=76c24ef91d835b85313142bf75545c4ac4c212067e8188ee6a127c21dae09e29

    リクエストでは、200 OK ステータスコードと次の出力のようなペイロードのレスポンスが返されます。

    { "_embedded": { "item": { "_links": { "self": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd" }, "method:by-http-method": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/{http_method}", "templated": true }, "method:put": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/{http_method}", "templated": true }, "resource:create-child": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd" }, "resource:update": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd" } }, "id": "0f72nvvnkd", "path": "/" } } }

    ルートリソース識別子は、"/"path 値に関連付けられた id 値です。この例では、0f72nvvnkd です。

  3. ルートリソース (0f72nvvnkd) に pets リソースを追加してペットストアのペットコレクションを表すには、API Gateway の resource:create リンクリレーションを呼び出します。

    POST /restapis/x7hyqq0ik7/resources/0f72nvvnkd HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T000729Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=8a7093411c97b0aa90f4b1890475d93cf20aa3732089da61e6deb410fbc6037d Cache-Control: no-cache Postman-Token: 48abcd2f-c357-9e44-669e-d8d813f876ca { "pathPart": "pets" }

    正常なレスポンスには、新しく作成された子リソース(47rxl6pets、または /pets)とその親 (0f72nvvnkd) が含まれます。

    { ..., "id": "47rxl6", "parentId": "0f72nvvnkd", "path": "/pets", "pathPart": "pets" }

    同様に、pets コレクション (リソース ID 47rxl6 を参照) に各ペットを追加するには、次のリンクリレーション resource:create を呼び出します。

    POST /restapis/x7hyqq0ik7/resources/47rxl6 HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T000729Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=8a7093411c97b0aa90f4b1890475d93cf20aa3732089da61e6deb410fbc6037d Cache-Control: no-cache Postman-Token: 48abcd2f-c357-9e44-669e-d8d813f876ca { "pathPart": "{petId}" }

    返ってくるレスポンスは次のようになります。

    { ..., "id": "ab34fgd", "parentId": "47rxl6", "path": "/pets/{petId}", "pathPart": "{petsId}" }
  4. API の /pets リソース (47rxl6) に GET メソッドを追加するには、API Gateway の次の method:put リンクリレーションを呼び出します。

    PUT /restapis/x7hyqq0ik7/resources/47rxl6/methods/GET HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T000729Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=8a7093411c97b0aa90f4b1890475d93cf20aa3732089da61e6deb410fbc6037d Cache-Control: no-cache Postman-Token: 48abcd2f-c357-9e44-669e-d8d813f876ca { "authorizationType": "NONE" }

    authorization-typeNONE に設定されているため、メソッドはオープンアクセスのものです。認証されたユーザーのみに許可するには、メソッドを呼び出すには、IAM ロールを使用してポリシー、カスタム認証、または Amazon Cognito ユーザープールを選択します。詳細については、「 API Gateway で API へのアクセスをコントロールする」を参照してください。

    リクエストが成功すると、201 Created レスポンスが、次のようなペイロードとともに返されます。

    { ..., "apiKeyRequired": false, "authorizationType": "NONE", "httpMethod": "GET" }

    API の /pets/{petId} リソース (ab34fgd) に GET メソッドを追加するには、API Gateway の次の method:put リンクリレーションを呼び出します。

    PUT /restapis/x7hyqq0ik7/resources/ab34fgd/methods/GET HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T000729Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=8a7093411c97b0aa90f4b1890475d93cf20aa3732089da61e6deb410fbc6037d Cache-Control: no-cache Postman-Token: 48abcd2f-c357-9e44-669e-d8d813f876ca { "authorizationType": "NONE", "requestParameters": { "method.request.path.petId": true } }

    バックエンドにパスされる前に動的な設定値を対応する統合リクエストパラメーターにマッピングするには、API Gateway の petId のメソッドリクエストパスパラメーターを宣言する必要があります。常に必要に応じてパスパラメーターを設定する必要があります。さらに、API の要件によっては、メソッドリクエストでヘッダーおよびクエリパラメーターを設定できます。ペイロードを受け取る POSTPUTPATCH などのメソッドでは、メソッドリクエストでペイロードのモデルを定義できます。これらの設定の詳細については、「API Gateway の API メソッドをセットアップする 」を参照してください。

    成功のレスポンスには、201 Created ステータスコードと以下のようなペイロードが含まれます。

    { "apiKeyRequired": false, "authorizationType": "NONE", "httpMethod": "GET", "requestParameters": { "method.request.path.petId": true } }
  5. API の GET /pets メソッドで 200 ステータスコードのメソッドレスポンスを追加するには、methodresponse:put リンクリレーションを呼び出し、47rxl6 を指定してこのメソッドを公開しているリソースを参照します。

    PUT /restapis/x7hyqq0ik7/resources/47rxl6/methods/GET/responses/200 HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T003943Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=229ef4cfba4bbe41132f36c027f0ae4449bb741671875075a4b216e9b778233e Cache-Control: no-cache Postman-Token: 268fcf18-92e4-dfea-821a-ebf4e1d0edfd {}

    正常なリクエストでは、201 Created ステータスコードと次の出力のようなペイロードのレスポンスが返されます。

    { ..., "statusCode": "200" }

    同様に、GET /pets/{petId} メソッドに 200 レスポンスを追加するには、methodresponse:put リンクリレーションを呼び出し、ID (ab34fgd) で目的の /pets/{petId} リソースを参照します。

    PUT /restapis/x7hyqq0ik7/resources/ab34fgd/methods/GET/responses/200 HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T003943Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=229ef4cfba4bbe41132f36c027f0ae4449bb741671875075a4b216e9b778233e Cache-Control: no-cache Postman-Token: 268fcf18-92e4-dfea-821a-ebf4e1d0edfd {}

    セットアップした Method および MethodRepsonse の API Gateway リソースは、API のクライアント用インターフェイスを定義します。非プロキシ統合では、Integration および IntegrationResponse の API Gateway リソースを追加および設定し、バックエンドに送信された統合リクエストとバックエンドから返された統合レスポンスをカプセル化する必要があります。ただし、プロキシ統合では、Integration および IntegrationResponse をセットアップしません。

  6. GET /pets メソッドで Integration をセットアップするには、API Gateway の integration:put リンクリレーションを呼び出し、ID 値 (47rxl6) で /pets リソースを参照する必要があります。

    PUT /restapis/x7hyqq0ik7/resources/47rxl6/methods/GET/integration HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T002249Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=10359971a8c54862a47e39d6a6e4b6e62c263e9a2b785b47b40c426c0aa61c19 { "type" : "HTTP", "httpMethod" : "GET", "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets" }

    リクエストペイロードで、uri はメソッドに関連付けられたバックエンドのエンドポイントを指します。type は、統合タイプを参照します。指定の HTTP エンドポイント http://petstore-demo-endpoint.execute-api.com/petstore/pets では、統合タイプは HTTP である必要があります。httpMethod プロパティは、バックエンドの要求に応じて HTTP 動詞を参照します。この HTTP 動詞は、method:put リンクリレーションを呼び出す際のメソッドリクエストの HTTP 動詞セットとは異なる場合があります。

    正常なリクエストでは、201 Created ステータスコードと次の出力のようなペイロードのレスポンスが返されます。

    { ..., "cacheKeyParameters": [], "cacheNamespace": "47rxl6", "httpMethod": "GET", "passthroughBehavior": "WHEN_NO_MATCH", "type": "HTTP", "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets" }

    同様に、GET /pets/{petId} メソッドの統合をセットアップするには、API Gateway の次の integration:put リンクリレーションを呼び出し、値 ab34fgd/pets/{petId} リソースを参照し、{petId} から {id} へのリクエストパラメーターのマッピングを追加します。

    PUT /restapis/x7hyqq0ik7/resources/ab34fgd/methods/GET/integration HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T002249Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=10359971a8c54862a47e39d6a6e4b6e62c263e9a2b785b47b40c426c0aa61c19 { "type" : "HTTP", "httpMethod" : "GET", "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}", "requestParameters": { "integration.request.path.id": "method.request.path.petId" } }

    この integration:put リクエストが成功すると、レスポンスは次のようになります。

    { ..., "cacheKeyParameters": [], "cacheNamespace": "ab34fgd", "httpMethod": "GET", "passthroughBehavior": "WHEN_NO_MATCH", "type": "HTTP", "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}", "requestParameters": { "integration.request.path.id": "method.request.path.petId" } }
  7. GET /pets メソッドで 200 の OK IntegrationResponse をセットアップするには、API Gateway の次の integrationresponse:put リンクリレーションを呼び出します。

    PUT /restapis/x7hyqq0ik7/resources/47rxl6/methods/GET/integration/responses/200 HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T004542Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=545ab6ea151f72c52161ee856ee621f136d717e40a02743cd8fe3638895794b1 Cache-Control: no-cache Postman-Token: d29cabea-5232-7021-88ad-f1e950f55a99 {}

    正常なリクエストでは、201 Created ステータスコードと次の出力のようなペイロードのレスポンスが返されます。

    { ..., "statusCode": "200" }

    GET /pets/{petId} メソッド (リソース idab34fgd) で 200 の OK IntegrationResponse をセットアップするには、API Gateway の次の integrationresponse:put リンクリレーションを呼び出します。

    PUT /restapis/x7hyqq0ik7/resources/ab34fgd/methods/GET/integration/responses/200 HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T004542Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=545ab6ea151f72c52161ee856ee621f136d717e40a02743cd8fe3638895794b1 {}

    これで、HTTP 統合タイプの GET /pets および GET /pets/{petId} メソッドで簡単な PetStore API が作成されました。

  8. 顧客が呼び出す API を開くには、API Gateway の deployment:create リンクリレーションを呼び出して test ステージに API をデプロイします。

    POST /restapis/x7hyqq0ik7/deployments HTTP/1.1 Host: apigateway.us-west-2.amazonaws.com Content-Type: application/x-amz-json-1.0 X-Amz-Date: 20170512T004542Z Authorization: AWS4-HMAC-SHA256 Credential={ACCESS-KEY-ID}/20170512/us-west-2/apigateway/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-date, Signature=545ab6ea151f72c52161ee856ee621f136d717e40a02743cd8fe3638895794b1 { "stageName" : "test", "stageDescription" : "First stage", "description" : "First deployment" }

    成功のレスポンスには、201 Created ステータスコードと以下のようなペイロードが含まれます。

    { ..., "createdDate": "2017-10-13T20:28:56Z", "description": "First deployment", "id": "s7ja1r" }

    これで GET /pets メソッドの https://x7hyqq0ik7.execute-api.us-west-2.amazonaws.com/test/pets URL をブラウザに入力し、デプロイされた API をテストできます。RestApi の識別子 (x7hyqq0ik7) を API の識別子に置き換えます。問題がなければ、出力は次のようになります。

    [ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ]

    GET /pets/{petId} メソッドをテストするには、ブラウザに https://x7hyqq0ik7.execute-api.us-west-2.amazonaws.com/test/pets/3 URL を入力し、RestApi 識別子を API の識別子に置き換えます。問題がなければ、出力は次のようになります。

    { "id": 3, "type": "fish", "price": 0.99 }