

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Verwendung von HTTP-Resolvern in AWS AppSync
<a name="tutorial-http-resolvers-js"></a>

AWS AppSync ermöglicht es Ihnen, unterstützte Datenquellen (d. h. Amazon DynamoDB AWS Lambda, Amazon OpenSearch Service oder Amazon Aurora) zu verwenden, um verschiedene Operationen durchzuführen, zusätzlich zu beliebigen HTTP-Endpunkten zur Auflösung von GraphQL-Feldern. Sobald die HTTP-Endpunkte verfügbar sind, können Sie sie mit einer Datenquelle verbinden. Anschließend können Sie einen Resolver im Schema konfigurieren, um GraphQL-Operationen wie Abfragen, Mutationen und Abonnements auszuführen. Dieses Tutorial führt Sie durch einige häufig auftretende Beispiele.

In diesem Tutorial verwenden Sie eine REST-API (erstellt mit Amazon API Gateway und Lambda) mit einem AWS AppSync GraphQL-Endpunkt.

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

Sie können die folgende AWS CloudFormation Vorlage verwenden, um einen REST-Endpunkt einzurichten, der für dieses Tutorial funktioniert:

[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)

Der AWS CloudFormation Stack führt die folgenden Schritte aus:

1. Richtet eine Lambda-Funktion ein, die die Geschäftslogik für den Mikroservice enthält.

1. Richtet eine API-Gateway-REST-API mit der folgenden endpoint/method/content Typkombination ein:


****  

| API-Ressourcenpfad | HTTP-Methode | Unterstützter Inhaltstyp | 
| --- | --- | --- | 
|  /v1/users  |  POST  |  application/json  | 
|  /v1/users  |  GET  |  application/json  | 
|  /v1/users/1  |  GET  |  application/json  | 
|  /v1/users/1  |  PUT  |  application/json  | 
|  /v1/users/1  |  DELETE  |  application/json  | 

## Erstellen Sie Ihre GraphQL-API
<a name="creating-your-graphql-api"></a>

Um die GraphQL-API zu erstellen in AWS AppSync:

1. Öffnen Sie die AWS AppSync Konsole und wählen Sie **Create API**.

1. Wählen Sie **GraphQL APIs** und dann **Design from scratch**. Wählen Sie **Weiter** aus.

1. Geben Sie für den API-Namen `UserData` ein. Wählen Sie **Weiter** aus.

1. Wählen Sie `Create GraphQL resources later`. Wählen Sie **Weiter** aus.

1. Überprüfen Sie Ihre Eingaben und wählen Sie **Create API**.

Die AWS AppSync Konsole erstellt mithilfe des API-Schlüsselauthentifizierungsmodus eine neue GraphQL-API für Sie. Sie können die Konsole verwenden, um Ihre GraphQL-API weiter zu konfigurieren und Anfragen auszuführen.

## Erstellen eines GraphQL-Schemas
<a name="creating-a-graphql-schema"></a>

Da wir jetzt eine GraphQL-API haben, erstellen Sie ein GraphQL-Schema. Verwenden Sie im **Schema-Editor** in der AWS AppSync Konsole das folgende Snippet:

```
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
}
```

## Konfigurieren Sie Ihre HTTP-Datenquelle
<a name="configure-your-http-data-source"></a>

Gehen Sie wie folgt vor, um die HTTP-Datenquelle zu konfigurieren:

1. Wählen Sie auf der Seite **Datenquellen** in Ihrer AWS AppSync GraphQL-API die Option **Datenquelle erstellen** aus.

1. Geben Sie einen Namen für die Datenquelle ein, z. B. `HTTP_Example`

1. Wählen Sie unter **Datenquellentyp** die Option **HTTP-Endpunkt** aus.

1. Stellen Sie den Endpunkt auf den API-Gateway-Endpunkt ein, der zu Beginn des Tutorials erstellt wurde. **Sie finden Ihren vom Stack generierten Endpunkt, wenn Sie zur Lambda-Konsole navigieren und Ihre Anwendung unter Anwendungen suchen.** In den Einstellungen Ihrer Anwendung sollten Sie einen **API-Endpunkt sehen, der Ihr Endpunkt** sein wird. AWS AppSync Stellen Sie sicher, dass Sie den Phasennamen nicht als Teil des Endpunkts angeben. Wenn Ihr Endpunkt beispielsweise wäre`https://aaabbbcccd.execute-api.us-east-1.amazonaws.com/v1`, würden Sie Folgendes eingeben`https://aaabbbcccd.execute-api.us-east-1.amazonaws.com`.

