Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo dei HTTP resolver in AWS AppSync
Nota
Ora supportiamo principalmente il runtime APPSYNC _JS e la relativa documentazione. Valuta la possibilità di utilizzare il runtime APPSYNC _JS e le relative guide qui.
AWS AppSync consente di utilizzare fonti di dati supportate (ad esempio Amazon DynamoDB AWS Lambda, Amazon Service o OpenSearch Amazon Aurora) per eseguire varie operazioni, oltre a qualsiasi endpoint HTTP arbitrario per risolvere i campi GraphQL. Una volta che gli HTTP endpoint sono disponibili, puoi connetterti ad essi utilizzando una fonte di dati. Quindi, è possibile configurare un resolver nello schema per eseguire operazioni GraphQL, ad esempio query, mutazioni e sottoscrizioni. Questo tutorial fornirà una guida di alcuni esempi comuni.
In questo tutorial utilizzi un REST API (creato utilizzando Amazon API Gateway e Lambda) con un endpoint GraphQL AWS AppSync .
Impostazione One-Click
Se desideri configurare automaticamente un endpoint GraphQL AWS AppSync con un HTTP endpoint configurato (utilizzando Amazon Gateway API e Lambda), puoi utilizzare il seguente modello: AWS CloudFormation
Creare un REST API
Puoi usare il seguente AWS CloudFormation modello per configurare un REST endpoint che funzioni per questo tutorial:
Lo AWS CloudFormation stack esegue i seguenti passaggi:
-
Imposta una funzione Lambda che contiene la logica di business per il tuo microservizio.
-
Configura un API gateway REST API con la seguente combinazione endpoint/method/content di tipi:
APIPercorso delle risorse | HTTPMetodo | Tipo di contenuto supportato |
---|---|---|
/v1/utenti |
POST |
application/json |
/v1/utenti |
GET |
application/json |
/v1/utenti/1 |
GET |
application/json |
/v1/utenti/1 |
PUT |
application/json |
/v1/utenti/1 |
DELETE |
application/json |
Creare il tuo GraphQL API
Per creare il GraphQL API in: AWS AppSync
-
Apri la AWS AppSync console e scegli Crea API.
-
Per il API nome, digita
UserData
. -
Scegli Custom schema (Schema personalizzato).
-
Scegli Create (Crea) .
La AWS AppSync console crea un nuovo GraphQL API per te utilizzando la modalità di autenticazione con API chiave. Puoi usare la console per configurare il resto di GraphQL API ed eseguire query su di esso per il resto di questo tutorial.
Creazione di uno schema GraphQL
Ora che hai un GraphQLAPI, creiamo uno schema GraphQL. Dall'editor di schemi nella AWS AppSync console, assicurati che lo schema corrisponda al seguente schema:
schema { query: Query mutation: Mutation } 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 }
Configura la tua fonte di HTTP dati
Per configurare l'origine HTTP dati, procedi come segue:
-
Nella DataSourcesscheda, scegli Nuovo, quindi digita un nome descrittivo per l'origine dati (ad esempio,
HTTP
). -
In Tipo di origine dati, scegli HTTP.
-
Imposta l'endpoint sull'endpoint API Gateway che viene creato. Assicurarsi di non includere il nome della fase come parte dell'endpoint.
Nota: al momento solo gli endpoint pubblici sono supportati da. AWS AppSync
Nota: per ulteriori informazioni sulle autorità di certificazione riconosciute dal AWS AppSync servizio, consulta Certificate Authorities (CA) Recognized by AWS AppSync for HTTPS Endpoints.
Configurazione dei resolver
In questo passaggio, connetti l'origine dati http alla getUserquery.
Per configurare il resolver:
-
Scegli la scheda Schema.
-
Nel riquadro Tipi di dati a destra, sotto il Tipo di query, trova il getUsercampo e scegli Allega.
-
Nel nome origine dati, scegliere HTTP.
-
In Configure the request mapping template (Configura il modello di mappatura della richiesta), incollare il codice seguente:
{ "version": "2018-05-29", "method": "GET", "params": { "headers": { "Content-Type": "application/json" } }, "resourcePath": $util.toJson("/v1/users/${ctx.args.id}") }
-
In Configure the response mapping template (Configura il modello di mappatura della risposta), incollare il codice seguente:
## return the body #if($ctx.result.statusCode == 200) ##if response is 200 $ctx.result.body #else ##if response is not 200, append the response to error block. $utils.appendError($ctx.result.body, "$ctx.result.statusCode") #end
-
Scegliere la scheda Query quindi eseguire la seguente query:
query GetUser{ getUser(id:1){ id username } }
Viene restituita la risposta seguente:
{ "data": { "getUser": { "id": "1", "username": "nadia" } } }
-
Scegli la scheda Schema.
-
Nel riquadro Tipi di dati a destra sotto Mutazione, trova il addUsercampo e scegli Allega.
-
Nel nome origine dati, scegliere HTTP.
-
In Configure the request mapping template (Configura il modello di mappatura della richiesta), incollare il codice seguente:
{ "version": "2018-05-29", "method": "POST", "resourcePath": "/v1/users", "params":{ "headers":{ "Content-Type": "application/json", }, "body": $util.toJson($ctx.args.userInput) } }
-
In Configure the response mapping template (Configura il modello di mappatura della risposta), incollare il codice seguente:
## Raise a GraphQL field error in case of a datasource invocation error #if($ctx.error) $util.error($ctx.error.message, $ctx.error.type) #end ## if the response status code is not 200, then return an error. Else return the body ** #if($ctx.result.statusCode == 200) ## If response is 200, return the body. $ctx.result.body #else ## If response is not 200, append the response to error block. $utils.appendError($ctx.result.body, "$ctx.result.statusCode") #end
-
Scegliere la scheda Query quindi eseguire la seguente query:
mutation addUser{ addUser(userInput:{ id:"2", username:"shaggy" }){ id username } }
Viene restituita la risposta seguente:
{ "data": { "getUser": { "id": "2", "username": "shaggy" } } }
Invocare AWS i servizi
È possibile utilizzare HTTP i resolver per configurare un'interfaccia GraphQL per i servizi. API AWS HTTPle richieste AWS devono essere firmate con il processo Signature Version 4 in modo da AWS poter identificare chi le ha inviate. AWS AppSync calcola la firma per tuo conto quando associ un IAM ruolo alla fonte di HTTP dati.
Fornisci due componenti aggiuntivi per richiamare i AWS servizi con HTTP resolver:
-
Un IAM ruolo con le autorizzazioni per chiamare il servizio AWS APIs
-
Configurazione della firma nell'origine dati
Ad esempio, se si desidera chiamare l'ListGraphqlApis operazione con HTTP resolver, è necessario innanzitutto creare un IAM ruolo che AWS AppSync presuppone la seguente politica allegata:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "appsync:ListGraphqlApis" ], "Effect": "Allow", "Resource": "*" } ] }
Quindi, create la fonte di dati per. HTTP AWS AppSync In questo esempio, si chiama la AWS AppSync regione Stati Uniti occidentali (Oregon). Imposta la seguente HTTP configurazione in un file denominatohttp.json
, che include la regione di firma e il nome del servizio:
{ "endpoint": "https://appsync.us-west-2.amazonaws.com/", "authorizationConfig": { "authorizationType": "AWS_IAM", "awsIamConfig": { "signingRegion": "us-west-2", "signingServiceName": "appsync" } } }
Quindi, utilizzate il AWS CLI per creare l'origine dati con un ruolo associato come segue:
aws appsync create-data-source --api-id <API-ID> \ --name AWSAppSync \ --type HTTP \ --http-config file:///http.json \ --service-role-arn <ROLE-ARN>
Quando colleghi un resolver al campo dello schema, usa il seguente modello di mappatura delle richieste per chiamare: AWS AppSync
{ "version": "2018-05-29", "method": "GET", "resourcePath": "/v1/apis" }
Quando esegui una query GraphQL per questa fonte di dati, AWS AppSync firma la richiesta utilizzando il ruolo che hai fornito e include la firma nella richiesta. La query restituisce un elenco di AWS AppSync GraphQL APIs nel tuo account in quella AWS regione.