

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

# Menggunakan resolver HTTP di AWS AppSync
<a name="tutorial-http-resolvers-js"></a>

AWS AppSync memungkinkan Anda menggunakan sumber data yang didukung (yaitu, Amazon DynamoDB AWS Lambda, Amazon Service, atau OpenSearch Amazon Aurora) untuk melakukan berbagai operasi, selain titik akhir HTTP arbitrer untuk menyelesaikan bidang GraphQL. Setelah titik akhir HTTP Anda tersedia, Anda dapat menghubungkannya menggunakan sumber data. Kemudian, Anda dapat mengonfigurasi resolver dalam skema untuk melakukan operasi GraphQL seperti kueri, mutasi, dan langganan. Tutorial ini memandu Anda melalui beberapa contoh umum.

Dalam tutorial ini Anda menggunakan REST API (dibuat menggunakan Amazon API Gateway dan Lambda) dengan titik akhir AWS AppSync GraphQL.

## Membuat REST API
<a name="creating-a-rest-api"></a>

Anda dapat menggunakan AWS CloudFormation template berikut untuk menyiapkan titik akhir REST yang berfungsi untuk tutorial ini:

[https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?templateURL=https://s3.us-west-2.amazonaws.com/awsappsync/resources/http/http-api-gw.yaml](https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?templateURL=https://s3.us-west-2.amazonaws.com/awsappsync/resources/http/http-api-gw.yaml)

 AWS CloudFormation Tumpukan melakukan langkah-langkah berikut:

1. Menyiapkan fungsi Lambda yang berisi logika bisnis Anda untuk layanan mikro Anda.

1. Menyiapkan API REST API Gateway dengan kombinasi endpoint/method/content tipe berikut:


****  

| Jalur Sumber Daya API | Metode HTTP | Jenis Konten yang Didukung | 
| --- | --- | --- | 
|  /v1/pengguna  |  POST  |  aplikasi/json  | 
|  /v1/pengguna  |  GET  |  aplikasi/json  | 
|  /v1/pengguna/1  |  GET  |  aplikasi/json  | 
|  /v1/pengguna/1  |  PUT  |  aplikasi/json  | 
|  /v1/pengguna/1  |  DELETE  |  aplikasi/json  | 

## Membuat GraphQL API
<a name="creating-your-graphql-api"></a>

Untuk membuat GraphQL API di: AWS AppSync

1. Buka AWS AppSync konsol dan pilih **Buat API**.

1. Pilih ** APIsGraphQL** dan kemudian **pilih** Desain dari awal. Pilih **Berikutnya**.

1. Untuk nama API, ketik`UserData`. Pilih **Berikutnya**.

1. Pilih `Create GraphQL resources later`. Pilih **Berikutnya**.

1. Tinjau input Anda dan pilih **Buat API**.

 AWS AppSync Konsol membuat API GraphQL baru untuk Anda menggunakan mode autentikasi kunci API. Anda dapat menggunakan konsol untuk mengonfigurasi GraphQL API dan menjalankan permintaan lebih lanjut.

## Membuat skema GraphQL
<a name="creating-a-graphql-schema"></a>

Sekarang Anda memiliki GraphQL API, mari buat skema GraphQL. Di editor **Skema** di AWS AppSync konsol, gunakan cuplikan di bawah ini:

```
type Mutation {
    addUser(userInput: UserInput!): User
    deleteUser(id: ID!): User
}

type Query {
    getUser(id: ID): User
    listUser: [User!]!
}

type User {
    id: ID!
    username: String!
    firstname: String
    lastname: String
    phone: String
    email: String
}

input UserInput {
    id: ID!
    username: String!
    firstname: String
    lastname: String
    phone: String
    email: String
}
```

## Konfigurasikan sumber data HTTP Anda
<a name="configure-your-http-data-source"></a>

Untuk mengonfigurasi sumber data HTTP Anda, lakukan hal berikut:

1. Di halaman **Sumber data** di AWS AppSync GraphQL API Anda, **pilih** Buat sumber data.

1. Masukkan nama untuk sumber data seperti`HTTP_Example`.

1. Di **tipe sumber data**, pilih **titik akhir HTTP**.

1. Setel titik akhir ke titik akhir API Gateway yang dibuat di awal tutorial. **Anda dapat menemukan titik akhir yang dihasilkan tumpukan jika Anda menavigasi ke konsol Lambda dan menemukan aplikasi Anda di bawah Aplikasi.** Di dalam pengaturan aplikasi Anda, Anda akan melihat **titik akhir API yang akan menjadi titik** akhir Anda. AWS AppSync Pastikan Anda tidak menyertakan nama panggung sebagai bagian dari titik akhir. Misalnya, jika titik akhir Anda`https://aaabbbcccd.execute-api.us-east-1.amazonaws.com/v1`, Anda akan mengetik. `https://aaabbbcccd.execute-api.us-east-1.amazonaws.com`

**catatan**  
Saat ini, hanya titik akhir publik yang didukung oleh AWS AppSync.  
Untuk informasi selengkapnya tentang otoritas sertifikasi yang diakui oleh AWS AppSync layanan, lihat [Otoritas Sertifikat (CA) yang Diakui oleh AWS AppSync untuk Titik Akhir HTTPS](http-cert-authorities.md#aws-appsync-http-certificate-authorities).

## Mengkonfigurasi resolver
<a name="configuring-resolvers"></a>

Pada langkah ini, Anda akan menghubungkan sumber data HTTP ke `getUser` dan `addUser` query.

Untuk mengatur `getUser` resolver:

1. **Di AWS AppSync GraphQL API Anda, pilih tab Schema.**

1. **Di sebelah kanan editor **Skema**, di panel **Resolvers** dan di bawah jenis **Kueri**, temukan `getUser` bidang dan pilih Lampirkan.**

1. Pertahankan jenis resolver ke `Unit` dan runtime ke. `APPSYNC_JS`

1. Di **nama sumber data**, pilih titik akhir HTTP yang Anda buat sebelumnya.

1. Pilih **Buat**.

1. Di editor kode **Resolver**, tambahkan cuplikan berikut sebagai penangan permintaan Anda:

   ```
   import { util } from '@aws-appsync/utils'
   
   export function request(ctx) {
   	return {
   		version: '2018-05-29',
   		method: 'GET',
   		params: {
   			headers: {
   				'Content-Type': 'application/json',
   			},
   		},
   		resourcePath: `/v1/users/${ctx.args.id}`,
   	}
   }
   ```

1. Tambahkan cuplikan berikut sebagai handler respons Anda:

   ```
   export function response(ctx) {
   	const { statusCode, body } = ctx.result
   	// if response is 200, return the response
   	if (statusCode === 200) {
   		return JSON.parse(body)
   	}
   	// if response is not 200, append the response to error block.
   	util.appendError(body, statusCode)
   }
   ```

1. Pilih tab **Query**, dan kemudian jalankan query berikut:

   ```
   query GetUser{
       getUser(id:1){
           id
           username
       }
   }
   ```

   Ini akan mengembalikan respons berikut:

   ```
   {
       "data": {
           "getUser": {
               "id": "1",
               "username": "nadia"
           }
       }
   }
   ```

Untuk mengatur `addUser` resolver:

1. Pilih tab **Skema**.

1. **Di sebelah kanan editor **Skema**, di panel **Resolvers** dan di bawah jenis **Kueri**, temukan `addUser` bidang dan pilih Lampirkan.**

1. Pertahankan jenis resolver ke `Unit` dan runtime ke. `APPSYNC_JS`

1. Di **nama sumber data**, pilih titik akhir HTTP yang Anda buat sebelumnya.

1. Pilih **Buat**.

1. Di editor kode **Resolver**, tambahkan cuplikan berikut sebagai penangan permintaan Anda:

   ```
   export function request(ctx) {
       return {
           "version": "2018-05-29",
           "method": "POST",
           "resourcePath": "/v1/users",
           "params":{
               "headers":{
                   "Content-Type": "application/json"
               },
           "body": ctx.args.userInput
           }
       }
   }
   ```

1. Tambahkan cuplikan berikut sebagai handler respons Anda:

   ```
   export function response(ctx) {
       if(ctx.error) {
           return util.error(ctx.error.message, ctx.error.type)
       }
       if (ctx.result.statusCode == 200) {
           return ctx.result.body
       } else {
           return util.appendError(ctx.result.body, "ctx.result.statusCode")
       }
   }
   ```

1. Pilih tab **Query**, dan kemudian jalankan query berikut:

   ```
   mutation addUser{
       addUser(userInput:{
           id:"2",
           username:"shaggy"
       }){
           id
           username
       }
   }
   ```

   Jika Anda menjalankan `getUser` kueri lagi, itu akan mengembalikan respons berikut:

   ```
   {
       "data": {
           "getUser": {
           "id": "2",
           "username": "shaggy"
           }
       }
   }
   ```

## Layanan Pemanggilan AWS
<a name="invoking-aws-services-js"></a>

Anda dapat menggunakan resolver HTTP untuk menyiapkan antarmuka GraphQL API untuk layanan. AWS Permintaan HTTP AWS harus ditandatangani dengan [proses Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) sehingga AWS dapat mengidentifikasi siapa yang mengirimnya. AWS AppSync menghitung tanda tangan atas nama Anda saat Anda mengaitkan peran IAM dengan sumber data HTTP.

Anda menyediakan dua komponen tambahan untuk memanggil AWS layanan dengan resolver HTTP:
+ Peran IAM dengan izin untuk memanggil layanan AWS APIs
+ Menandatangani konfigurasi di sumber data

Misalnya, jika Anda ingin memanggil [ListGraphqlApis operasi](https://docs.aws.amazon.com/appsync/latest/APIReference/API_ListGraphqlApis.html) dengan resolver HTTP, pertama-tama Anda [membuat peran IAM yang AWS AppSync diasumsikan dengan kebijakan](attaching-a-data-source.md#aws-appsync-getting-started-build-a-schema-from-scratch) berikut yang dilampirkan:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "appsync:ListGraphqlApis"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

------

Selanjutnya, buat sumber data HTTP untuk AWS AppSync. Dalam contoh ini, Anda menelepon AWS AppSync di Wilayah Barat AS (Oregon). Siapkan konfigurasi HTTP berikut dalam file bernama`http.json`, yang mencakup wilayah penandatanganan dan nama layanan:

```
{
    "endpoint": "https://appsync.us-west-2.amazonaws.com/",
    "authorizationConfig": {
        "authorizationType": "AWS_IAM",
        "awsIamConfig": {
            "signingRegion": "us-west-2",
            "signingServiceName": "appsync"
        }
    }
}
```

Kemudian, gunakan AWS CLI untuk membuat sumber data dengan peran terkait sebagai berikut:

```
aws appsync create-data-source --api-id <API-ID> \
                               --name AWSAppSync \
                               --type HTTP \
                               --http-config file:///http.json \
                               --service-role-arn <ROLE-ARN>
```

Saat Anda melampirkan resolver ke bidang dalam skema, gunakan templat pemetaan permintaan berikut untuk memanggil: AWS AppSync

```
{
    "version": "2018-05-29",
    "method": "GET",
    "resourcePath": "/v1/apis"
}
```

Saat Anda menjalankan kueri GraphQL untuk sumber data ini AWS AppSync , tandatangani permintaan menggunakan peran yang Anda berikan dan menyertakan tanda tangan dalam permintaan. Kueri mengembalikan daftar AWS AppSync APIs GraphQL di akun Anda di Wilayah tersebut. AWS 