**Anmerkung**  
Derzeit werden nur öffentliche Endpunkte von AWS AppSync unterstützt.  
Weitere Informationen zu den Zertifizierungsstellen, die vom AWS AppSync Dienst anerkannt werden, finden Sie unter [Zertifizierungsstellen (CA) Recognized by AWS AppSync for HTTPS](http-cert-authorities.md#aws-appsync-http-certificate-authorities) Endpoints.

## Konfigurieren von Resolvern
<a name="configuring-resolvers"></a>

In diesem Schritt verbinden Sie die HTTP-Datenquelle mit den `getUser` `addUser` AND-Abfragen.

So richten Sie den `getUser` Resolver ein:

1. Wählen Sie in Ihrer AWS AppSync GraphQL-API die Registerkarte **Schema**.

1. **Suchen Sie rechts neben dem **Schema-Editor** im Bereich **Resolvers** und unter dem **Abfragetyp** das `getUser` Feld und wählen Sie Anhängen aus.**

1. Behalten Sie den Resolvertyp bei `Unit` und die Laufzeit bei. `APPSYNC_JS`

1. Wählen Sie unter **Datenquellenname** den HTTP-Endpunkt aus, den Sie zuvor erstellt haben.

1. Wählen Sie **Erstellen** aus.

1. Fügen Sie im **Resolver-Code-Editor** das folgende Snippet als Ihren Request-Handler hinzu:

   ```
   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. Fügen Sie das folgende Snippet als Antworthandler hinzu:

   ```
   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. Wählen Sie auf der Registerkarte **Query (Abfrage)** und führen Sie dann folgende Abfrage aus:

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

   Folgende Antwort sollte zurückgegeben werden:

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

Um den Resolver einzurichten: `addUser`

1. Wählen Sie die Registerkarte **Schema** aus.

1. **Suchen Sie rechts neben dem **Schema-Editor** im Bereich **Resolver** unter dem **Abfragetyp** das `addUser` Feld und wählen Sie Anhängen aus.**

1. Behalten Sie den Resolvertyp bei `Unit` und die Laufzeit bei. `APPSYNC_JS`

1. Wählen Sie unter **Datenquellenname** den HTTP-Endpunkt aus, den Sie zuvor erstellt haben.

1. Wählen Sie **Erstellen** aus.

1. Fügen Sie im **Resolver-Code-Editor** das folgende Snippet als Ihren Request-Handler hinzu:

   ```
   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. Fügen Sie das folgende Snippet als Antworthandler hinzu:

   ```
   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. Wählen Sie auf der Registerkarte **Query (Abfrage)** und führen Sie dann folgende Abfrage aus:

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

   Wenn Sie die `getUser` Abfrage erneut ausführen, sollte sie die folgende Antwort zurückgeben:

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

## Dienste werden aufgerufen AWS
<a name="invoking-aws-services-js"></a>

Sie können HTTP-Resolver verwenden, um eine GraphQL-API-Schnittstelle für AWS Dienste einzurichten. HTTP-Anfragen an AWS müssen mit dem [Signature Version 4-Prozess](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) signiert werden, damit identifiziert werden AWS kann, wer sie gesendet hat. AWS AppSync berechnet die Signatur in Ihrem Namen, wenn Sie der HTTP-Datenquelle eine IAM-Rolle zuordnen.

Sie stellen zwei zusätzliche Komponenten bereit, um AWS Dienste mit HTTP-Resolvern aufzurufen:
+ Eine IAM-Rolle mit Berechtigungen zum Aufrufen des Dienstes AWS APIs
+ Signierkonfiguration in der Datenquelle

Wenn Sie den [ListGraphqlApis Vorgang](https://docs.aws.amazon.com/appsync/latest/APIReference/API_ListGraphqlApis.html) beispielsweise mit HTTP-Resolvern aufrufen möchten, [erstellen Sie zunächst eine IAM-Rolle](attaching-a-data-source.md#aws-appsync-getting-started-build-a-schema-from-scratch), der die folgende AWS AppSync Richtlinie zugewiesen ist:

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

****  

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

------

Als Nächstes erstellen Sie die HTTP-Datenquelle für. AWS AppSync In diesem Beispiel rufen Sie AWS AppSync in der Region USA West (Oregon) auf. Richten Sie die folgende HTTP-Konfiguration in einer Datei mit dem Namen `http.json` ein, die die Signierregion und den Servicenamen enthält:

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

Verwenden Sie dann die, AWS CLI um die Datenquelle mit einer zugehörigen Rolle wie folgt zu erstellen:

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

Wenn Sie einen Resolver an das Feld im Schema anhängen, verwenden Sie zum Aufrufen AWS AppSync die folgende Vorlage für die Anforderungszuweisung:

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

Wenn Sie eine GraphQL-Abfrage für diese Datenquelle ausführen, AWS AppSync signiert die Anfrage mit der von Ihnen angegebenen Rolle und fügt die Signatur in die Anfrage ein. Die Abfrage gibt eine Liste von AWS AppSync GraphQL APIs in Ihrem Konto in dieser AWS Region zurück.