教學課程:使用 AWS 開發套件或建立 REST API AWS CLI - Amazon API Gateway

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:使用 AWS 開發套件或建立 REST API AWS CLI

下列教學課程說明如何建立支援GET /pets和方GET /pets/{petId}法的 PetStore API。這些方法與 HTTP 端點集成在一起。您可以遵循本教學課程使用 SDK JavaScript、Python 的 SDK (博托 3) 或. AWS AWS CLI您可以使用下列函數或命令來設定 API:

JavaScript v3
Python
AWS CLI

如需 JavaScript v3 適用之 AWS SDK 的詳細資訊,請參閱 AWS SDK 的用途為何 JavaScript? 。如需有關適 SDK for Python (Boto3) 資訊,請參閱。AWS SDK for Python (Boto3)如需有關的詳細資訊 AWS CLI,請參閱什麼是 AWS CLI?

設定邊緣最佳化 PetStore API

在本教學課程中,範例指令會將預留位置值用於值 ID (例如 API ID 和資源 ID)。完成自學課程時,請用您自己的值取代這些值。

若要使用 SDK 設定邊緣最佳化 PetStore API AWS
  1. 使用下列範例來建立RestApi實體:

    JavaScript v3
    import {APIGatewayClient, CreateRestApiCommand} from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new CreateRestApiCommand({ name: "Simple PetStore (JavaScript v3 SDK)", description: "Demo API created using the AWS SDK for JavaScript v3", version: "0.00.001", binaryMediaTypes: [ '*'] }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.error(Couldn't create API:\n", err) } })();

    成功的呼叫會在輸出中傳回 API ID 和 API 的根資源 ID,如下所示:

    { id: 'abc1234', name: 'PetStore (JavaScript v3 SDK)', description: 'Demo API created using the AWS SDK for node.js', createdDate: 2017-09-05T19:32:35.000Z, version: '0.00.001', rootResourceId: 'efg567' binaryMediaTypes: [ '*' ] }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.create_rest_api( name='Simple PetStore (Python SDK)', description='Demo API created using the AWS SDK for Python', version='0.00.001', binaryMediaTypes=[ '*' ] ) except botocore.exceptions.ClientError as error: logger.exception("Couldn't create REST API %s.", error) raise attribute=["id","name","description","createdDate","version","binaryMediaTypes","apiKeySource","endpointConfiguration","disableExecuteApiEndpoint","rootResourceId"] filtered_result ={key:result[key] for key in attribute} print(filtered_result)

    成功的呼叫會在輸出中傳回 API ID 和 API 的根資源 ID,如下所示:

    {'id': 'abc1234', 'name': 'Simple PetStore (Python SDK)', 'description': 'Demo API created using the AWS SDK for Python', 'createdDate': datetime.datetime(2024, 4, 3, 14, 31, 39, tzinfo=tzlocal()), 'version': '0.00.001', 'binaryMediaTypes': ['*'], 'apiKeySource': 'HEADER', 'endpointConfiguration': {'types': ['EDGE']}, 'disableExecuteApiEndpoint': False, 'rootResourceId': 'efg567'}
    AWS CLI
    aws apigateway create-rest-api --name 'Simple PetStore (AWS CLI)' --region us-west-2

    以下是此命令的輸出:

    { "id": "abcd1234", "name": "Simple PetStore (AWS CLI)", "createdDate": "2022-12-15T08:07:04-08:00", "apiKeySource": "HEADER", "endpointConfiguration": { "types": [ "EDGE" ] }, "disableExecuteApiEndpoint": false, "rootResourceId": "efg567" }

    您建立的 API 具有的 API ID 以abcd1234及的根資源識別碼efg567。您可以在 API 的設置中使用這些值。

  2. 接下來,在根下附加一個子資源,並將其指定RootResourceIdparentId屬性值。使用以下示例為您的 API 創建/pets資源:

    JavaScript v3
    import {APIGatewayClient, CreateResourceCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new CreateResourceCommand({ restApiId: 'abcd1234', parentId: 'efg567', pathPart: 'pets' }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("The '/pets' resource setup failed:\n", err) } })();

    成功的呼叫會在輸出中傳回有關資源的資訊,如下所示:

    { "path": "/pets", "pathPart": "pets", "id": "aaa111", "parentId": "efg567'" }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.create_resource( restApiId='abcd1234', parentId='efg567', pathPart='pets' ) except botocore.exceptions.ClientError as error: logger.exception("The '/pets' resource setup failed: %s.", error) raise attribute=["id","parentId", "pathPart", "path",] filtered_result ={key:result[key] for key in attribute} print(filtered_result)

    成功的呼叫會在輸出中傳回有關資源的資訊,如下所示:

    {'id': 'aaa111', 'parentId': 'efg567', 'pathPart': 'pets', 'path': '/pets'}
    AWS CLI
    aws apigateway create-resource --rest-api-id abcd1234 \ --region us-west-2 \ --parent-id efg567 \ --path-part pets

    以下是此命令的輸出:

    { "id": "aaa111", "parentId": "efg567", "pathPart": "pets", "path": "/pets" }

    您建立的/pets資源具有的資源 ID aaa111。您可以在 API 的設置中使用此值。

  3. 接下來,在資源下附加子資/pets源。此資源/{petId}具有 {petId} .To 使路徑部分成為路徑參數的 path 參數,請將其括在一對大括號中。{ }使用以下示例為您的 API 創建/pets/{petId}資源:

    JavaScript v3
    import {APIGatewayClient, CreateResourceCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new CreateResourceCommand({ restApiId: 'abcd1234', parentId: 'aaa111', pathPart: '{petId}' }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("The '/pets/{petId}' resource setup failed:\n", err) } })();

    成功的呼叫會在輸出中傳回有關資源的資訊,如下所示:

    { "path": "/pets/{petId}", "pathPart": "{petId}", "id": "bbb222", "parentId": "aaa111'" }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.create_resource( restApiId='abcd1234', parentId='aaa111', pathPart='{petId}' ) except botocore.exceptions.ClientError as error: logger.exception("The '/pets/{petId}' resource setup failed: %s.", error) raise attribute=["id","parentId", "pathPart", "path",] filtered_result ={key:result[key] for key in attribute} print(filtered_result)

    成功的呼叫會在輸出中傳回有關資源的資訊,如下所示:

    {'id': 'bbb222', 'parentId': 'aaa111', 'pathPart': '{petId}', 'path': '/pets/{petId}'}
    AWS CLI
    aws apigateway create-resource --rest-api-id abcd1234 \ --region us-west-2 \ --parent-id aaa111 \ --path-part '{petId}'

    如果成功,此命令會傳回下列回應:

    { "id": "bbb222", "parentId": "aaa111", "path": "/pets/{petId}", "pathPart": "{petId}" }

    您建立的/pets/{petId}資源具有的資源 ID bbb222。您可以在 API 的設置中使用此值。

  4. 在下面的兩個步驟中,您將 HTTP 方法添加到您的資源。在本自學課程中,您將方法設定為設定為,將方法設定authorization-type為具有開放存取權NONE。若只要允許已驗證的使用者呼叫方法,您可以使用 IAM 角色與政策、Lambda 授權方 (先前稱為自訂授權方) 或 Amazon Cognito 使用者集區。如需詳細資訊,請參閱 在 API Gateway 中控制和管理對 REST API 的存取

    下列範例會在/pets資源上新增 GET HTTP 方法:

    JavaScript v3
    import {APIGatewayClient, PutMethodCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new PutMethodCommand({ restApiId: 'abcd1234', resourceId: 'aaa111', httpMethod: 'GET', authorizationType: 'NONE' }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("The 'GET /pets' method setup failed:\n", err) } })();

    成功的呼叫會傳回下列輸出:

    { "apiKeyRequired": false, "httpMethod": "GET", "authorizationType": "NONE" }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.put_method( restApiId='abcd1234', resourceId='aaa111', httpMethod='GET', authorizationType='NONE' ) except botocore.exceptions.ClientError as error: logger.exception("The 'GET /pets' method setup failed: %s", error) raise attribute=["httpMethod","authorizationType","apiKeyRequired"] filtered_result ={key:result[key] for key in attribute} print(filtered_result)

    成功的呼叫會傳回下列輸出:

    {'httpMethod': 'GET', 'authorizationType': 'NONE', 'apiKeyRequired': False}
    AWS CLI
    aws apigateway put-method --rest-api-id abcd1234 \ --resource-id aaa111 \ --http-method GET \ --authorization-type "NONE" \ --region us-west-2

    以下是此命令的成功輸出:

    { "httpMethod": "GET", "authorizationType": "NONE", "apiKeyRequired": false }
  5. 下列範例會在/pets/{petId}資源上新增 GET HTTP 方法,並將requestParameters屬性設定為將用戶端提供的petId值傳遞至後端:

    JavaScript v3
    import {APIGatewayClient, PutMethodCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new PutMethodCommand({ restApiId: 'abcd1234', resourceId: 'bbb222', httpMethod: 'GET', authorizationType: 'NONE' requestParameters: { "method.request.path.petId" : true } }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("The 'GET /pets/{petId}' method setup failed:\n", err) } })();

    成功的呼叫會傳回下列輸出:

    { "apiKeyRequired": false, "httpMethod": "GET", "authorizationType": "NONE", "requestParameters": { "method.request.path.petId": true } }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.put_method( restApiId='abcd1234', resourceId='bbb222', httpMethod='GET', authorizationType='NONE', requestParameters={ "method.request.path.petId": True } ) except botocore.exceptions.ClientError as error: logger.exception("The 'GET /pets/{petId}' method setup failed: %s", error) raise attribute=["httpMethod","authorizationType","apiKeyRequired", "requestParameters" ] filtered_result ={key:result[key] for key in attribute} print(filtered_result)

    成功的呼叫會傳回下列輸出:

    {'httpMethod': 'GET', 'authorizationType': 'NONE', 'apiKeyRequired': False, 'requestParameters': {'method.request.path.petId': True}}
    AWS CLI
    aws apigateway put-method --rest-api-id abcd1234 \ --resource-id bbb222 --http-method GET \ --authorization-type "NONE" \ --region us-west-2 \ --request-parameters method.request.path.petId=true

    以下是此命令的成功輸出:

    { "httpMethod": "GET", "authorizationType": "NONE", "apiKeyRequired": false, "requestParameters": { "method.request.path.petId": true } }
  6. 使用下列範例來新增方法的 200 OK 方GET /pets法回應:

    JavaScript v3
    import {APIGatewayClient, PutMethodResponseCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new PutMethodResponseCommand({ restApiId: 'abcd1234', resourceId: 'aaa111', httpMethod: 'GET', statusCode: '200' }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("Set up the 200 OK response for the 'GET /pets' method failed:\n", err) } })();

    成功的呼叫會傳回下列輸出:

    { "statusCode": "200" }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.put_method_response( restApiId='abcd1234', resourceId='aaa111', httpMethod='GET', statusCode='200' ) except botocore.exceptions.ClientError as error: logger.exception("Set up the 200 OK response for the 'GET /pets' method failed %s.", error) raise attribute=["statusCode"] filtered_result ={key:result[key] for key in attribute} logger.info(filtered_result)

    成功的呼叫會傳回下列輸出:

    {'statusCode': '200'}
    AWS CLI
    aws apigateway put-method-response --rest-api-id abcd1234 \ --resource-id aaa111 --http-method GET \ --status-code 200 --region us-west-2

    以下是此命令的輸出:

    { "statusCode": "200" }
  7. 使用下列範例來新增方法的 200 OK 方GET /pets/{petId}法回應:

    JavaScript v3
    import {APIGatewayClient, PutMethodResponseCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new PutMethodResponseCommand({ restApiId: 'abcd1234', resourceId: 'bbb222', httpMethod: 'GET', statusCode: '200' }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("Set up the 200 OK response for the 'GET /pets/{petId}' method failed:\n", err) } })();

    成功的呼叫會傳回下列輸出:

    { "statusCode": "200" }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.put_method_response( restApiId='abcd1234', resourceId='bbb222', httpMethod='GET', statusCode='200' ) except botocore.exceptions.ClientError as error: logger.exception("Set up the 200 OK response for the 'GET /pets/{petId}' method failed %s.", error) raise attribute=["statusCode"] filtered_result ={key:result[key] for key in attribute} logger.info(filtered_result)

    成功的呼叫會傳回下列輸出:

    {'statusCode': '200'}
    AWS CLI
    aws apigateway put-method-response --rest-api-id abcd1234 \ --resource-id bbb222 --http-method GET \ --status-code 200 --region us-west-2

    以下是此命令的輸出:

    { "statusCode": "200" }
  8. 下列範例會針對具有 HTTP 端點的方GET /pets法設定整合。HTTP 端點是http://petstore-demo-endpoint.execute-api.com/petstore/pets

    JavaScript v3
    import {APIGatewayClient, PutIntegrationCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new PutIntegrationCommand({ restApiId: 'abcd1234', resourceId: 'aaa111', httpMethod: 'GET', type: 'HTTP', integrationHttpMethod: 'GET', uri: 'http://petstore-demo-endpoint.execute-api.com/petstore/pets' }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("Set up the integration of the 'GET /pets' method of the API failed:\n", err) } })();

    成功的呼叫會傳回下列輸出:

    { "httpMethod": "GET", "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "type": "HTTP", "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets", "cacheNamespace": "ccc333" }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.put_integration( restApiId='abcd1234', resourceId='aaa111', httpMethod='GET', type='HTTP', integrationHttpMethod='GET', uri='http://petstore-demo-endpoint.execute-api.com/petstore/pets' ) except botocore.exceptions.ClientError as error: logger.exception("Set up the integration of the 'GET /' method of the API failed %s.", error) raise attribute=["httpMethod","passthroughBehavior","cacheKeyParameters", "type", "uri", "cacheNamespace"] filtered_result ={key:result[key] for key in attribute} print(filtered_result)

    成功的呼叫會傳回下列輸出:

    {'httpMethod': 'GET', 'passthroughBehavior': 'WHEN_NO_MATCH', 'cacheKeyParameters': [], 'type': 'HTTP', 'uri': 'http://petstore-demo-endpoint.execute-api.com/petstore/pets', 'cacheNamespace': 'ccc333'}
    AWS CLI
    aws apigateway put-integration --rest-api-id abcd1234 \ --resource-id aaa111 --http-method GET --type HTTP \ --integration-http-method GET \ --uri 'http://petstore-demo-endpoint.execute-api.com/petstore/pets' \ --region us-west-2

    以下是此命令的輸出:

    { "type": "HTTP", "httpMethod": "GET", "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets", "connectionType": "INTERNET", "passthroughBehavior": "WHEN_NO_MATCH", "timeoutInMillis": 29000, "cacheNamespace": "6sxz2j", "cacheKeyParameters": [] }
  9. 下列範例會針對具有 HTTP 端點的方GET /pets/{petId}法設定整合。HTTP 端點是http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}。在此步驟中,您會將 path 參數petId對應至的整合端點路徑參數id

    JavaScript v3
    import {APIGatewayClient, PutIntegrationCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new PutIntegrationCommand({ restApiId: 'abcd1234', resourceId: 'bbb222', httpMethod: 'GET', type: 'HTTP', integrationHttpMethod: 'GET', uri: 'http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}' requestParameters: { "integration.request.path.id": "method.request.path.petId" } }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("Set up the integration of the 'GET /pets/{petId}' method of the API failed:\n", err) } })();

    成功的呼叫會傳回下列輸出:

    { "httpMethod": "GET", "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "type": "HTTP", "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}", "cacheNamespace": "ddd444", "requestParameters": { "integration.request.path.id": "method.request.path.petId" } }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.put_integration( restApiId='ieps9b05sf', resourceId='t8zeb4', httpMethod='GET', type='HTTP', integrationHttpMethod='GET', uri='http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}', requestParameters={ "integration.request.path.id": "method.request.path.petId" } ) except botocore.exceptions.ClientError as error: logger.exception("Set up the integration of the 'GET /pets/{petId}' method of the API failed %s.", error) raise attribute=["httpMethod","passthroughBehavior","cacheKeyParameters", "type", "uri", "cacheNamespace", "requestParameters"] filtered_result ={key:result[key] for key in attribute} print(filtered_result)

    成功的呼叫會傳回下列輸出:

    {'httpMethod': 'GET', 'passthroughBehavior': 'WHEN_NO_MATCH', 'cacheKeyParameters': [], 'type': 'HTTP', 'uri': 'http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}', 'cacheNamespace': 'ddd444', 'requestParameters': {'integration.request.path.id': 'method.request.path.petId'}}}
    AWS CLI
    aws apigateway put-integration --rest-api-id abcd1234 \ --resource-id bbb222 --http-method GET --type HTTP \ --integration-http-method GET \ --uri 'http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}' \ --request-parameters '{"integration.request.path.id":"method.request.path.petId"}' \ --region us-west-2

    以下是此命令的輸出:

    { "type": "HTTP", "httpMethod": "GET", "uri": "http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}", "connectionType": "INTERNET", "requestParameters": { "integration.request.path.id": "method.request.path.petId" }, "passthroughBehavior": "WHEN_NO_MATCH", "timeoutInMillis": 29000, "cacheNamespace": "rjkmth", "cacheKeyParameters": [] }
  10. 下列範例會新增整合的GET /pets整合回應:

    JavaScript v3
    import {APIGatewayClient, PutIntegrationResponseCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new PutIntegrationResponseCommand({ restApiId: 'abcd1234', resourceId: 'aaa111', httpMethod: 'GET', statusCode: '200', selectionPattern: '' }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("The 'GET /pets' method integration response setup failed:\n", err) } })();

    成功的呼叫會傳回下列輸出:

    { "selectionPattern": "", "statusCode": "200" }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.put_integration_response( restApiId='abcd1234', resourceId='aaa111', httpMethod='GET', statusCode='200', selectionPattern='', ) except botocore.exceptions.ClientError as error: logger.exception("Set up the integration response of the 'GET /pets' method of the API failed: %s", error) raise attribute=["selectionPattern","statusCode"] filtered_result ={key:result[key] for key in attribute} print(filtered_result)

    成功的呼叫會傳回下列輸出:

    {'selectionPattern': "", 'statusCode': '200'}
    AWS CLI
    aws apigateway put-integration-response --rest-api-id abcd1234 \ --resource-id aaa111 --http-method GET \ --status-code 200 --selection-pattern "" \ --region us-west-2

    以下是此命令的輸出:

    { "statusCode": "200", "selectionPattern": "" }
  11. 下列範例會新增整合的GET /pets/{petId}整合回應:

    JavaScript v3
    import {APIGatewayClient, PutIntegrationResponseCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new PutIntegrationResponseCommand({ restApiId: 'abcd1234', resourceId: 'bbb222', httpMethod: 'GET', statusCode: '200', selectionPattern: '' }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("The 'GET /pets/{petId}' method integration response setup failed:\n", err) } })();

    成功的呼叫會傳回下列輸出:

    { "selectionPattern": "", "statusCode": "200" }
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.put_integration_response( restApiId='abcd1234', resourceId='bbb222', httpMethod='GET', statusCode='200', selectionPattern='', ) except botocore.exceptions.ClientError as error: logger.exception("Set up the integration response of the 'GET /pets/{petId}' method of the API failed: %s", error) raise attribute=["selectionPattern","statusCode"] filtered_result ={key:result[key] for key in attribute} print(filtered_result)

    成功的呼叫會傳回下列輸出:

    {'selectionPattern': "", 'statusCode': '200'}
    AWS CLI
    aws apigateway put-integration-response --rest-api-id abcd1234 \ --resource-id bbb222 --http-method GET --status-code 200 --selection-pattern "" --region us-west-2

    以下是此命令的輸出:

    { "statusCode": "200", "selectionPattern": "" }

    建立整合回應後,您的 API 可以查詢 PetStore 網站上的可用寵物,並檢視指定識別碼的個別寵物。在您的客戶呼叫 API 之前,您必須先部署它。我們建議您在部署 API 之前先對其進行測試。

  12. 下列範例會測試方GET /pets法:

    JavaScript v3
    import {APIGatewayClient, TestInvokeMethodCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new TestInvokeMethodCommand({ restApiId: 'abcd1234', resourceId: 'aaa111', httpMethod: 'GET', pathWithQueryString: '/', }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("The test on 'GET /pets' method failed:\n", err) } })();
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.test_invoke_method( restApiId='abcd1234', resourceId='aaa111', httpMethod='GET', pathWithQueryString='/', ) except botocore.exceptions.ClientError as error: logger.exception("Test invoke method on 'GET /pets' failed: %s", error) raise print(result)
    AWS CLI
    aws apigateway test-invoke-method --rest-api-id abcd1234 / --resource-id aaa111 / --http-method GET / --path-with-query-string '/'
  13. 下列範例會測試 a 為 3 petIdGET /pets/{petId}方法:

    JavaScript v3
    import {APIGatewayClient, TestInvokeMethodCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new TestInvokeMethodCommand({ restApiId: 'abcd1234', resourceId: 'bbb222', httpMethod: 'GET', pathWithQueryString: '/pets/3', }); try { const results = await apig.send(command) console.log(results) } catch (err) { console.log("The test on 'GET /pets/{petId}' method failed:\n", err) } })();
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.test_invoke_method( restApiId='abcd1234', resourceId='bbb222', httpMethod='GET', pathWithQueryString='/pets/3', ) except botocore.exceptions.ClientError as error: logger.exception("Test invoke method on 'GET /pets/{petId}' failed: %s", error) raise print(result)
    AWS CLI
    aws apigateway test-invoke-method --rest-api-id abcd1234 / --resource-id bbb222 / --http-method GET / --path-with-query-string '/pets/3'

    成功測試 API 之後,您可以將其部署到階段。

  14. 下列範例會將您的 API 部署到名為test的階段。當您將 API 部署到階段時,API 呼叫者可以叫用您的 API。

    JavaScript v3
    import {APIGatewayClient, CreateDeploymentCommand } from "@aws-sdk/client-api-gateway"; (async function (){ const apig = new APIGatewayClient({region:"us-east-1"}); const command = new CreateDeploymentCommand({ restApiId: 'abcd1234', stageName: 'test', stageDescription: 'test deployment' }); try { const results = await apig.send(command) console.log("Deploying API succeeded\n", results) } catch (err) { console.log("Deploying API failed:\n", err) } })();
    Python
    import botocore import boto3 import logging logger = logging.getLogger() apig = boto3.client('apigateway') try: result = apig.create_deployment( restApiId='ieps9b05sf', stageName='test', stageDescription='my test stage', ) except botocore.exceptions.ClientError as error: logger.exception("Error deploying stage %s.", error) raise print('Deploying API succeeded') print(result)
    AWS CLI
    aws apigateway create-deployment --rest-api-id abcd1234 \ --region us-west-2 \ --stage-name test \ --stage-description 'Test stage' \ --description 'First deployment'

    以下是此命令的輸出:

    { "id": "ab1c1d", "description": "First deployment", "createdDate": "2022-12-15T08:44:13-08:00" }

    客戶現在可以調用您的 API。您可以通過在瀏覽器中輸入 https://abcd1234.execute-api.us-west-2.amazonaws.com/test/pets URL 來測試此 API,並abcd1234用 API 的標識符代替。

