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

API Gateway REST API を使用して API を作成する

API Gateway REST API を使用して API を作成するには、RestApiResourceMethodMethodResponseIntegration、および IntegrationResponse エンティティを使用します。以下の手順では、これらの API エンティティを使用してシンプルな PetStore API を作成する方法を示します。

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

  1. API の RestApi を作成するには、以下に示すように、restapi:create アクションを呼び出します。

    Copy
    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 レスポンスが、次のようなペイロードとともに返されます。

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

    新しく作成した RestApiid 値をメモしておきます。この値は、この API に対して後で実行するオペレーションで使用します。新しく作成した RestApi には、API のルートソース (/) が付随しています。子リソースを追加したり、ルートソースまたは子リソースにメソッドを追加したりするには、このルートリソースの id 値を指定する必要があります。この ID を取得するには、次のステップに従います。

  2. ルートリソース ID を取得するには、以下に示すように、restapi:resources アクションを呼び出します。

    Copy
    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 Cache-Control: no-cache Postman-Token: ed8fb586-8d67-8db7-d229-5a88b4620037

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

    Copy
    { "_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": "/" } } }

    ルートリソースは、返されたレスポンスペイロードの / パスで識別されます。

  3. ルートリソースに GET メソッドを追加するには、以下に示すように、method:put アクションを呼び出します。

    Copy
    PUT /restapis/x7hyqq0ik7/resources/0f72nvvnkd/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" }

    authorizationTypeNONE に設定すると、API はだれからでも呼び出し可能になります。これは、バックエンドの PetStore ウェブサイトに対するアクセス許可と一貫します。他のバックエンドやアプリケーションのシナリオでは、別の認証タイプが必要になる場合があります。

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

    Copy
    { "_links": { "curies": [ ... ], "self": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET", "name": "GET", "title": "GET" }, "integration:put": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/integration" }, "method:delete": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET" }, "method:update": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET" }, "methodresponse:put": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/responses/{status_code}", "templated": true } }, "apiKeyRequired": false, "authorizationType": "NONE", "httpMethod": "GET" }

    先ほど作成した Method リソースは、クライアント向けのメソッドリクエストを表します。API の要件によっては、メソッドリクエストでヘッダー、パス、およびクエリパラメータを設定できます。ペイロードを受け取る POSTPUTPATCH などのメソッドでは、メソッドリクエストでペイロードのモデルを定義できます。これらの設定の詳細については、「メソッドと統合を設定する」を参照してください。

  4. GET / メソッドの 200 OK レスポンスを設定するには、以下に示すように、method:put アクションを呼び出します。

    Copy
    PUT /restapis/x7hyqq0ik7/resources/0f72nvvnkd/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 ステータスコードが、次のようなペイロードとともに返されます。

    Copy
    { "_links": { "curies": { "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-method-response-{rel}.html", "name": "methodresponse", "templated": true }, "self": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/responses/200", "title": "200" }, "methodresponse:delete": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/responses/200" }, "methodresponse:update": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/responses/200" } }, "statusCode": "200" }

    Method リクエストと MethodRepsonse は、API の GET / メソッドのクライアント向けインターフェイスを表します。このインターフェイスが正しく機能するように、受信リクエストをクライアントからバックエンドに転送し、返されるレスポンスをバックエンドからクライアントにルーティングするための IntegrationIntegrationResponse を設定します。

  5. PetStore バックエンドで Integration リクエストを設定するには、以下に示すように、integration:put アクションを呼び出します。

    Copy
    PUT /restapis/x7hyqq0ik7/resources/0f72nvvnkd/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 Cache-Control: no-cache Postman-Token: 7f7bbb22-afdb-09ed-e22a-8c13f8e91ee7 { "type" : "HTTP", "httpMethod" : "GET", "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets" }

    リクエストペイロードで、uri はメソッドに関連付けられたバックエンドのエンドポイントを指します。type は、統合タイプを参照します。指定した HTTP uri で、type の値は HTTP であることが必要です。httpMethod プロパティは、バックエンドの要求に応じて HTTP 動詞を設定します。この HTTP 動詞は、integration:put アクションで設定されるメソッドリクエストの HTTP 動詞とは異なる場合があります。

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

    Copy
    { "_links": { "curies": [ ... ], "self": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/integration" }, "integration:delete": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/integration" }, "integration:update": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/integration" }, "integrationresponse:put": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/integration/responses/{status_code}", "templated": true } }, "cacheKeyParameters": [], "cacheNamespace": "0f72nvvnkd", "httpMethod": "GET", "passthroughBehavior": "WHEN_NO_MATCH", "type": "HTTP", "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets" }
  6. IntegrationResponse を設定するには、以下に示すように、integrationresponse:put アクションを呼び出します。

    Copy
    PUT /restapis/x7hyqq0ik7/resources/0f72nvvnkd/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 ステータスコードが、次のようなペイロードとともに返されます。

    Copy
    { "_links": { "curies": { "href": "http://docs.aws.amazon.com/apigateway/latest/developerguide/restapi-integration-response-{rel}.html", "name": "integrationresponse", "templated": true }, "self": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/integration/responses/200", "title": "200" }, "integrationresponse:delete": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/integration/responses/200" }, "integrationresponse:update": { "href": "/restapis/x7hyqq0ik7/resources/0f72nvvnkd/methods/GET/integration/responses/200" } }, "statusCode": "200" }

    これで、シンプルな PetStore API が正常に作成されました。

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

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