

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Kembangkan HTTP APIs di API Gateway
<a name="http-api-develop"></a>

Bagian ini memberikan detail tentang kemampuan API Gateway yang Anda butuhkan saat mengembangkan API Gateway APIs.

Saat Anda mengembangkan API Gateway API, Anda memutuskan sejumlah karakteristik API Anda. Karakteristik ini bergantung pada kasus penggunaan API Anda. Misalnya, Anda mungkin hanya ingin mengizinkan klien tertentu untuk memanggil API Anda, atau Anda mungkin ingin itu tersedia untuk semua orang. Anda mungkin ingin panggilan API untuk menjalankan fungsi Lambda, membuat kueri database, atau memanggil aplikasi.

**Topics**
+ [

## Buat API HTTP
](#http-api-examples)
+ [

# Buat rute untuk HTTP APIs di API Gateway
](http-api-develop-routes.md)
+ [

# Jenis alamat IP untuk HTTP APIs di API Gateway
](http-api-ip-address-type.md)
+ [

# Kontrol dan kelola akses ke HTTP APIs di API Gateway
](http-api-access-control.md)
+ [

# Buat integrasi untuk HTTP APIs di API Gateway
](http-api-develop-integrations.md)
+ [

# Konfigurasikan CORS untuk HTTP APIs di API Gateway
](http-api-cors.md)
+ [

# Mengubah permintaan dan tanggapan API untuk HTTP APIs di API Gateway
](http-api-parameter-mapping.md)
+ [

# Gunakan definisi OpenAPI untuk HTTP APIs di API Gateway
](http-api-open-api.md)

## Buat API HTTP
<a name="http-api-examples"></a>

Untuk membuat API fungsional, Anda harus memiliki setidaknya satu rute, integrasi, tahapan, dan penerapan.

Contoh berikut menunjukkan cara membuat API dengan integrasi AWS Lambda atau HTTP, rute, dan tahap default yang dikonfigurasi untuk menerapkan perubahan secara otomatis.

Panduan ini mengasumsikan bahwa Anda sudah terbiasa dengan API Gateway dan Lambda. Untuk panduan yang lebih rinci, lihat[Memulai dengan API Gateway](getting-started.md).

**Topics**
+ [

### Buat API HTTP dengan menggunakan Konsol Manajemen AWS
](#apigateway-http-api-create.console)
+ [

### Buat API HTTP dengan menggunakan AWS CLI
](#http-api-examples.cli.quick-create)

### Buat API HTTP dengan menggunakan Konsol Manajemen AWS
<a name="apigateway-http-api-create.console"></a>

1. Buka [konsol API Gateway](https://console.aws.amazon.com/apigateway).

1. Pilih **Buat API**.

1. Di bawah **HTTP API**, pilih **Build**.

1. Pilih **Tambahkan integrasi**, lalu pilih AWS Lambda fungsi atau masukkan titik akhir HTTP.

1. Untuk **Nama**, masukkan nama untuk API Anda.

1. Pilih **Periksa dan buat**.

1. Pilih **Buat**.

Sekarang API Anda siap untuk dipanggil. Anda dapat menguji API Anda dengan memasukkan URL pemanggilannya di browser, atau dengan menggunakan Curl.

```
curl https://api-id.execute-api.us-east-2.amazonaws.com
```

### Buat API HTTP dengan menggunakan AWS CLI
<a name="http-api-examples.cli.quick-create"></a>

Anda dapat menggunakan quick create untuk membuat API dengan integrasi Lambda atau HTTP, rute catch-all default, dan tahap default yang dikonfigurasi untuk menerapkan perubahan secara otomatis. Perintah [create-api](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-api.html) berikut menggunakan quick create untuk membuat API yang terintegrasi dengan fungsi Lambda di backend.

**catatan**  
Untuk memanggil integrasi Lambda, API Gateway harus memiliki izin yang diperlukan. Anda dapat menggunakan kebijakan berbasis sumber daya atau IAM role untuk memberikan izin API Gateway guna menjalankan fungsi Lambda. Untuk mempelajari lebih lanjut, lihat [AWS Lambda Izin](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html) di *Panduan AWS Lambda Pengembang*.

**Example**  

```
aws apigatewayv2 create-api --name my-api --protocol-type HTTP --target arn:aws:lambda:us-east-2:123456789012:function:function-name
```

Sekarang API Anda siap untuk dipanggil. Anda dapat menguji API Anda dengan memasukkan URL pemanggilannya di browser, atau dengan menggunakan Curl.

```
curl https://api-id.execute-api.us-east-2.amazonaws.com
```

# Buat rute untuk HTTP APIs di API Gateway
<a name="http-api-develop-routes"></a>

Merutekan permintaan API yang masuk langsung ke sumber daya backend. Rute terdiri dari dua bagian: metode HTTP dan jalur sumber daya—misalnya,. `GET /pets` Anda dapat menentukan metode HTTP spesifik untuk rute Anda. Atau, Anda dapat menggunakan `ANY` metode untuk mencocokkan semua metode yang belum Anda tetapkan untuk sumber daya. Anda dapat membuat `$default` rute yang bertindak sebagai tangkapan semua untuk permintaan yang tidak cocok dengan rute lain.

**catatan**  
API Gateway menerjemahkan parameter permintaan yang disandikan URL sebelum meneruskannya ke integrasi backend Anda.

## Bekerja dengan variabel jalur
<a name="http-api-routes-path-variables"></a>

Anda dapat menggunakan variabel jalur di rute API HTTP.

Misalnya, `GET /pets/{petID}` rute menangkap `GET` permintaan yang dikirimkan klien. `https://api-id.execute-api.us-east-2.amazonaws.com/pets/6` 

*Variabel jalur serakah* menangkap semua sumber daya anak dari suatu rute. Untuk membuat variabel jalur serakah, tambahkan `+` ke nama variabel—misalnya,. `{proxy+}` Variabel jalur serakah harus berada di ujung jalur sumber daya.

## Bekerja dengan parameter string kueri
<a name="http-api-routes-query-string-parameters"></a>

Secara default, API Gateway mengirimkan parameter string kueri ke integrasi backend Anda jika mereka disertakan dalam permintaan ke API HTTP.

Misalnya, ketika klien mengirim permintaan ke`https://api-id.execute-api.us-east-2.amazonaws.com/pets?id=4&type=dog`, parameter string kueri `?id=4&type=dog` dikirim ke integrasi Anda.

## Bekerja dengan `$default` rute
<a name="http-api-develop-routes.default"></a>

`$default`Rute menangkap permintaan yang tidak secara eksplisit cocok dengan rute lain di API Anda.

Saat `$default` rute menerima permintaan, API Gateway mengirimkan jalur permintaan lengkap ke integrasi. Misalnya, Anda dapat membuat API hanya dengan `$default` rute dan mengintegrasikannya pada `ANY` metode dengan titik akhir `https://petstore-demo-endpoint.execute-api.com` HTTP. Saat Anda mengirim permintaan ke`https://api-id.execute-api.us-east-2.amazonaws.com/store/checkout`, API Gateway mengirimkan permintaan ke`https://petstore-demo-endpoint.execute-api.com/store/checkout`.

Untuk mempelajari lebih lanjut tentang integrasi HTTP, lihat[Buat integrasi proxy HTTP untuk HTTP APIs](http-api-develop-integrations-http.md).

## Permintaan API perutean
<a name="http-api-develop-routes.evaluation"></a>

Saat klien mengirim permintaan API, API Gateway terlebih dahulu menentukan [tahap](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-stages.html) mana yang akan merutekan permintaan tersebut. Jika permintaan secara eksplisit cocok dengan tahapan, API Gateway mengirimkan permintaan ke tahap tersebut. Jika tidak ada tahap yang sepenuhnya cocok dengan permintaan, API Gateway mengirimkan permintaan ke `$default` panggung. Jika tidak ada `$default` tahap, maka API kembali `{"message":"Not Found"}` dan tidak menghasilkan CloudWatch log.

Setelah memilih tahapan, API Gateway memilih rute. API Gateway memilih rute dengan kecocokan paling spesifik, menggunakan prioritas berikut:

1. Pertandingan penuh untuk rute dan metode.

1. Cocokkan rute dan metode dengan variabel jalur serakah (`{proxy+}`).

1. `$default`Rute.

Jika tidak ada rute yang cocok dengan permintaan, API Gateway `{"message":"Not Found"}` akan kembali ke klien.

Misalnya, pertimbangkan API dengan `$default` tahapan dan contoh rute berikut:

1. `GET /pets/dog/1`

1. `GET /pets/dog/{id}`

1. `GET /pets/{proxy+}`

1. `ANY /{proxy+}`

1. `$default`

   Tabel berikut merangkum cara API Gateway merutekan permintaan ke rute contoh.


| Permintaan | Rute yang dipilih | Penjelasan | 
| --- | --- | --- | 
|  `GET https://api-id.execute-api.region.amazonaws.com/pets/dog/1`  |  `GET /pets/dog/1`  |  Permintaan sepenuhnya cocok dengan rute statis ini.  | 
|  `GET https://api-id.execute-api.region.amazonaws.com/pets/dog/2`  |  `GET /pets/dog/{id}`  |  Permintaan sepenuhnya cocok dengan rute ini.  | 
|  `GET https://api-id.execute-api.region.amazonaws.com/pets/cat/1`  |  `GET /pets/{proxy+}`  |  Permintaan tidak sepenuhnya cocok dengan rute. Rute dengan `GET` metode dan variabel jalur serakah menangkap permintaan ini.  | 
| `POST https://api-id.execute-api.region.amazonaws.com/test/5` | `ANY /{proxy+}` |  `ANY`Metode ini cocok dengan semua metode yang belum Anda tetapkan untuk rute. Rute dengan variabel jalur serakah memiliki prioritas lebih tinggi daripada `$default` rute.  | 

# Jenis alamat IP untuk HTTP APIs di API Gateway
<a name="http-api-ip-address-type"></a>

Saat membuat API, Anda menentukan jenis alamat IP yang dapat menjalankan API Anda. Anda dapat memilih IPv4 untuk menyelesaikan IPv4 alamat untuk menjalankan API Anda, atau Anda dapat memilih dualstack untuk mengizinkan keduanya IPv4 dan IPv6 alamat menjalankan API Anda. Anda mungkin ingin mengatur jenis alamat IP ke dualstack untuk mengurangi kelelahan ruang IP atau untuk postur keamanan Anda. [Untuk informasi selengkapnya tentang manfaat dari jenis alamat IP dualstack, lihat IPv6 di. AWS](https://docs.aws.amazon.com/whitepapers/latest/ipv6-on-aws/internet-protocol-version-6.html)

## Pertimbangan untuk jenis alamat IP
<a name="http-ip-address-type-considerations"></a>

Pertimbangan berikut dapat memengaruhi penggunaan jenis alamat IP Anda:
+ Jenis alamat IP default untuk HTTP APIs adalah IPv4.
+ Jika Anda mengubah jenis alamat IP untuk API yang ada dari IPv4 ke dualstack, konfirmasikan bahwa kebijakan apa pun yang mengontrol akses ke Anda APIs telah diperbarui untuk IPv6 memperhitungkan panggilan. Ketika Anda mengubah jenis alamat IP, perubahan akan segera berlaku. 
+ API Anda dapat dipetakan ke nama domain khusus dengan jenis alamat IP yang berbeda dari API Anda. Jika Anda menonaktifkan titik akhir API default, hal ini dapat memengaruhi cara penelepon dapat menjalankan API Anda.

## Mengubah jenis alamat IP dari API HTTP
<a name="http-ip-address-type-change"></a>

Anda dapat mengubah jenis alamat IP dengan memperbarui konfigurasi API. Anda dapat memperbarui konfigurasi API dengan menggunakan Konsol Manajemen AWS, the AWS CLI CloudFormation, atau AWS SDK. Jika Anda mengubah jenis alamat IP API, Anda tidak menerapkan ulang API agar perubahan diterapkan.

------
#### [ Konsol Manajemen AWS ]

**Untuk mengubah jenis alamat IP dari API HTTP**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih API HTTP.

1. Untuk **pengaturan API**, pilih **Edit**.

1. Untuk jenis alamat IP, pilih salah satu **IPv4**atau **Dualstack**.

1. Pilih **Simpan**.

   Perubahan pada konfigurasi API Anda akan segera berlaku.

------
#### [ AWS CLI ]

Perintah [update-api berikut memperbarui API](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-api.html) agar memiliki tipe alamat IP dualstack:

```
aws apigatewayv2 update-api \
    --api-id abcd1234 \
    --ip-address-type dualstack
```

Outputnya akan terlihat seperti berikut:

```
{
    "ApiEndpoint": "https://abcd1234.execute-api.us-east-1.amazonaws.com",
    "ApiId": "abcd1234",
    "ApiKeySelectionExpression": "$request.header.x-api-key",
    "CreatedDate": "2025-02-04T22:20:20+00:00",
    "DisableExecuteApiEndpoint": false,
    "Name": "My-HTTP-API",
    "ProtocolType": "HTTP",
    "RouteSelectionExpression": "$request.method $request.path",
    "Tags": {},
    "NotificationUris": [],
    "IpAddressType": "dualstack"
}
```

------

# Kontrol dan kelola akses ke HTTP APIs di API Gateway
<a name="http-api-access-control"></a>

API Gateway mendukung beberapa mekanisme untuk mengontrol dan mengelola akses ke HTTP API Anda:
+ **Otorisasi Lambda menggunakan** fungsi Lambda untuk mengontrol akses ke. APIs Untuk informasi selengkapnya, lihat [Kontrol akses ke HTTP APIs dengan AWS Lambda otorisasi](http-api-lambda-authorizer.md).
+ **Authorizer JWT** menggunakan token web JSON untuk mengontrol akses ke. APIs Untuk informasi selengkapnya, lihat [Kontrol akses ke HTTP APIs dengan otorisasi JWT di API Gateway](http-api-jwt-authorizer.md).
+ **Peran dan kebijakan AWS IAM standar** menawarkan kontrol akses yang fleksibel dan kuat. Anda dapat menggunakan peran dan kebijakan IAM untuk mengontrol siapa yang dapat membuat dan mengelola Anda APIs, serta siapa yang dapat memanggilnya. Untuk informasi selengkapnya, lihat [Kontrol akses ke HTTP APIs dengan otorisasi IAM di API Gateway](http-api-access-control-iam.md).

Untuk meningkatkan postur keamanan Anda, kami sarankan Anda mengonfigurasi otorisasi untuk semua rute di HTTP API Anda. Anda mungkin perlu melakukan ini untuk mematuhi berbagai kerangka kerja kepatuhan. Untuk informasi selengkapnya, lihat [kontrol Amazon API Gateway](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html) di *Panduan AWS Security Hub Pengguna*.

# Kontrol akses ke HTTP APIs dengan AWS Lambda otorisasi
<a name="http-api-lambda-authorizer"></a>

Anda menggunakan otorisasi Lambda untuk menggunakan fungsi Lambda untuk mengontrol akses ke HTTP API Anda. Kemudian, ketika klien memanggil API Anda, API Gateway memanggil fungsi Lambda Anda. API Gateway menggunakan respons dari fungsi Lambda Anda untuk menentukan apakah klien dapat mengakses API Anda.

## Versi format muatan
<a name="http-api-lambda-authorizer.payload-format"></a>

Versi format payload authorizer menentukan format data yang dikirimkan API Gateway ke pengotorisasi Lambda, dan bagaimana API Gateway menafsirkan respons dari Lambda. Jika Anda tidak menentukan versi format payload, akan Konsol Manajemen AWS menggunakan versi terbaru secara default. Jika Anda membuat otorisasi Lambda menggunakan AWS CLI,, atau SDK CloudFormation, Anda harus menentukan. `authorizerPayloadFormatVersion` Nilai yang di-support adalah `1.0` dan `2.0`. 

 Jika Anda membutuhkan kompatibilitas dengan REST APIs, gunakan versi`1.0`.

Contoh berikut menunjukkan struktur setiap versi format payload.

------
#### [ 2.0 ]

```
{
  "version": "2.0",
  "type": "REQUEST",
  "routeArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request",
  "identitySource": ["user1", "123"],
  "routeKey": "$default",
  "rawPath": "/my/path",
  "rawQueryString": "parameter1=value1&parameter1=value2&parameter2=value",
  "cookies": ["cookie1", "cookie2"],
  "headers": {
    "header1": "value1",
    "header2": "value2"
  },
  "queryStringParameters": {
    "parameter1": "value1,value2",
    "parameter2": "value"
  },
  "requestContext": {
    "accountId": "123456789012",
    "apiId": "api-id",
    "authentication": {
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "domainName": "id.execute-api.us-east-1.amazonaws.com",
    "domainPrefix": "id",
    "http": {
      "method": "POST",
      "path": "/my/path",
      "protocol": "HTTP/1.1",
      "sourceIp": "IP",
      "userAgent": "agent"
    },
    "requestId": "id",
    "routeKey": "$default",
    "stage": "$default",
    "time": "12/Mar/2020:19:03:58 +0000",
    "timeEpoch": 1583348638390
  },
  "pathParameters": { "parameter1": "value1" },
  "stageVariables": { "stageVariable1": "value1", "stageVariable2": "value2" }
}
```

------
#### [ 1.0 ]

```
{
  "version": "1.0",
  "type": "REQUEST",
  "methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request",
  "identitySource": "user1,123",
  "authorizationToken": "user1,123",
  "resource": "/request",
  "path": "/request",
  "httpMethod": "GET",
  "headers": {
    "X-AMZ-Date": "20170718T062915Z",
    "Accept": "*/*",
    "HeaderAuth1": "headerValue1",
    "CloudFront-Viewer-Country": "US",
    "CloudFront-Forwarded-Proto": "https",
    "CloudFront-Is-Tablet-Viewer": "false",
    "CloudFront-Is-Mobile-Viewer": "false",
    "User-Agent": "..."
  },
  "queryStringParameters": {
    "QueryString1": "queryValue1"
  },
  "pathParameters": {},
  "stageVariables": {
    "StageVar1": "stageValue1"
  },
  "requestContext": {
    "path": "/request",
    "accountId": "123456789012",
    "resourceId": "05c7jb",
    "stage": "test",
    "requestId": "...",
    "identity": {
      "apiKey": "...",
      "sourceIp": "...",
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "resourcePath": "/request",
    "httpMethod": "GET",
    "apiId": "abcdef123"
  }
}
```

------

## Format respons otorisasi Lambda
<a name="http-api-lambda-authorizer.payload-format-response"></a>

Versi format payload juga menentukan struktur respons yang harus Anda kembalikan dari fungsi Lambda Anda.

### Respons fungsi Lambda untuk format 1.0
<a name="http-api-lambda-authorizer.v1"></a>

Jika Anda memilih versi `1.0` format, otorisasi Lambda harus menampilkan kebijakan IAM yang mengizinkan atau menolak akses ke rute API Anda. Anda dapat menggunakan sintaks kebijakan IAM standar dalam kebijakan. Untuk contoh kebijakan IAM, lihat[Kontrol akses untuk menjalankan API](api-gateway-control-access-using-iam-policies-to-invoke-api.md). Anda dapat meneruskan properti konteks ke integrasi Lambda atau mengakses log dengan menggunakan. `$context.authorizer.property` `context`Objek adalah opsional dan `claims` merupakan placeholder yang dicadangkan dan tidak dapat digunakan sebagai objek konteks. Untuk mempelajari selengkapnya, lihat [Sesuaikan log akses HTTP API](http-api-logging-variables.md).

**Example**    
****  

```
{
  "principalId": "abcdef", 
  "policyDocument": {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow|Deny",
        "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]"
      }
    ]
  },
  "context": {
    "exampleKey": "exampleValue"
  }
}
```

### Respons fungsi Lambda untuk format 2.0
<a name="http-api-lambda-authorizer.v2"></a>

Jika Anda memilih versi `2.0` format, Anda dapat mengembalikan nilai Boolean atau kebijakan IAM yang menggunakan sintaks kebijakan IAM standar dari fungsi Lambda Anda. Untuk mengembalikan nilai Boolean, aktifkan tanggapan sederhana untuk otorisasi. Contoh berikut menunjukkan format yang harus Anda kodekan fungsi Lambda Anda untuk kembali. `context`Objek adalah opsional. Anda dapat meneruskan properti konteks ke integrasi Lambda atau mengakses log dengan menggunakan. `$context.authorizer.property` Untuk mempelajari selengkapnya, lihat [Sesuaikan log akses HTTP API](http-api-logging-variables.md).

------
#### [ Simple response ]

```
{
  "isAuthorized": true/false,
  "context": {
    "exampleKey": "exampleValue"
  }
}
```

------
#### [ IAM policy ]

****  

```
{
  "principalId": "abcdef", 
  "policyDocument": {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Action": "execute-api:Invoke",
        "Effect": "Allow|Deny",
        "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]"
      }
    ]
  },
  "context": {
    "exampleKey": "exampleValue"
  }
}
```

------

## Contoh fungsi otorisasi Lambda
<a name="http-api-lambda-authorizer.example-code"></a>

Contoh berikut fungsi Lambda Node.js menunjukkan format respons yang diperlukan yang perlu Anda kembalikan dari fungsi Lambda Anda untuk versi format payload. `2.0`

------
#### [ Simple response - Node.js ]

```
export const handler = async(event) => {
    let response = {
        "isAuthorized": false,
        "context": {
            "stringKey": "value",
            "numberKey": 1,
            "booleanKey": true,
            "arrayKey": ["value1", "value2"],
            "mapKey": {"value1": "value2"}
        }
    };
    
    if (event.headers.authorization === "secretToken") {
        console.log("allowed");
        response = {
            "isAuthorized": true,
            "context": {
                "stringKey": "value",
                "numberKey": 1,
                "booleanKey": true,
                "arrayKey": ["value1", "value2"],
                "mapKey": {"value1": "value2"}
            }
        };
    }

    return response;

};
```

------
#### [ Simple response - Python ]

```
import json


def lambda_handler(event, context):
    response = {
        "isAuthorized": False,
        "context": {
            "stringKey": "value",
            "numberKey": 1,
            "booleanKey": True,
            "arrayKey": ["value1", "value2"],
            "mapKey": {"value1": "value2"}
        }
    }

    try:
        if (event["headers"]["authorization"] == "secretToken"):
            response = {
                "isAuthorized": True,
                "context": {
                    "stringKey": "value",
                    "numberKey": 1,
                    "booleanKey": True,
                    "arrayKey": ["value1", "value2"],
                    "mapKey": {"value1": "value2"}
                }
            }
            print('allowed')
            return response
        else:
            print('denied')
            return response
    except BaseException:
        print('denied')
        return response
```

------
#### [ IAM policy - Node.js ]

```
export const handler = async(event) => {
  if (event.headers.authorization == "secretToken") {
    console.log("allowed");
    return {
      "principalId": "abcdef", // The principal user identification associated with the token sent by the client.
      "policyDocument": {
        "Version": "2012-10-17",		 	 	 
        "Statement": [{
          "Action": "execute-api:Invoke",
          "Effect": "Allow",
          "Resource": event.routeArn
        }]
      },
      "context": {
        "stringKey": "value",
        "numberKey": 1,
        "booleanKey": true,
        "arrayKey": ["value1", "value2"],
        "mapKey": { "value1": "value2" }
      }
    };
  }
  else {
    console.log("denied");
    return {
      "principalId": "abcdef", // The principal user identification associated with the token sent by the client.
      "policyDocument": {
        "Version": "2012-10-17",		 	 	 
        "Statement": [{
          "Action": "execute-api:Invoke",
          "Effect": "Deny",
          "Resource": event.routeArn
        }]
      },
      "context": {
        "stringKey": "value",
        "numberKey": 1,
        "booleanKey": true,
        "arrayKey": ["value1", "value2"],
        "mapKey": { "value1": "value2" }
      }
    };
  }
};
```

------
#### [ IAM policy - Python ]

```
import json


def lambda_handler(event, context):
    response = {
        # The principal user identification associated with the token sent by
        # the client.
        "principalId": "abcdef",
        "policyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [{
                "Action": "execute-api:Invoke",
                "Effect": "Deny",
                "Resource": event["routeArn"]
            }]
        },
        "context": {
            "stringKey": "value",
            "numberKey": 1,
            "booleanKey": True,
            "arrayKey": ["value1", "value2"],
            "mapKey": {"value1": "value2"}
        }
    }

    try:
        if (event["headers"]["authorization"] == "secretToken"):
            response = {
                # The principal user identification associated with the token
                # sent by the client.
                "principalId": "abcdef",
                "policyDocument": {
                    "Version": "2012-10-17",		 	 	 
                    "Statement": [{
                        "Action": "execute-api:Invoke",
                        "Effect": "Allow",
                        "Resource": event["routeArn"]
                    }]
                },
                "context": {
                    "stringKey": "value",
                    "numberKey": 1,
                    "booleanKey": True,
                    "arrayKey": ["value1", "value2"],
                    "mapKey": {"value1": "value2"}
                }
            }
            print('allowed')
            return response
        else:
            print('denied')
            return response
    except BaseException:
        print('denied')
        return response
```

------

## Sumber identitas
<a name="http-api-lambda-authorizer.identity-sources"></a>

Anda dapat secara opsional menentukan sumber identitas untuk otorisasi Lambda. Sumber identitas menentukan lokasi data yang diperlukan untuk mengotorisasi permintaan. Misalnya, Anda dapat menentukan nilai string header atau kueri sebagai sumber identitas. Jika Anda menentukan sumber identitas, klien harus memasukkannya dalam permintaan. Jika permintaan klien tidak menyertakan sumber identitas, API Gateway tidak memanggil otorisasi Lambda Anda, dan klien menerima kesalahan. `401`

Tabel berikut menjelaskan sumber identitas yang didukung untuk otorisasi Lambda.


| **Jenis** | **Contoh** | **Catatan** | 
| --- | --- | --- | 
| Nilai header | \$1 request.header. name | Nama header tidak peka huruf besar/kecil. | 
| Nilai string kueri | \$1request.querystring. name | Nama string kueri peka huruf besar/kecil. | 
| Variabel konteks | \$1 konteks. variableName | Nilai [variabel konteks](http-api-logging-variables.md) yang didukung. | 
| Variabel tahap | \$1 StageVariables. variableName | Nilai [variabel tahap](http-api-stages.stage-variables.md). | 

Anda juga dapat langsung kembali ` {"errorMessage" : "Unauthorized"}` dari fungsi Lambda Anda untuk mengembalikan `401` kesalahan ke klien Anda. Jika Anda langsung mengembalikan `401` kesalahan dari fungsi Lambda ke klien Anda, jangan tentukan sumber identitas apa pun saat Anda membuat otorisasi Lambda.

## Tanggapan otorisasi cache
<a name="http-api-lambda-authorizer.caching"></a>

Anda dapat mengaktifkan caching untuk otorisasi Lambda dengan menentukan file. [authorizerResultTtlInSeconds](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers.html#apis-apiid-authorizers-prop-createauthorizerinput-authorizerresultttlinseconds) Saat caching diaktifkan untuk otorisasi, API Gateway menggunakan sumber identitas otorisasi sebagai kunci cache. Jika klien menentukan parameter yang sama dalam sumber identitas dalam TTL yang dikonfigurasi, API Gateway menggunakan hasil otorisasi yang di-cache, daripada menjalankan fungsi Lambda Anda.

Untuk mengaktifkan caching, otorisasi Anda harus memiliki setidaknya satu sumber identitas.

Jika Anda mengaktifkan respons sederhana untuk otorisasi, respons otorisasi sepenuhnya mengizinkan atau menolak semua permintaan API yang cocok dengan nilai sumber identitas cache. Untuk izin yang lebih terperinci, nonaktifkan tanggapan sederhana dan kembalikan kebijakan IAM. Bergantung pada otorisasi Anda, kebijakan IAM Anda mungkin perlu mengontrol akses ke beberapa.

Secara default, API Gateway menggunakan respons otorisasi yang di-cache untuk semua rute API yang menggunakan otorisasi. Untuk menyimpan respons per rute, tambahkan `$context.routeKey` ke sumber identitas otorisasi Anda.

## Buat Authorizer Lambda
<a name="http-api-lambda-authorizer.example-create"></a>

Saat membuat otorisasi Lambda, Anda menentukan fungsi Lambda untuk API Gateway yang akan digunakan. Anda harus memberikan izin API Gateway untuk menjalankan fungsi Lambda dengan menggunakan kebijakan sumber daya fungsi atau peran IAM. Perintah [create-authorizer berikut membuat authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-authorizer.html) Lambda:

```
aws apigatewayv2 create-authorizer \
    --api-id abcdef123 \
    --authorizer-type REQUEST \
    --identity-source '$request.header.Authorization' \
    --name lambda-authorizer \ 
    --authorizer-uri 'arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:my-function/invocations' \
    --authorizer-payload-format-version '2.0' \
    --enable-simple-responses
```

Perintah [izin tambahan](https://docs.aws.amazon.com/cli/latest/reference/lambda/add-permission.html) berikut memperbarui kebijakan sumber daya fungsi Lambda untuk memberikan izin API Gateway untuk menjalankan fungsi tersebut. Jika API Gateway tidak memiliki izin untuk menjalankan fungsi Anda, klien akan menerima file. `500 Internal Server Error`

```
aws lambda add-permission \
    --function-name my-authorizer-function \
    --statement-id apigateway-invoke-permissions-abc123 \ 
    --action lambda:InvokeFunction \
    --principal apigateway.amazonaws.com \
    --source-arn "arn:aws:execute-api:us-west-2:123456789012:api-id/authorizers/authorizer-id"
```

Setelah Anda membuat otorisasi dan memberikan izin API Gateway untuk memanggilnya, perbarui rute Anda untuk menggunakan otorisasi. Perintah [update-route](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-route.html) berikut menambahkan Lambda authorizer ke rute. Jika otorisasi Lambda Anda menggunakan caching kebijakan, pastikan Anda memperbarui kebijakan untuk mengontrol akses untuk rute tambahan.

```
aws apigatewayv2 update-route \
    --api-id abcdef123 \
    --route-id abc123 \
    --authorization-type CUSTOM \
    --authorizer-id def123
```

## Memecahkan masalah otorisasi Lambda
<a name="http-api-lambda-authorizer.troubleshooting"></a>

Jika API Gateway tidak dapat memanggil otorisasi Lambda Anda, atau otorisasi Lambda Anda mengembalikan respons dalam format yang tidak valid, klien akan menerima file. `500 Internal Server Error`

Untuk memecahkan masalah kesalahan, [aktifkan pencatatan akses untuk tahap](http-api-logging.md) API Anda. Sertakan variabel `$context.authorizer.error` logging dalam format log Anda.

Jika log menunjukkan bahwa API Gateway tidak memiliki izin untuk menjalankan fungsi Anda, perbarui kebijakan sumber daya fungsi Anda atau berikan peran IAM untuk memberikan izin API Gateway untuk memanggil otorisasi Anda.

[Jika log menunjukkan bahwa fungsi Lambda Anda mengembalikan respons yang tidak valid, verifikasi bahwa fungsi Lambda Anda mengembalikan respons dalam format yang diperlukan.](#http-api-lambda-authorizer.payload-format-response)

# Kontrol akses ke HTTP APIs dengan otorisasi JWT di API Gateway
<a name="http-api-jwt-authorizer"></a>

Anda dapat menggunakan JSON Web Tokens (JWTs) sebagai bagian dari [OpenID Connect (](https://openid.net/specs/openid-connect-core-1_0.html)OIDC [OAuth )](https://oauth.net/2/) dan 2.0 framework untuk membatasi akses klien ke Anda. APIs

Jika Anda mengonfigurasi otorisasi JWT untuk rute API Anda, API Gateway memvalidasi yang dikirimkan klien dengan JWTs permintaan API. API Gateway memungkinkan atau menolak permintaan berdasarkan validasi token, dan secara opsional, cakupan dalam token. Jika Anda mengonfigurasi cakupan untuk rute, token harus menyertakan setidaknya satu cakupan rute.

Anda dapat mengonfigurasi otorisasi yang berbeda untuk setiap rute API, atau menggunakan otorisasi yang sama untuk beberapa rute.

**catatan**  
Tidak ada mekanisme standar untuk membedakan token akses JWT dari jenis lain JWTs, seperti token ID OpenID Connect. Kecuali Anda memerlukan token ID untuk otorisasi API, kami sarankan Anda mengonfigurasi rute Anda agar memerlukan cakupan otorisasi. Anda juga dapat mengonfigurasi otorisasi JWT Anda untuk meminta penerbit atau audiens yang hanya digunakan penyedia identitas Anda saat mengeluarkan token akses JWT.

## Mengotorisasi permintaan API dengan otorisasi JWT
<a name="http-api-jwt-authorizer.evaluation"></a>

API Gateway menggunakan alur kerja umum berikut untuk mengotorisasi permintaan ke rute yang dikonfigurasi untuk menggunakan otorisasi JWT. 

1. [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-prop-authorizer-identitysource](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-prop-authorizer-identitysource)Periksa token. `identitySource`Dapat hanya menyertakan token, atau token yang diawali dengan`Bearer`.

1. Mendekode token.

1. Periksa algoritma dan tanda tangan token dengan menggunakan kunci publik yang diambil dari penerbit. `jwks_uri` Saat ini, hanya algoritma berbasis RSA yang didukung. API Gateway dapat menyimpan kunci publik selama dua jam. Sebagai praktik terbaik, saat Anda memutar tombol, izinkan masa tenggang di mana kunci lama dan baru valid. 

1. Validasi klaim. API Gateway mengevaluasi klaim token berikut:
   +  [https://datatracker.ietf.org/doc/html/rfc7517#section-4.5](https://datatracker.ietf.org/doc/html/rfc7517#section-4.5)— Token harus memiliki klaim header yang cocok dengan kunci `jwks_uri` yang menandatangani token.
   + [https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.1](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.1)— Harus cocok dengan [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-model-jwtconfiguration](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-model-jwtconfiguration)yang dikonfigurasi untuk otorisasi.
   + [https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.3](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.3)atau `client_id` — Harus cocok dengan salah satu [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-model-jwtconfiguration](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-authorizers-authorizerid.html#apis-apiid-authorizers-authorizerid-model-jwtconfiguration)entri yang dikonfigurasi untuk otorisasi. API Gateway `client_id` hanya memvalidasi jika tidak `aud` ada. Saat keduanya `aud` dan `client_id` ada, API Gateway mengevaluasi. `aud`
   + [https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.4)— Harus setelah waktu saat ini di UTC. 
   + [https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.5](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.5)— Harus sebelum waktu saat ini di UTC. 
   + [https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.6](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.6)— Harus sebelum waktu saat ini di UTC. 
   + [https://datatracker.ietf.org/doc/html/rfc6749#section-3.3](https://datatracker.ietf.org/doc/html/rfc6749#section-3.3)atau `scp` — Token harus menyertakan setidaknya satu cakupan dalam rute. [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes-routeid.html#apis-apiid-routes-routeid-prop-updaterouteinput-authorizationscopes](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-routes-routeid.html#apis-apiid-routes-routeid-prop-updaterouteinput-authorizationscopes)

Jika salah satu langkah ini gagal, API Gateway menolak permintaan API.

Setelah memvalidasi JWT, API Gateway meneruskan klaim dalam token ke integrasi rute API. Sumber daya backend, seperti fungsi Lambda, dapat mengakses klaim JWT. Misalnya, jika JWT menyertakan klaim identitas`emailID`, itu tersedia untuk integrasi Lambda di. `$event.requestContext.authorizer.jwt.claims.emailID` Untuk informasi selengkapnya tentang payload yang dikirimkan API Gateway ke integrasi Lambda, lihat. [Buat integrasi AWS Lambda proxy untuk HTTP APIs di API Gateway](http-api-develop-integrations-lambda.md)

## Buat otorisasi JWT
<a name="http-api-jwt-authorizer.create"></a>

Sebelum Anda membuat otorisasi JWT, Anda harus mendaftarkan aplikasi klien dengan penyedia identitas. Anda juga harus membuat API HTTP. Untuk contoh pembuatan API HTTP, lihat[Buat API HTTP](http-api-develop.md#http-api-examples).

### Buat otorisasi JWT menggunakan konsol
<a name="http-api-jwt-authorizer.create.console"></a>

Langkah-langkah berikut menunjukkan cara membuat otorisasi JWT menggunakan konsol.

**Untuk membuat otorisasi JWT menggunakan konsol**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih API HTTP.

1. Di panel navigasi utama, pilih **Otorisasi**.

1. Pilih tab **Kelola otorisasi**.

1. Pilih **Buat**.

1. Untuk **jenis Authorizer**, pilih **JWT**.

1. Konfigurasikan otorisasi JWT Anda, dan tentukan **sumber Identitas** yang menentukan sumber token.

1. Pilih **Buat**.

#### Buat otorisasi JWT menggunakan AWS CLI
<a name="http-api-jwt-authorizer.create.cli"></a>

Perintah [create-authorizer berikut membuat authorizer](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-authorizer.html) JWT. Untuk`jwt-configuration`, tentukan `Audience` dan `Issuer` untuk penyedia identitas Anda. Jika Anda menggunakan Amazon Cognito sebagai penyedia identitas, itu adalah. `IssuerUrl` `https://cognito-idp.us-east-2.amazonaws.com/userPoolID`

```
aws apigatewayv2 create-authorizer \
    --name authorizer-name \
    --api-id api-id \
    --authorizer-type JWT \
    --identity-source '$request.header.Authorization' \
    --jwt-configuration Audience=audience,Issuer=IssuerUrl
```

##### Buat otorisasi JWT menggunakan AWS CloudFormation
<a name="http-api-jwt-cfn.create"></a>

 CloudFormation Template berikut membuat API HTTP dengan otorisasi JWT yang menggunakan Amazon Cognito sebagai penyedia identitas.

Output dari CloudFormation template adalah URL untuk UI yang dihosting Amazon Cognito tempat klien dapat mendaftar dan masuk untuk menerima JWT. Setelah klien masuk, klien dialihkan ke HTTP API Anda dengan token akses di URL. Untuk menjalankan API dengan token akses, ubah URL ke a `?` untuk menggunakan token sebagai parameter string kueri. `#`

##### Contoh CloudFormation template
<a name="http-api-jwt-cfn-example"></a>

```
AWSTemplateFormatVersion: '2010-09-09'
Description: |
  Example HTTP API with a JWT authorizer. This template includes an Amazon Cognito user pool as the issuer for the JWT authorizer 
  and an Amazon Cognito app client as the audience for the authorizer. The outputs include a URL for an Amazon Cognito hosted UI where clients can 
  sign up and sign in to receive a JWT. After a client signs in, the client is redirected to your HTTP API with an access token 
  in the URL. To invoke the API with the access token, change the '#' in the URL to a '?' to use the token as a query string parameter.

Resources:
  MyAPI:
    Type: AWS::ApiGatewayV2::Api
    Properties: 
      Description: Example HTTP API
      Name: api-with-auth
      ProtocolType: HTTP
      Target: !GetAtt MyLambdaFunction.Arn
  DefaultRouteOverrides:
    Type: AWS::ApiGatewayV2::ApiGatewayManagedOverrides
    Properties: 
      ApiId: !Ref MyAPI
      Route: 
        AuthorizationType: JWT
        AuthorizerId: !Ref JWTAuthorizer
  JWTAuthorizer:
    Type: AWS::ApiGatewayV2::Authorizer
    Properties: 
      ApiId: !Ref MyAPI
      AuthorizerType: JWT
      IdentitySource: 
        - '$request.querystring.access_token'
      JwtConfiguration: 
        Audience: 
        - !Ref AppClient
        Issuer: !Sub https://cognito-idp.${AWS::Region}.amazonaws.com/${UserPool}
      Name: test-jwt-authorizer
  MyLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: nodejs18.x
      Role: !GetAtt FunctionExecutionRole.Arn
      Handler: index.handler
      Code:
        ZipFile: |
          exports.handler = async (event) => {
              const response = {
                  statusCode: 200,
                  body: JSON.stringify('Hello from the ' + event.routeKey + ' route!'),
              };
              return response;
          };
  APIInvokeLambdaPermission:
    Type: AWS::Lambda::Permission
    Properties:
      FunctionName: !Ref MyLambdaFunction
      Action: lambda:InvokeFunction
      Principal: apigateway.amazonaws.com
      SourceArn: !Sub arn:${AWS::Partition}:execute-api:${AWS::Region}:${AWS::AccountId}:${MyAPI}/$default/$default
  FunctionExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17		 	 	 '
        Statement:
          - Effect: Allow
            Principal:
              Service:
              - lambda.amazonaws.com
            Action:
              - 'sts:AssumeRole'
      ManagedPolicyArns: 
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
  UserPool:
    Type: AWS::Cognito::UserPool
    Properties:
      UserPoolName: http-api-user-pool
      AutoVerifiedAttributes:
        - email
      Schema:
        - Name: name
          AttributeDataType: String
          Mutable: true
          Required: true
        - Name: email
          AttributeDataType: String
          Mutable: false
          Required: true
  AppClient:
    Type: AWS::Cognito::UserPoolClient
    Properties:
      AllowedOAuthFlows: 
        - implicit
      AllowedOAuthScopes: 
        - aws.cognito.signin.user.admin
        - email
        - openid
        - profile
      AllowedOAuthFlowsUserPoolClient: true
      ClientName: api-app-client
      CallbackURLs:
        - !Sub https://${MyAPI}.execute-api.${AWS::Region}.amazonaws.com
      ExplicitAuthFlows:
        - ALLOW_USER_PASSWORD_AUTH
        - ALLOW_REFRESH_TOKEN_AUTH
      UserPoolId: !Ref UserPool
      SupportedIdentityProviders:
        - COGNITO 
  HostedUI:
    Type: AWS::Cognito::UserPoolDomain
    Properties: 
      Domain: !Join
        - '-'
        - - !Ref MyAPI
          - !Ref AppClient
      UserPoolId: !Ref UserPool
Outputs:
  SignupURL:
    Value: !Sub https://${HostedUI}.auth.${AWS::Region}.amazoncognito.com/login?client_id=${AppClient}&response_type=token&scope=email+profile&redirect_uri=https://${MyAPI}.execute-api.${AWS::Region}.amazonaws.com
```

## Perbarui rute untuk menggunakan otorisasi JWT
<a name="http-api-jwt-authorizer.create.route"></a>

Anda dapat menggunakan konsol, SDK AWS CLI, atau AWS SDK untuk memperbarui rute untuk menggunakan otorisasi JWT.

### Perbarui rute untuk menggunakan otorisasi JWT dengan menggunakan konsol
<a name="http-api-jwt-authorizer.create.route"></a>

Langkah-langkah berikut menunjukkan cara memperbarui rute untuk menggunakan otorisasi JWT menggunakan konsol.

**Untuk membuat otorisasi JWT menggunakan konsol**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih API HTTP.

1. Di panel navigasi utama, pilih **Otorisasi**.

1. **Pilih metode, lalu pilih otorisasi Anda dari menu tarik-turun, dan pilih Lampirkan otorisasi.**

#### Perbarui rute untuk menggunakan otorisasi JWT dengan menggunakan AWS CLI
<a name="http-api-jwt-authorizer.create.route"></a>

Perintah [update-route](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-route.html) berikut memperbarui rute untuk menggunakan otorisasi JWT:

```
aws apigatewayv2 update-route \
   --api-id api-id  \
   --route-id route-id  \
   --authorization-type JWT \
   --authorizer-id authorizer-id \
   --authorization-scopes user.email
```

# Kontrol akses ke HTTP APIs dengan otorisasi IAM di API Gateway
<a name="http-api-access-control-iam"></a>

Anda dapat mengaktifkan otorisasi IAM untuk rute API HTTP. Ketika otorisasi IAM diaktifkan, klien harus menggunakan [Signature Version 4 (SigV4)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) untuk menandatangani permintaan mereka dengan kredensi. AWS API Gateway memanggil rute API Anda hanya jika klien memiliki `execute-api` izin untuk rute tersebut.

[Otorisasi IAM untuk HTTP APIs mirip dengan yang untuk REST. APIs](api-gateway-control-access-using-iam-policies-to-invoke-api.md)

**catatan**  
Kebijakan sumber daya saat ini tidak didukung untuk HTTP APIs.

Untuk contoh kebijakan IAM yang memberikan izin kepada klien untuk memanggil APIs, lihat. [Kontrol akses untuk menjalankan API](api-gateway-control-access-using-iam-policies-to-invoke-api.md)

## Aktifkan otorisasi IAM untuk rute
<a name="http-api-access-control-iam-example"></a>

Perintah [update-route](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-route.html) berikut memungkinkan otorisasi IAM untuk rute API HTTP:

```
aws apigatewayv2 update-route \
    --api-id abc123 \
    --route-id abcdef \
    --authorization-type AWS_IAM
```

# Buat integrasi untuk HTTP APIs di API Gateway
<a name="http-api-develop-integrations"></a>

*Integrasi* menghubungkan rute ke sumber daya backend. HTTP APIs mendukung Lambda proxy, AWS layanan, dan integrasi proxy HTTP. Misalnya, Anda dapat mengonfigurasi `POST` permintaan ke `/signup` rute API Anda untuk diintegrasikan dengan fungsi Lambda yang menangani pelanggan yang mendaftar.

**Topics**
+ [

# Buat integrasi AWS Lambda proxy untuk HTTP APIs di API Gateway
](http-api-develop-integrations-lambda.md)
+ [

# Buat integrasi proxy HTTP untuk HTTP APIs
](http-api-develop-integrations-http.md)
+ [

# Buat integrasi AWS layanan untuk HTTP APIs di API Gateway
](http-api-develop-integrations-aws-services.md)
+ [

# Buat integrasi pribadi untuk HTTP APIs di API Gateway
](http-api-develop-integrations-private.md)

# Buat integrasi AWS Lambda proxy untuk HTTP APIs di API Gateway
<a name="http-api-develop-integrations-lambda"></a>

Integrasi proxy Lambda memungkinkan Anda mengintegrasikan rute API dengan fungsi Lambda. Saat klien memanggil API Anda, API Gateway mengirimkan permintaan ke fungsi Lambda dan mengembalikan respons fungsi ke klien. Untuk contoh pembuatan API HTTP, lihat[Buat API HTTP](http-api-develop.md#http-api-examples).

## Versi format muatan
<a name="http-api-develop-integrations-lambda.proxy-format"></a>

Versi format payload menentukan format event yang dikirimkan API Gateway ke integrasi Lambda, dan bagaimana API Gateway menafsirkan respons dari Lambda. Jika Anda tidak menentukan versi format payload, akan Konsol Manajemen AWS menggunakan versi terbaru secara default. Jika Anda membuat integrasi Lambda menggunakan AWS CLI, CloudFormation, atau SDK, Anda harus menentukan. `payloadFormatVersion` Nilai yang di-support adalah `1.0` dan `2.0`.

Untuk informasi selengkapnya tentang cara menyetel`payloadFormatVersion`, lihat [create-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration.html). Untuk informasi selengkapnya tentang cara menentukan integrasi `payloadFormatVersion` yang ada, lihat [get-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/get-integration.html)

### Perbedaan format payload
<a name="http-api-develop-integrations-lambda.proxy-format-differences"></a>

Daftar berikut menunjukkan perbedaan antara versi format payload `1.0` dan `2.0` payload:
+ Format `2.0` tidak memiliki `multiValueHeaders` atau `multiValueQueryStringParameters` bidang. Header duplikat dikombinasikan dengan koma dan termasuk dalam bidang. `headers` String kueri duplikat digabungkan dengan koma dan disertakan dalam bidang. `queryStringParameters`
+ Format `2.0` memiliki`rawPath`. Jika Anda menggunakan pemetaan API untuk menghubungkan stage Anda ke nama domain kustom, tidak `rawPath` akan memberikan nilai pemetaan API. Gunakan format `1.0` dan `path` untuk mengakses pemetaan API untuk nama domain kustom Anda.
+ Format `2.0` termasuk `cookies` bidang baru. Semua header cookie dalam permintaan digabungkan dengan koma dan ditambahkan ke bidang. `cookies` Dalam menanggapi klien, setiap cookie menjadi `set-cookie` header.

### Struktur format muatan
<a name="http-api-develop-integrations-lambda.proxy-format-structure"></a>

Contoh berikut menunjukkan struktur setiap versi format payload. Semua headername diberi huruf kecil.

------
#### [ 2.0 ]

```
{
  "version": "2.0",
  "routeKey": "$default",
  "rawPath": "/my/path",
  "rawQueryString": "parameter1=value1&parameter1=value2&parameter2=value",
  "cookies": [
    "cookie1",
    "cookie2"
  ],
  "headers": {
    "header1": "value1",
    "header2": "value1,value2"
  },
  "queryStringParameters": {
    "parameter1": "value1,value2",
    "parameter2": "value"
  },
  "requestContext": {
    "accountId": "123456789012",
    "apiId": "api-id",
    "authentication": {
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "authorizer": {
      "jwt": {
        "claims": {
          "claim1": "value1",
          "claim2": "value2"
        },
        "scopes": [
          "scope1",
          "scope2"
        ]
      }
    },
    "domainName": "id.execute-api.us-east-1.amazonaws.com",
    "domainPrefix": "id",
    "http": {
      "method": "POST",
      "path": "/my/path",
      "protocol": "HTTP/1.1",
      "sourceIp": "192.0.2.1",
      "userAgent": "agent"
    },
    "requestId": "id",
    "routeKey": "$default",
    "stage": "$default",
    "time": "12/Mar/2020:19:03:58 +0000",
    "timeEpoch": 1583348638390
  },
  "body": "Hello from Lambda",
  "pathParameters": {
    "parameter1": "value1"
  },
  "isBase64Encoded": false,
  "stageVariables": {
    "stageVariable1": "value1",
    "stageVariable2": "value2"
  }
}
```

------
#### [ 1.0 ]

```
{
  "version": "1.0",
  "resource": "/my/path",
  "path": "/my/path",
  "httpMethod": "GET",
  "headers": {
    "header1": "value1",
    "header2": "value2"
  },
  "multiValueHeaders": {
    "header1": [
      "value1"
    ],
    "header2": [
      "value1",
      "value2"
    ]
  },
  "queryStringParameters": {
    "parameter1": "value1",
    "parameter2": "value"
  },
  "multiValueQueryStringParameters": {
    "parameter1": [
      "value1",
      "value2"
    ],
    "parameter2": [
      "value"
    ]
  },
  "requestContext": {
    "accountId": "123456789012",
    "apiId": "id",
    "authorizer": {
      "claims": null,
      "scopes": null
    },
    "domainName": "id.execute-api.us-east-1.amazonaws.com",
    "domainPrefix": "id",
    "extendedRequestId": "request-id",
    "httpMethod": "GET",
    "identity": {
      "accessKey": null,
      "accountId": null,
      "caller": null,
      "cognitoAuthenticationProvider": null,
      "cognitoAuthenticationType": null,
      "cognitoIdentityId": null,
      "cognitoIdentityPoolId": null,
      "principalOrgId": null,
      "sourceIp": "192.0.2.1",
      "user": null,
      "userAgent": "user-agent",
      "userArn": null,
      "clientCert": {
        "clientCertPem": "CERT_CONTENT",
        "subjectDN": "www.example.com",
        "issuerDN": "Example issuer",
        "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
        "validity": {
          "notBefore": "May 28 12:30:02 2019 GMT",
          "notAfter": "Aug  5 09:36:04 2021 GMT"
        }
      }
    },
    "path": "/my/path",
    "protocol": "HTTP/1.1",
    "requestId": "id=",
    "requestTime": "04/Mar/2020:19:15:17 +0000",
    "requestTimeEpoch": 1583349317135,
    "resourceId": null,
    "resourcePath": "/my/path",
    "stage": "$default"
  },
  "pathParameters": null,
  "stageVariables": null,
  "body": "Hello from Lambda!",
  "isBase64Encoded": false
}
```

------

## Format respons fungsi Lambda
<a name="http-api-develop-integrations-lambda.response"></a>

Versi format payload menentukan struktur respons yang harus dikembalikan oleh fungsi Lambda Anda.

### Respons fungsi Lambda untuk format 1.0
<a name="http-api-develop-integrations-lambda.v1"></a>

Dengan versi `1.0` format, integrasi Lambda harus mengembalikan respons dalam format JSON berikut:

**Example**  

```
{
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headername": "headervalue", ... },
    "multiValueHeaders": { "headername": ["headervalue", "headervalue2", ...], ... },
    "body": "..."
}
```

### Respons fungsi Lambda untuk format 2.0
<a name="http-api-develop-integrations-lambda.v2"></a>

Dengan versi `2.0` formatnya, API Gateway dapat menyimpulkan format respons untuk Anda. API Gateway membuat asumsi berikut jika fungsi Lambda Anda mengembalikan JSON yang valid dan tidak mengembalikan: `statusCode`
+ `isBase64Encoded` adalah `false`.
+ `statusCode` adalah `200`.
+ `content-type` adalah `application/json`.
+ `body`adalah respon dari fungsi tersebut.

Contoh berikut menunjukkan output dari fungsi Lambda dan interpretasi API Gateway.


| Keluaran fungsi Lambda | Interpretasi API Gateway | 
| --- | --- | 
|  <pre>"Hello from Lambda!"</pre>  |  <pre>{<br />  "isBase64Encoded": false,<br />  "statusCode": 200,<br />  "body": "Hello from Lambda!",<br />  "headers": {<br />    "content-type": "application/json"<br />  }<br />}</pre>  | 
|  <pre>{ "message": "Hello from Lambda!" }</pre>  |  <pre>{<br />  "isBase64Encoded": false,<br />  "statusCode": 200,<br />  "body": "{ \"message\": \"Hello from Lambda!\" }",<br />  "headers": {<br />    "content-type": "application/json"<br />  }<br />}</pre>  | 

Untuk menyesuaikan respons, fungsi Lambda Anda harus mengembalikan respons dengan format berikut.

```
{
    "cookies" : ["cookie1", "cookie2"],
    "isBase64Encoded": true|false,
    "statusCode": httpStatusCode,
    "headers": { "headername": "headervalue", ... },
    "body": "Hello from Lambda!"
}
```

# Buat integrasi proxy HTTP untuk HTTP APIs
<a name="http-api-develop-integrations-http"></a>

Integrasi proxy HTTP memungkinkan Anda menghubungkan rute API ke titik akhir HTTP yang dapat dirutekan secara publik. Dengan tipe integrasi ini, API Gateway meneruskan seluruh permintaan dan respons antara frontend dan backend. 

Untuk membuat integrasi proxy HTTP, berikan URL titik akhir HTTP yang dapat dirutekan secara publik.

## Integrasi proxy HTTP dengan variabel jalur
<a name="http-api-develop-integrations-http-proxy"></a>

Anda dapat menggunakan variabel jalur di rute API HTTP.

Misalnya, rute `/pets/{petID}` menangkap permintaan ke`/pets/6`. Anda dapat mereferensikan variabel jalur dalam URI integrasi untuk mengirim konten variabel ke integrasi. Contohnya adalah `/pets/extendedpath/{petID}`.

Anda dapat menggunakan variabel jalur serakah untuk menangkap semua sumber daya anak dari suatu rute. Untuk membuat variabel jalur serakah, tambahkan `+` ke nama variabel—misalnya,. `{proxy+}` 

Untuk menyiapkan rute dengan integrasi proxy HTTP yang menangkap semua permintaan, buat rute API dengan variabel jalur serakah (misalnya,`/parent/{proxy+}`). Integrasikan rute dengan titik akhir HTTP (misalnya,`https://petstore-demo-endpoint.execute-api.com/petstore/{proxy}`) pada `ANY` metode. Variabel jalur serakah harus berada di ujung jalur sumber daya.

# Buat integrasi AWS layanan untuk HTTP APIs di API Gateway
<a name="http-api-develop-integrations-aws-services"></a>

Anda dapat mengintegrasikan HTTP API Anda dengan AWS layanan dengan menggunakan *integrasi kelas satu*. Integrasi kelas satu menghubungkan rute API HTTP ke API AWS layanan. Saat klien memanggil rute yang didukung oleh integrasi kelas satu, API Gateway akan memanggil API AWS layanan untuk Anda. Misalnya, Anda dapat menggunakan integrasi kelas satu untuk mengirim pesan ke antrean Amazon Simple Queue Service, atau untuk memulai mesin status. AWS Step Functions Untuk tindakan layanan yang didukung, lihat[Referensi subtipe integrasi](http-api-develop-integrations-aws-services-reference.md).

## Parameter permintaan pemetaan
<a name="http-api-develop-integrations-aws-services-parameter-mapping"></a>

Integrasi kelas satu memiliki parameter yang diperlukan dan opsional. Anda harus mengkonfigurasi semua parameter yang diperlukan untuk membuat integrasi. Anda dapat menggunakan nilai statis atau parameter peta yang dievaluasi secara dinamis saat runtime. Untuk daftar lengkap integrasi dan parameter yang didukung, lihat[Referensi subtipe integrasi](http-api-develop-integrations-aws-services-reference.md).

Tabel berikut menjelaskan parameter permintaan pemetaan yang didukung.


| Tipe | Contoh | Catatan | 
| --- | --- | --- | 
| Nilai header | \$1 request.header. name | Nama header tidak peka huruf besar/kecil. API Gateway menggabungkan beberapa nilai header dengan koma, misalnya"header1": "value1,value2". | 
| Nilai string kueri | \$1request.querystring. name | Nama string kueri peka huruf besar/kecil. API Gateway menggabungkan beberapa nilai dengan koma, misalnya"querystring1": "Value1,Value2". | 
| Parameter jalur | \$1request.path. name | Nilai parameter jalur dalam permintaan. Misalnya jika rutenya/pets/\$1petId\$1, Anda dapat memetakan petId parameter dari permintaan dengan\$1request.path.petId. | 
| Minta passthrough tubuh | \$1 request.body | API Gateway melewati seluruh isi permintaan. | 
| Isi permintaan | \$1 request.body. name | [Ekspresi jalur JSON](https://goessner.net/articles/JsonPath/index.html#e2). Descent rekursif (\$1request.body..name) dan ekspresi filter (?(expression)) tidak didukung.  Saat Anda menentukan jalur JSON, API Gateway memotong isi permintaan pada 100 KB dan kemudian menerapkan ekspresi seleksi. Untuk mengirim muatan yang lebih besar dari 100 KB, tentukan`$request.body`.   | 
| Variabel konteks | \$1 konteks. variableName | Nilai [variabel konteks](http-api-logging-variables.md) yang didukung. | 
| Variabel tahap | \$1 StageVariables. variableName | Nilai [variabel tahap](http-api-stages.stage-variables.md). | 
| Nilai statis | string | Nilai konstan. | 

## Buat integrasi kelas satu
<a name="http-api-develop-integrations-aws-services-example"></a>

Sebelum membuat integrasi kelas satu, Anda harus membuat peran IAM yang memberikan izin API Gateway untuk menjalankan tindakan AWS layanan yang Anda integrasikan. Untuk mempelajari lebih lanjut, lihat [Membuat peran untuk AWS layanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html).

Untuk membuat integrasi kelas satu, pilih tindakan AWS layanan yang didukung, seperti`SQS-SendMessage`, mengonfigurasi parameter permintaan, dan berikan peran yang memberikan izin API Gateway untuk menjalankan API layanan terintegrasi. AWS Tergantung pada subtipe integrasi, parameter permintaan yang berbeda diperlukan. Untuk mempelajari selengkapnya, lihat [Referensi subtipe integrasi](http-api-develop-integrations-aws-services-reference.md).

Perintah [create-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration.html) berikut membuat integrasi yang mengirimkan pesan Amazon SQS:

```
aws apigatewayv2 create-integration \
    --api-id abcdef123 \
    --integration-subtype SQS-SendMessage \
    --integration-type AWS_PROXY \
    --payload-format-version 1.0 \
    --credentials-arn arn:aws:iam::123456789012:role/apigateway-sqs \
    --request-parameters '{"QueueUrl": "$request.header.queueUrl", "MessageBody": "$request.body.message"}'
```

## Buat integrasi kelas satu menggunakan CloudFormation
<a name="http-api-develop-integrations-aws-services-example-cfn"></a>

Contoh berikut menunjukkan CloudFormation cuplikan yang membuat `/{source}/{detailType}` rute dengan integrasi kelas satu dengan Amazon. EventBridge

`Source`Parameter dipetakan ke parameter `{source}` jalur, `DetailType` dipetakan ke parameter `{DetailType}` jalur, dan `Detail` parameter dipetakan ke badan permintaan.

Cuplikan tidak menampilkan bus acara atau peran IAM yang memberikan izin API Gateway untuk menjalankan tindakan. `PutEvents`

```
Route:
    Type: AWS::ApiGatewayV2::Route
    Properties:
      ApiId: !Ref HttpApi
      AuthorizationType: None
      RouteKey: 'POST /{source}/{detailType}'
      Target: !Join 
        - /
        - - integrations
          - !Ref Integration
  Integration:
    Type: AWS::ApiGatewayV2::Integration
    Properties:
      ApiId: !Ref HttpApi
      IntegrationType: AWS_PROXY
      IntegrationSubtype: EventBridge-PutEvents
      CredentialsArn: !GetAtt EventBridgeRole.Arn
      RequestParameters:
        Source: $request.path.source
        DetailType: $request.path.detailType
        Detail: $request.body
        EventBusName: !GetAtt EventBus.Arn
      PayloadFormatVersion: "1.0"
```

# Referensi subtipe integrasi
<a name="http-api-develop-integrations-aws-services-reference"></a>

[Subtipe integrasi](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-integrations-integrationid.html#apis-apiid-integrations-integrationid-prop-integration-integrationsubtype) berikut didukung untuk HTTP APIs.

**Topics**
+ [

## EventBridge- PutEvents 1.0
](#EventBridge-PutEvents)
+ [

## SQS- 1.0 SendMessage
](#SQS-SendMessage)
+ [

## SQS- 1.0 ReceiveMessage
](#SQS-ReceiveMessage)
+ [

## SQS- 1.0 DeleteMessage
](#SQS-DeleteMessage)
+ [

## SQS- 1.0 PurgeQueue
](#SQS-PurgeQueue)
+ [

## AppConfig- GetConfiguration 1.0
](#AppConfig-GetConfiguration)
+ [

## Kinesis- 1.0 PutRecord
](#Kinesis-PutRecord)
+ [

## StepFunctions- StartExecution 1.0
](#StepFunctions-StartExecution)
+ [

## StepFunctions- StartSyncExecution 1.0
](#StepFunctions-StartSyncExecution)
+ [

## StepFunctions- StopExecution 1.0
](#StepFunctions-StopExecution)

## EventBridge- PutEvents 1.0
<a name="EventBridge-PutEvents"></a>

Mengirim acara khusus ke Amazon EventBridge sehingga dapat dicocokkan dengan aturan.


| Parameter | Diperlukan | 
| --- | --- | 
| Detail | True | 
| DetailType | True | 
| Sumber | True | 
| Waktu | False | 
| EventBusName | False | 
| Sumber daya | False | 
| Wilayah | False | 
| TraceHeader | False | 

Untuk mempelajari lebih lanjut, lihat [PutEvents](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)di *Referensi Amazon EventBridge API*.

## SQS- 1.0 SendMessage
<a name="SQS-SendMessage"></a>

Mengirimkan pesan ke antrian yang ditentukan.


| Parameter | Diperlukan | 
| --- | --- | 
| QueueUrl | True | 
| MessageBody | Benar | 
| DelaySeconds | Salah | 
| MessageAttributes | Salah | 
| MessageDeduplicationId | Salah | 
| MessageGroupId | Salah | 
| MessageSystemAttributes | False | 
| Wilayah | False | 

Untuk mempelajari selengkapnya, lihat [SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)di *Referensi API Layanan Antrian Sederhana Amazon*.

## SQS- 1.0 ReceiveMessage
<a name="SQS-ReceiveMessage"></a>

Mengambil satu atau beberapa pesan (hingga 10), dari antrian yang ditentukan.


| Parameter | Diperlukan | 
| --- | --- | 
| QueueUrl | True | 
| AttributeNames | Salah | 
| MaxNumberOfMessages | Salah | 
| MessageAttributeNames | Salah | 
| ReceiveRequestAttemptId | Salah | 
| VisibilityTimeout | Salah | 
| WaitTimeSeconds | False | 
| Wilayah | False | 

Untuk mempelajari selengkapnya, lihat [ReceiveMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html)di *Referensi API Layanan Antrian Sederhana Amazon*.

## SQS- 1.0 DeleteMessage
<a name="SQS-DeleteMessage"></a>

Menghapus pesan yang ditentukan dari antrian yang ditentukan.


| Parameter | Diperlukan | 
| --- | --- | 
| ReceiptHandle | True | 
| QueueUrl | True | 
| Wilayah | False | 

Untuk mempelajari selengkapnya, lihat [DeleteMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_DeleteMessage.html)di *Referensi API Layanan Antrian Sederhana Amazon*.

## SQS- 1.0 PurgeQueue
<a name="SQS-PurgeQueue"></a>

Menghapus semua pesan dalam antrian yang ditentukan.


| Parameter | Diperlukan | 
| --- | --- | 
| QueueUrl | True | 
| Wilayah | False | 

Untuk mempelajari selengkapnya, lihat [PurgeQueue](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_PurgeQueue.html)di *Referensi API Layanan Antrian Sederhana Amazon*.

## AppConfig- GetConfiguration 1.0
<a name="AppConfig-GetConfiguration"></a>

Menerima informasi tentang konfigurasi.


| Parameter | Diperlukan | 
| --- | --- | 
| Aplikasi | True | 
| Lingkungan | True | 
| Konfigurasi | True | 
| ClientId | Benar | 
| ClientConfigurationVersion | False | 
| Wilayah | False | 

Untuk mempelajari lebih lanjut, lihat [GetConfiguration](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_GetConfiguration.html)di *Referensi AWS AppConfig API*.

## Kinesis- 1.0 PutRecord
<a name="Kinesis-PutRecord"></a>

Menulis catatan data tunggal ke dalam aliran data Amazon Kinesis.


| Parameter | Diperlukan | 
| --- | --- | 
| StreamName | True | 
| Data | True | 
| PartitionKey | Benar | 
| SequenceNumberForOrdering | Salah | 
| ExplicitHashKey | False | 
| Wilayah | False | 

Untuk mempelajari selengkapnya, lihat [PutRecord](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html)di *Referensi API Amazon Kinesis Data Streams*.

## StepFunctions- StartExecution 1.0
<a name="StepFunctions-StartExecution"></a>

Memulai eksekusi mesin negara.


| Parameter | Diperlukan | 
| --- | --- | 
| StateMachineArn | True | 
| Nama | False | 
| Input | False | 
| Wilayah | False | 

Untuk mempelajari lebih lanjut, lihat [StartExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartExecution.html)di *Referensi AWS Step Functions API*.

## StepFunctions- StartSyncExecution 1.0
<a name="StepFunctions-StartSyncExecution"></a>

Memulai eksekusi mesin keadaan sinkron.


| Parameter | Diperlukan | 
| --- | --- | 
| StateMachineArn | True | 
| Nama | False | 
| Input | False | 
| Wilayah | False | 
| TraceHeader | False | 

Untuk mempelajari lebih lanjut, lihat [StartSyncExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StartSyncExecution.html)di *Referensi AWS Step Functions API*.

## StepFunctions- StopExecution 1.0
<a name="StepFunctions-StopExecution"></a>

Menghentikan eksekusi.


| Parameter | Diperlukan | 
| --- | --- | 
| ExecutionArn | True | 
| Penyebab | False | 
| Kesalahan | False | 
| Wilayah | False | 

Untuk mempelajari lebih lanjut, lihat [StopExecution](https://docs.aws.amazon.com/step-functions/latest/apireference/API_StopExecution.html)di *Referensi AWS Step Functions API*.

# Buat integrasi pribadi untuk HTTP APIs di API Gateway
<a name="http-api-develop-integrations-private"></a>

Integrasi pribadi memungkinkan Anda membuat integrasi API dengan sumber daya pribadi di VPC, seperti Application Load Balancers atau aplikasi berbasis container Amazon ECS. 

Anda dapat mengekspos sumber daya Anda dalam VPC untuk diakses oleh klien di luar VPC dengan menggunakan integrasi pribadi. Anda dapat mengontrol akses ke API Anda dengan menggunakan salah satu [metode otorisasi](http-api-access-control.md) yang didukung API Gateway.

**catatan**  
Untuk membuat integrasi pribadi, Anda harus terlebih dahulu membuat tautan VPC. Tautan VPC V2 sekarang didukung untuk HTTP dan REST. APIs Untuk mempelajari selengkapnya tentang tautan VPC V2, lihat. [Siapkan tautan VPC V2 di API Gateway](apigateway-vpc-links-v2.md) 

Setelah membuat tautan VPC V2, Anda dapat mengatur integrasi pribadi yang terhubung ke Application Load Balancer, Network Load Balancer, atau sumber daya yang terdaftar dengan layanan. AWS Cloud Map 

## Pertimbangan-pertimbangan
<a name="http-api-develop-integrations-private-considerations"></a>

Pertimbangan berikut dapat memengaruhi penggunaan integrasi pribadi Anda:
+ Semua sumber daya harus dimiliki oleh yang sama Akun AWS. Ini termasuk penyeimbang beban atau AWS Cloud Map layanan, tautan VPC, dan HTTP API.
+ Secara default, lalu lintas integrasi pribadi menggunakan protokol HTTP. Untuk menggunakan HTTPS, tentukan file [https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-integrations-integrationid.html](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-integrations-integrationid.html). Untuk melakukan ini menggunakan Konsol Manajemen AWS, ketika Anda membuat integrasi pribadi Anda, pilih **Pengaturan lanjutan** dan kemudian masukkan nama server yang aman.
+ Untuk integrasi pribadi, API Gateway menyertakan bagian [tahap](http-api-stages.md) titik akhir API dalam permintaan ke sumber daya backend Anda. Misalnya, permintaan ke `test` tahap API termasuk `test/route-path` dalam permintaan untuk integrasi pribadi Anda. Untuk menghapus nama panggung dari permintaan ke sumber daya backend Anda, gunakan [pemetaan parameter](http-api-parameter-mapping.md) untuk menimpa jalur permintaan. `$request.path`

## Buat integrasi pribadi menggunakan Application Load Balancer atau Network Load Balancer
<a name="http-api-develop-integrations-private-ELB"></a>

Sebelum Anda membuat integrasi pribadi, Anda harus membuat tautan VPC V2. Untuk mempelajari selengkapnya tentang tautan VPC V2, lihat. [Siapkan tautan VPC V2 di API Gateway](apigateway-vpc-links-v2.md)

Untuk membuat integrasi pribadi dengan Application Load Balancer atau Network Load Balancer, buat integrasi proxy HTTP, tentukan tautan VPC yang akan digunakan, dan berikan ARN pendengar penyeimbang beban.

Perintah [create-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration.html) berikut membuat integrasi pribadi yang terhubung ke penyeimbang beban dengan menggunakan tautan VPC:

```
aws apigatewayv2 create-integration --api-id api-id --integration-type HTTP_PROXY \
    --integration-method GET --connection-type VPC_LINK \
    --connection-id VPC-link-ID \
    --integration-uri arn:aws:elasticloadbalancing:us-east-2:123456789012:listener/app/my-load-balancer/50dc6c495c0c9188/0467ef3c8400ae65
    --payload-format-version 1.0
```

## Buat integrasi pribadi menggunakan penemuan AWS Cloud Map layanan
<a name="http-api-develop-integrations-private-Cloud-Map"></a>

Sebelum Anda membuat integrasi pribadi, Anda harus membuat tautan VPC V2. Untuk mempelajari lebih lanjut tentang tautan VPC, lihat. [Siapkan tautan VPC V2 di API Gateway](apigateway-vpc-links-v2.md)

Untuk integrasi dengan AWS Cloud Map, API Gateway digunakan `DiscoverInstances` untuk mengidentifikasi sumber daya. Anda dapat menggunakan parameter kueri untuk menargetkan sumber daya tertentu. Atribut sumber daya terdaftar harus menyertakan alamat IP dan port. API Gateway mendistribusikan permintaan di seluruh sumber daya sehat yang dikembalikan. `DiscoverInstances` Untuk mempelajari lebih lanjut, lihat [DiscoverInstances](https://docs.aws.amazon.com/cloud-map/latest/api/API_DiscoverInstances.html)di Referensi AWS Cloud Map API.

**catatan**  
Jika Anda menggunakan Amazon ECS untuk mengisi entri AWS Cloud Map, Anda harus mengonfigurasi tugas Amazon ECS untuk menggunakan catatan SRV dengan Amazon ECS Service Discovery atau mengaktifkan Amazon ECS Service Connect. Untuk informasi selengkapnya, lihat [Layanan interkoneksi](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/interconnecting-services.html) di Panduan Pengembang Layanan Kontainer Elastis Amazon.

Untuk membuat integrasi pribadi dengan AWS Cloud Map, buat integrasi proxy HTTP, tentukan tautan VPC yang akan digunakan, dan berikan ARN layanan. AWS Cloud Map 

Perintah [create-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration.html) berikut menciptakan integrasi pribadi yang menggunakan penemuan AWS Cloud Map layanan untuk mengidentifikasi sumber daya:

```
aws apigatewayv2 create-integration --api-id api-id --integration-type HTTP_PROXY  \
    --integration-method GET --connection-type VPC_LINK \
    --connection-id VPC-link-ID \
    --integration-uri arn:aws:servicediscovery:us-east-2:123456789012:service/srv-id?stage=prod&deployment=green_deployment
    --payload-format-version 1.0
```

# Konfigurasikan CORS untuk HTTP APIs di API Gateway
<a name="http-api-cors"></a>

[Cross-origin resource sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) adalah fitur keamanan browser yang membatasi permintaan HTTP yang dimulai dari skrip yang berjalan di browser. Jika Anda tidak dapat mengakses API dan menerima pesan kesalahan yang berisi`Cross-Origin Request Blocked`, Anda mungkin perlu mengaktifkan CORS. Untuk informasi lebih lanjut, lihat [Apa itu CORS?](https://aws.amazon.com/what-is/cross-origin-resource-sharing/) .

CORS biasanya diperlukan untuk membangun aplikasi web yang mengakses APIs host pada domain atau asal yang berbeda. Anda dapat mengaktifkan CORS untuk mengizinkan permintaan ke API Anda dari aplikasi web yang dihosting di domain lain. Misalnya, jika API Anda di-host `https://{api_id}.execute-api.{region}.amazonaws.com/` dan Anda ingin memanggil API Anda dari aplikasi web yang di-host`example.com`, API Anda harus mendukung CORS.

Jika Anda mengonfigurasi CORS untuk API, API Gateway secara otomatis mengirimkan respons ke permintaan OPTIONS preflight, meskipun tidak ada rute OPTIONS yang dikonfigurasi untuk API Anda. Untuk permintaan CORS, API Gateway menambahkan header CORS yang dikonfigurasi ke respons dari integrasi.

**catatan**  
Jika Anda mengonfigurasi CORS untuk API, API Gateway mengabaikan header CORS yang dikembalikan dari integrasi backend Anda.

Anda dapat menentukan parameter berikut dalam konfigurasi CORS. Untuk menambahkan parameter ini menggunakan API Gateway HTTP API console, pilih **Tambah** setelah Anda memasukkan nilai.


| Header CORS | Properti konfigurasi CORS | Contoh nilai | 
| --- | --- | --- | 
|  Access-Control-Allow-Origin  |  allowOrigins  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/http-api-cors.html)  | 
|  Access-Control-Allow-Credentials  |  allowCredentials  |  true  | 
|  Access-Control-Expose-Header  |  exposeHeaders  |  tanggal, x-api-id, \$1  | 
|  Akses-Kontrol-Max-Age  |  maxAge  |  300  | 
|  Access-Control-Allow-Methods  |  allowMethods  |  DAPATKAN, POSTING, HAPUS, \$1  | 
|  Access-Control-Allow-Header  |  allowHeaders  |  otorisasi, \$1  | 

Untuk mengembalikan header CORS, permintaan Anda harus berisi header. `origin` Untuk `OPTIONS` metode ini, permintaan Anda harus berisi `origin` header dan `Access-Control-Request-Method` header.

Konfigurasi CORS Anda mungkin terlihat mirip dengan yang berikut ini:

![\[Konfigurasi CORS untuk HTTP APIs\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/http-cors-console.png)


## Mengonfigurasi CORS untuk API HTTP dengan `$default` rute dan otorisasi
<a name="http-api-cors-default-route"></a>

Anda dapat mengaktifkan CORS dan mengonfigurasi otorisasi untuk rute apa pun dari API HTTP. Ketika Anda mengaktifkan CORS dan otorisasi untuk [`$default`rute](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-routes.html#http-api-develop-routes.default), ada beberapa pertimbangan khusus. `$default`Rute menangkap permintaan untuk semua metode dan rute yang belum Anda tetapkan secara eksplisit, termasuk permintaan. `OPTIONS` Untuk mendukung `OPTIONS` permintaan yang tidak sah, tambahkan `OPTIONS /{proxy+}` rute ke API Anda yang tidak memerlukan otorisasi dan lampirkan integrasi ke rute. `OPTIONS /{proxy+}`Rute ini memiliki prioritas lebih tinggi daripada `$default` rute. Akibatnya, ini memungkinkan klien untuk mengirimkan `OPTIONS` permintaan ke API Anda tanpa otorisasi. Untuk informasi selengkapnya tentang prioritas perutean, lihat. [Permintaan API perutean](http-api-develop-routes.md#http-api-develop-routes.evaluation)

## Konfigurasikan CORS untuk API HTTP dengan menggunakan CLI AWS
<a name="http-api-cors.example"></a>

Perintah [update-api](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/update-api.html) berikut memungkinkan permintaan CORS dari: `https://www.example.com`

**Example**  

```
aws apigatewayv2 update-api --api-id api-id --cors-configuration AllowOrigins="https://www.example.com"
```

Untuk informasi selengkapnya, lihat [CORS](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid.html#apis-apiid-model-cors) di Referensi API Amazon API Gateway Versi 2.

# Mengubah permintaan dan tanggapan API untuk HTTP APIs di API Gateway
<a name="http-api-parameter-mapping"></a>

Anda dapat memodifikasi permintaan API dari klien sebelum mereka mencapai integrasi backend Anda. Anda juga dapat mengubah respons dari integrasi sebelum API Gateway mengembalikan respons ke klien. Anda menggunakan *pemetaan parameter* untuk memodifikasi permintaan API dan tanggapan untuk HTTP APIs. Untuk menggunakan pemetaan parameter, Anda menentukan permintaan API atau parameter respons untuk dimodifikasi, dan menentukan cara memodifikasi parameter tersebut.



## Mengubah permintaan API
<a name="http-api-mapping-request-parameters"></a>

Anda menggunakan parameter permintaan untuk mengubah permintaan sebelum mencapai integrasi backend Anda. Anda dapat memodifikasi header, string kueri, atau jalur permintaan.

Parameter permintaan adalah peta nilai kunci. Kunci mengidentifikasi lokasi parameter permintaan untuk diubah, dan bagaimana mengubahnya. Nilai menentukan data baru untuk parameter.

Tabel berikut menunjukkan kunci yang didukung.


| Tipe | Sintaks | 
| --- | --- | 
| Header | append\$1overwrite\$1remove:header.headername | 
| String kueri | append\$1overwrite\$1remove:querystring.querystring-name | 
| Jalur | overwrite:path | 

Tabel berikut menunjukkan nilai yang didukung yang dapat Anda petakan ke parameter.


| Tipe | Sintaks | Catatan | 
| --- | --- | --- | 
| Nilai header | \$1 request.header. nameatau \$1 \$1request.header. name\$1 | Nama header tidak peka huruf besar/kecil. API Gateway menggabungkan beberapa nilai header dengan koma, misalnya"header1": "value1,value2". Beberapa header dicadangkan. Untuk mempelajari selengkapnya, lihat [Header yang dicadangkan](#http-api-mapping-reserved-headers). | 
| Nilai string kueri | \$1request.querystring. nameatau \$1 \$1request.querystring. name\$1 | Nama string kueri peka huruf besar/kecil. API Gateway menggabungkan beberapa nilai dengan koma, misalnya"querystring1" "Value1,Value2". | 
| Isi permintaan | \$1 request.body. nameatau \$1 \$1request.body. name\$1 | Ekspresi jalur JSON. Penurunan rekursif (\$1request.body..name)dan ekspresi filter (?(expression)) tidak didukung.  Saat Anda menentukan jalur JSON, API Gateway memotong isi permintaan pada 100 KB dan kemudian menerapkan ekspresi seleksi. Untuk mengirim muatan yang lebih besar dari 100 KB, tentukan`$request.body`.   | 
| Jalur permintaan | \$1request.path atau \$1 \$1request.path\$1 | Jalur permintaan, tanpa nama panggung. | 
| Parameter jalur | \$1request.path. nameatau \$1 \$1request.path. name\$1 | Nilai parameter jalur dalam permintaan. Misalnya jika rutenya/pets/\$1petId\$1, Anda dapat memetakan petId parameter dari permintaan dengan\$1request.path.petId. | 
| Variabel konteks | \$1 konteks. variableNameatau \$1 \$1context. variableName\$1 | Nilai [variabel konteks](http-api-logging-variables.md). Hanya karakter khusus `.` dan `_` didukung. | 
| Variabel tahap | \$1 StageVariables. variableNameatau \$1 \$1stageVariables. variableName\$1 | Nilai [variabel tahap](http-api-stages.stage-variables.md). | 
| Nilai statis | string | Nilai konstan. | 

**catatan**  
Untuk menggunakan beberapa variabel dalam ekspresi seleksi, lampirkan variabel dalam tanda kurung. Misalnya, `${request.path.name} ${request.path.id}`.

## Mengubah respons API
<a name="http-api-mapping-response-parameters"></a>

Anda menggunakan parameter respons untuk mengubah respons HTTP dari integrasi backend sebelum mengembalikan respons ke klien. Anda dapat mengubah header atau kode status respons sebelum API Gateway mengembalikan respons ke klien.

Anda mengonfigurasi parameter respons untuk setiap kode status yang dikembalikan oleh integrasi Anda. Parameter respons adalah peta nilai kunci. Kunci mengidentifikasi lokasi parameter permintaan untuk diubah, dan bagaimana mengubahnya. Nilai menentukan data baru untuk parameter.

Tabel berikut menunjukkan kunci yang didukung.


| Tipe | Sintaks | 
| --- | --- | 
| Header | append\$1overwrite\$1remove:header.headername | 
| Kode status | overwrite:statuscode | 

Tabel berikut menunjukkan nilai yang didukung yang dapat Anda petakan ke parameter.


| Tipe | Sintaks | Catatan | 
| --- | --- | --- | 
| Nilai header | \$1 response.header. nameatau \$1 \$1response.header. name\$1 | Nama header tidak peka huruf besar/kecil. API Gateway menggabungkan beberapa nilai header dengan koma, misalnya"header1": "value1,value2". Beberapa header dicadangkan. Untuk mempelajari selengkapnya, lihat [Header yang dicadangkan](#http-api-mapping-reserved-headers). | 
| Isi respons | \$1response.body. nameatau \$1 \$1response.body. name\$1 | Ekspresi jalur JSON. Descent rekursif (\$1response.body..name) dan ekspresi filter (?(expression)) tidak didukung.  Saat Anda menentukan jalur JSON, API Gateway memotong badan respons pada 100 KB dan kemudian menerapkan ekspresi pemilihan. Untuk mengirim muatan yang lebih besar dari 100 KB, tentukan`$response.body`.   | 
| Variabel konteks | \$1 konteks. variableNameatau \$1 \$1context. variableName\$1 | Nilai [variabel konteks](http-api-logging-variables.md) yang didukung. | 
| Variabel tahap | \$1 StageVariables. variableNameatau \$1 \$1stageVariables. variableName\$1 | Nilai [variabel tahap](http-api-stages.stage-variables.md). | 
| Nilai statis | string | Nilai konstan. | 

**catatan**  
Untuk menggunakan beberapa variabel dalam ekspresi seleksi, lampirkan variabel dalam tanda kurung. Misalnya, `${request.path.name} ${request.path.id}`.

## Header yang dicadangkan
<a name="http-api-mapping-reserved-headers"></a>

Header berikut dicadangkan. Anda tidak dapat mengonfigurasi pemetaan permintaan atau respons untuk header ini.
+ akses-kontrol-\$1
+ apigw-\$1
+ Otorisasi
+ Koneksi
+ Pengkodean Konten
+ Content-Length
+ Content-Location
+ Diteruskan
+ Tetap Hidup
+ Asal
+ Proksi-Otentikasi
+ Otorisasi Proksi
+ TE
+ Trailer 
+ Transfer-Encoding
+ Peningkatan
+ x-amz-\$1
+ x-amzn-\$1
+ X-Diteruskan-Untuk
+ X-Forwarded-Host
+ X-Diteruskan-Proto
+ Melalui

## Contoh
<a name="http-api-parameter-mapping-examples"></a>

 AWS CLI Contoh berikut mengkonfigurasi pemetaan parameter. Misalnya CloudFormation template, lihat [GitHub](https://github.com/awsdocs/amazon-api-gateway-developer-guide/tree/main/cloudformation-templates).

### Menambahkan header ke permintaan API
<a name="http-api-parameter-mapping-examples-request-header"></a>

Perintah [create-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration.html) berikut membuat header yang diberi nama `header1` ke permintaan API sebelum mencapai integrasi backend Anda. API Gateway mengisi header dengan ID permintaan.

```
aws apigatewayv2 create-integration \
    --api-id abcdef123 \
    --integration-type HTTP_PROXY \
    --payload-format-version 1.0 \
    --integration-uri 'https://api.example.com' \
    --integration-method ANY \
    --request-parameters '{ "append:header.header1": "$context.requestId" }'
```

### Ganti nama header permintaan
<a name="http-api-parameter-mapping-examples-response"></a>

Perintah [create-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration.html) berikut mengganti nama header permintaan dari ke: `header1` `header2`

```
aws apigatewayv2 create-integration \
    --api-id abcdef123 \
    --integration-type HTTP_PROXY \
    --payload-format-version 1.0 \
    --integration-uri 'https://api.example.com' \
    --integration-method ANY \
    --request-parameters '{ "append:header.header2": "$request.header.header1",  "remove:header.header1": "''"}'
```

### Mengubah respon dari integrasi
<a name="http-api-parameter-mapping-examples-response"></a>

Perintah [create-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration.html) berikut mengkonfigurasi parameter respons untuk integrasi. Saat integrasi mengembalikan kode status 500, API Gateway mengubah kode status menjadi 403, dan menambahkan `header1` 1 ke respons. Saat integrasi mengembalikan kode status 404, API Gateway menambahkan `error` header ke respons.

```
aws apigatewayv2 create-integration \
    --api-id abcdef123 \
    --integration-type HTTP_PROXY \
    --payload-format-version 1.0 \
    --integration-uri 'https://api.example.com' \
    --integration-method ANY \
    --response-parameters '{"500" : {"append:header.header1": "$context.requestId", "overwrite:statuscode" : "403"}, "404" : {"append:header.error" : "$stageVariables.environmentId"}  }'
```

### Hapus pemetaan parameter yang dikonfigurasi
<a name="http-api-parameter-mapping-examples-remove"></a>

Perintah [update-integration](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/create-integration.html) berikut menghapus parameter permintaan yang dikonfigurasi sebelumnya untuk. `append:header.header1` Ini juga menghapus parameter respons yang dikonfigurasi sebelumnya untuk kode status 200.

```
aws apigatewayv2 update-integration \
    --api-id abcdef123 \
    --integration-id hijk456 \
    --request-parameters '{"append:header.header1" : ""}' \
    --response-parameters '{"200" : {}}'
```

# Gunakan definisi OpenAPI untuk HTTP APIs di API Gateway
<a name="http-api-open-api"></a>

Anda dapat menentukan HTTP API Anda dengan menggunakan file definisi OpenAPI 3.0. Kemudian Anda dapat mengimpor definisi ke API Gateway untuk membuat API. Untuk mempelajari lebih lanjut tentang ekstensi API Gateway ke OpenAPI, lihat. [Ekstensi OpenAPI untuk API Gateway](api-gateway-swagger-extensions.md)

## Mengimpor API HTTP
<a name="http-api-import"></a>

Anda dapat membuat API HTTP dengan mengimpor file definisi OpenAPI 3.0.

Untuk bermigrasi dari REST API ke HTTP API, Anda dapat mengekspor REST API Anda sebagai file definisi OpenAPI 3.0. Kemudian impor definisi API sebagai HTTP API. Untuk mempelajari lebih lanjut tentang mengekspor REST API, lihat[Ekspor REST API dari API Gateway](api-gateway-export-api.md). 

**catatan**  
HTTP APIs mendukung AWS variabel yang sama dengan REST APIs. Untuk mempelajari selengkapnya, lihat [AWS variabel untuk impor OpenAPI](import-api-aws-variables.md).

### Impor informasi validasi
<a name="http-api-import.validation"></a>

Saat Anda mengimpor API, API Gateway menyediakan tiga kategori informasi validasi.

**Info**  
Properti valid sesuai dengan spesifikasi OpenAPI, tetapi properti itu tidak didukung untuk HTTP. APIs  
Misalnya, cuplikan OpenAPI 3.0 berikut menghasilkan info tentang impor karena HTTP APIs tidak mendukung validasi permintaan. API Gateway mengabaikan `schema` bidang `requestBody` dan.  

```
"paths": {
  "/": {
    "get": {
      "x-amazon-apigateway-integration": {
        "type": "AWS_PROXY",
        "httpMethod": "POST",
        "uri": "arn:aws:lambda:us-east-2:123456789012:function:HelloWorld",
        "payloadFormatVersion": "1.0"
      },
      "requestBody": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Body"
            }
          }
        }
      }
    }
  }
  ...
},
"components": {
  "schemas": {
    "Body": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        }
      }
    }
    ...
  }
  ...
}
```

**Peringatan**  
Properti atau struktur tidak valid sesuai dengan spesifikasi OpenAPI, tetapi tidak memblokir pembuatan API. Anda dapat menentukan apakah API Gateway harus mengabaikan peringatan ini dan terus membuat API, atau berhenti membuat API pada peringatan.  
Dokumen OpenAPI 3.0 berikut menghasilkan peringatan tentang impor karena HTTP APIs hanya mendukung proxy Lambda dan integrasi proxy HTTP.  

```
"x-amazon-apigateway-integration": {
  "type": "AWS",
  "httpMethod": "POST",
  "uri": "arn:aws:lambda:us-east-2:123456789012:function:HelloWorld",
  "payloadFormatVersion": "1.0"
}
```

**Kesalahan**  
Spesifikasi OpenAPI tidak valid atau salah bentuk. API Gateway tidak dapat membuat sumber daya apa pun dari dokumen yang salah format. Anda harus memperbaiki kesalahan, dan kemudian coba lagi.  
Definisi API berikut menghasilkan kesalahan pada impor karena HTTP hanya APIs mendukung spesifikasi OpenAPI 3.0.  

```
{
  "swagger": "2.0.0",
  "info": {
    "title": "My API",
    "description": "An Example OpenAPI definition for Errors/Warnings/ImportInfo",
    "version": "1.0"
  }
  ...
}
```
Sebagai contoh lain, sementara OpenAPI memungkinkan pengguna untuk mendefinisikan API dengan beberapa persyaratan keamanan yang dilampirkan pada operasi tertentu, API Gateway tidak mendukung ini. Setiap operasi hanya dapat memiliki satu otorisasi IAM, otorisasi Lambda, atau otorisasi JWT. Mencoba memodelkan beberapa persyaratan keamanan menghasilkan kesalahan.

### Impor API dengan menggunakan AWS CLI
<a name="http-api-import.example"></a>

Perintah [import-api](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/import-api.html) berikut mengimpor file `api-definition.json` definisi OpenAPI 3.0 sebagai API HTTP:

**Example**  

```
aws apigatewayv2 import-api --body file://api-definition.json
```

**Example**  
Anda dapat mengimpor contoh definisi OpenAPI 3.0 berikut untuk membuat API HTTP.  

```
{
  "openapi": "3.0.1",
  "info": {
    "title": "Example Pet Store",
    "description": "A Pet Store API.",
    "version": "1.0"
  },
  "paths": {
    "/pets": {
      "get": {
        "operationId": "GET HTTP",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pets"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-integration": {
          "type": "HTTP_PROXY",
          "httpMethod": "GET",
          "uri": "http://petstore.execute-api.us-west-1.amazonaws.com/petstore/pets",
          "payloadFormatVersion": 1.0
        }
      },
      "post": {
        "operationId": "Create Pet",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/NewPet"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "200 response",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NewPetResponse"
                }
              }
            }
          }
        },
        "x-amazon-apigateway-integration": {
          "type": "HTTP_PROXY",
          "httpMethod": "POST",
          "uri": "http://petstore.execute-api.us-west-1.amazonaws.com/petstore/pets",
          "payloadFormatVersion": 1.0
        }
      }
    },
    "/pets/{petId}": {
      "get": {
        "operationId": "Get Pet",
        "parameters": [
          {
            "name": "petId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "200 response",
            "headers": {
              "Access-Control-Allow-Origin": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pet"
                }
              }
            }
          }
        },        
        "x-amazon-apigateway-integration": {
          "type": "HTTP_PROXY",
          "httpMethod": "GET",
          "uri": "http://petstore.execute-api.us-west-1.amazonaws.com/petstore/pets/{petId}",
          "payloadFormatVersion": 1.0
        }
      }
    }
  },
  "x-amazon-apigateway-cors": {
    "allowOrigins": [
      "*"
    ],
    "allowMethods": [
      "GET",
      "OPTIONS",
      "POST"
    ],
    "allowHeaders": [
      "x-amzm-header",
      "x-apigateway-header",
      "x-api-key",
      "authorization",
      "x-amz-date",
      "content-type"
    ]
  },
  "components": {
    "schemas": {
      "Pets": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Pet"
        }
      },
      "Empty": {
        "type": "object"
      },
      "NewPetResponse": {
        "type": "object",
        "properties": {
          "pet": {
            "$ref": "#/components/schemas/Pet"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "Pet": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "price": {
            "type": "number"
          }
        }
      },
      "NewPet": {
        "type": "object",
        "properties": {
          "type": {
            "$ref": "#/components/schemas/PetType"
          },
          "price": {
            "type": "number"
          }
        }
      },
      "PetType": {
        "type": "string",
        "enum": [
          "dog",
          "cat",
          "fish",
          "bird",
          "gecko"
        ]
      }
    }
  }
}
```

# Ekspor HTTP APIs dari API Gateway
<a name="http-api-export"></a>

Setelah membuat API HTTP, Anda dapat mengekspor definisi OpenAPI 3.0 API Anda dari API Gateway. Anda dapat memilih tahap untuk mengekspor, atau mengekspor konfigurasi terbaru API Anda. Anda juga dapat mengimpor definisi API yang diekspor ke API Gateway untuk membuat API lain yang identik. Untuk mempelajari lebih lanjut tentang mengimpor definisi API, lihat[Mengimpor API HTTP](http-api-open-api.md#http-api-import).

## Ekspor definisi OpenAPI 3.0 dari sebuah tahap dengan menggunakan CLI AWS
<a name="http-api-export.stage.example"></a>

Perintah [export-api](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/export-api.html) berikut mengekspor definisi OpenAPI dari tahap API yang diberi nama ke file YAMAL `prod` bernama. `stage-definition.yaml` File definisi yang diekspor menyertakan [ekstensi API Gateway](api-gateway-swagger-extensions.md) secara default.

```
aws apigatewayv2 export-api \
    --api-id api-id  \
    --output-type YAML  \
    --specification OAS30 \
    --stage-name prod \
    stage-definition.yaml
```

## Ekspor definisi OpenAPI 3.0 dari perubahan terbaru API Anda dengan menggunakan CLI AWS
<a name="http-api-export.latest.example"></a>

Perintah [export-api](https://docs.aws.amazon.com/cli/latest/reference/apigatewayv2/export-api.html) berikut mengekspor definisi OpenAPI dari API HTTP ke file JSON bernama. `latest-api-definition.json` Karena perintah tidak menentukan tahapan, API Gateway mengekspor konfigurasi terbaru API Anda, apakah itu telah diterapkan ke panggung atau belum. File definisi yang diekspor tidak menyertakan [ekstensi API Gateway](api-gateway-swagger-extensions.md).

```
aws apigatewayv2 export-api \
    --api-id api-id  \
    --output-type JSON  \
    --specification OAS30 \
    --no-include-extensions \
    latest-api-definition.json
```

Untuk informasi selengkapnya, lihat [ExportAPI](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis-apiid-exports-specification.html#apis-apiid-exports-specification-http-methods) di Referensi API *Amazon API Gateway Versi 2*.

## Ekspor definisi OpenAPI 3.0 menggunakan konsol API Gateway
<a name="http-api-export.console"></a>

Prosedur berikut menunjukkan cara mengekspor definisi OpenAPI dari API HTTP.

**Untuk mengekspor definisi OpenAPI 3.0 menggunakan konsol API Gateway**

1. Masuk ke konsol API Gateway di [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Pilih API HTTP.

1. Pada panel navigasi utama, di bawah **Kembangkan**, pilih **Ekspor**.

1. Pilih dari opsi berikut untuk mengekspor API Anda:  
![\[Opsi ekspor untuk HTTP APIs.\]](http://docs.aws.amazon.com/id_id/apigateway/latest/developerguide/images/export-http-api.png)

   1. Untuk **Sumber**, pilih sumber untuk definisi OpenAPI 3.0. Anda dapat memilih tahap untuk mengekspor, atau mengekspor konfigurasi terbaru API Anda.

   1. Aktifkan **Sertakan ekstensi API Gateway** untuk menyertakan [ekstensi API Gateway](api-gateway-swagger-extensions.md).

   1. Untuk **format Output**, pilih format output.

1. Pilih **Unduh**.