有關如何使用 SDK 建立或更新 API 的更多範例 AWS CLI,請參閱使用 AWS SDK 進行 API Gateway 的動作。 AWS

自動化 API 的設定

而不是創建您的 API step-by-step,您可以使用 OpenAPI 或地形來創建您的 API 來自動創建和清理 AWS 資源。 AWS CloudFormation

您可以將 OpenAPI 定義匯入 API Gateway。如需詳細資訊,請參閱 RESTAPIs使用 API「在API閘道開啟」開發

{ "openapi" : "3.0.1", "info" : { "title" : "Simple PetStore (OpenAPI)", "description" : "Demo API created using OpenAPI", "version" : "2024-05-24T20:39:34Z" }, "servers" : [ { "url" : "{basePath}", "variables" : { "basePath" : { "default" : "Prod" } } } ], "paths" : { "/pets" : { "get" : { "responses" : { "200" : { "description" : "200 response", "content" : { } } }, "x-amazon-apigateway-integration" : { "type" : "http", "httpMethod" : "GET", "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets", "responses" : { "default" : { "statusCode" : "200" } }, "passthroughBehavior" : "when_no_match", "timeoutInMillis" : 29000 } } }, "/pets/{petId}" : { "get" : { "parameters" : [ { "name" : "petId", "in" : "path", "required" : true, "schema" : { "type" : "string" } } ], "responses" : { "200" : { "description" : "200 response", "content" : { } } }, "x-amazon-apigateway-integration" : { "type" : "http", "httpMethod" : "GET", "uri" : "http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}", "responses" : { "default" : { "statusCode" : "200" } }, "requestParameters" : { "integration.request.path.id" : "method.request.path.petId" }, "passthroughBehavior" : "when_no_match", "timeoutInMillis" : 29000 } } } }, "components" : { } }

若要部署 AWS CloudFormation 範本,請參閱在AWS CloudFormation 主控台上建立堆疊

AWSTemplateFormatVersion: 2010-09-09 Resources: Api: Type: 'AWS::ApiGateway::RestApi' Properties: Name: Simple PetStore (AWS CloudFormation) PetsResource: Type: 'AWS::ApiGateway::Resource' Properties: RestApiId: !Ref Api ParentId: !GetAtt Api.RootResourceId PathPart: 'pets' PetIdResource: Type: 'AWS::ApiGateway::Resource' Properties: RestApiId: !Ref Api ParentId: !Ref PetsResource PathPart: '{petId}' PetsMethodGet: Type: 'AWS::ApiGateway::Method' Properties: RestApiId: !Ref Api ResourceId: !Ref PetsResource HttpMethod: GET AuthorizationType: NONE Integration: Type: HTTP IntegrationHttpMethod: GET Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/ IntegrationResponses: - StatusCode: '200' MethodResponses: - StatusCode: '200' PetIdMethodGet: Type: 'AWS::ApiGateway::Method' Properties: RestApiId: !Ref Api ResourceId: !Ref PetIdResource HttpMethod: GET AuthorizationType: NONE RequestParameters: method.request.path.petId: true Integration: Type: HTTP IntegrationHttpMethod: GET Uri: http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id} RequestParameters: integration.request.path.id: method.request.path.petId IntegrationResponses: - StatusCode: '200' MethodResponses: - StatusCode: '200' ApiDeployment: Type: 'AWS::ApiGateway::Deployment' DependsOn: - PetsMethodGet Properties: RestApiId: !Ref Api StageName: Prod Outputs: ApiRootUrl: Description: Root Url of the API Value: !Sub 'https://${Api}.execute-api.${AWS::Region}.amazonaws.com/Prod'

如需有關地形的詳細資訊,請參閱地形。

provider "aws" { region = "us-east-1" # Update with your desired region } resource "aws_api_gateway_rest_api" "Api" { name = "Simple PetStore (Terraform)" description = "Demo API created using Terraform" } resource "aws_api_gateway_resource" "petsResource"{ rest_api_id = aws_api_gateway_rest_api.Api.id parent_id = aws_api_gateway_rest_api.Api.root_resource_id path_part = "pets" } resource "aws_api_gateway_resource" "petIdResource"{ rest_api_id = aws_api_gateway_rest_api.Api.id parent_id = aws_api_gateway_resource.petsResource.id path_part = "{petId}" } resource "aws_api_gateway_method" "petsMethodGet" { rest_api_id = aws_api_gateway_rest_api.Api.id resource_id = aws_api_gateway_resource.petsResource.id http_method = "GET" authorization = "NONE" } resource "aws_api_gateway_method_response" "petsMethodResponseGet" { rest_api_id = aws_api_gateway_rest_api.Api.id resource_id = aws_api_gateway_resource.petsResource.id http_method = aws_api_gateway_method.petsMethodGet.http_method status_code ="200" } resource "aws_api_gateway_integration" "petsIntegration" { rest_api_id = aws_api_gateway_rest_api.Api.id resource_id = aws_api_gateway_resource.petsResource.id http_method = aws_api_gateway_method.petsMethodGet.http_method type = "HTTP" uri = "http://petstore-demo-endpoint.execute-api.com/petstore/pets" integration_http_method = "GET" depends_on = [aws_api_gateway_method.petsMethodGet] } resource "aws_api_gateway_integration_response" "petsIntegrationResponse" { rest_api_id = aws_api_gateway_rest_api.Api.id resource_id = aws_api_gateway_resource.petsResource.id http_method = aws_api_gateway_method.petsMethodGet.http_method status_code = aws_api_gateway_method_response.petsMethodResponseGet.status_code } resource "aws_api_gateway_method" "petIdMethodGet" { rest_api_id = aws_api_gateway_rest_api.Api.id resource_id = aws_api_gateway_resource.petIdResource.id http_method = "GET" authorization = "NONE" request_parameters = {"method.request.path.petId" = true} } resource "aws_api_gateway_method_response" "petIdMethodResponseGet" { rest_api_id = aws_api_gateway_rest_api.Api.id resource_id = aws_api_gateway_resource.petIdResource.id http_method = aws_api_gateway_method.petIdMethodGet.http_method status_code ="200" } resource "aws_api_gateway_integration" "petIdIntegration" { rest_api_id = aws_api_gateway_rest_api.Api.id resource_id = aws_api_gateway_resource.petIdResource.id http_method = aws_api_gateway_method.petIdMethodGet.http_method type = "HTTP" uri = "http://petstore-demo-endpoint.execute-api.com/petstore/pets/{id}" integration_http_method = "GET" request_parameters = {"integration.request.path.id" = "method.request.path.petId"} depends_on = [aws_api_gateway_method.petIdMethodGet] } resource "aws_api_gateway_integration_response" "petIdIntegrationResponse" { rest_api_id = aws_api_gateway_rest_api.Api.id resource_id = aws_api_gateway_resource.petIdResource.id http_method = aws_api_gateway_method.petIdMethodGet.http_method status_code = aws_api_gateway_method_response.petIdMethodResponseGet.status_code } resource "aws_api_gateway_deployment" "Deployment" { rest_api_id = aws_api_gateway_rest_api.Api.id depends_on = [aws_api_gateway_integration.petsIntegration,aws_api_gateway_integration.petIdIntegration ] } resource "aws_api_gateway_stage" "Stage" { stage_name = "Prod" rest_api_id = aws_api_gateway_rest_api.Api.id deployment_id = aws_api_gateway_deployment.Deployment.id }