Menguji dan men-debug resolver di () AWS AppSync JavaScript - AWS AppSync

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

Menguji dan men-debug resolver di () AWS AppSync JavaScript

AWS AppSync mengeksekusi resolver pada bidang GraphQL terhadap sumber data. Saat bekerja dengan resolver pipeline, fungsi berinteraksi dengan sumber data Anda. Seperti yang dijelaskan dalam ikhtisar JavaScript resolver, fungsi berkomunikasi dengan sumber data dengan menggunakan penangan permintaan dan respons yang ditulis JavaScript dan dijalankan pada runtime. APPSYNC_JS Ini memungkinkan Anda untuk memberikan logika dan kondisi khusus sebelum dan sesudah berkomunikasi dengan sumber data.

Untuk membantu pengembang menulis, menguji, dan men-debug resolver ini, AWS AppSync konsol juga menyediakan alat untuk membuat permintaan dan respons GraphQL dengan data tiruan ke penyelesai bidang individual. Selain itu, Anda dapat melakukan kueri, mutasi, dan langganan di AWS AppSync konsol dan melihat aliran log terperinci dari seluruh permintaan dari Amazon. CloudWatch Ini termasuk hasil dari sumber data.

Pengujian dengan data tiruan

Ketika resolver GraphQL dipanggil, itu berisi objek yang memiliki informasi context yang relevan tentang permintaan. Ini termasuk argumen dari klien, informasi identitas, dan data dari bidang GraphQL induk. Ini juga menyimpan hasil dari sumber data, yang dapat digunakan dalam penangan respons. Untuk informasi selengkapnya tentang struktur ini dan utilitas pembantu yang tersedia untuk digunakan saat pemrograman, lihat referensi objek konteks Resolver.

Saat menulis atau mengedit fungsi resolver, Anda dapat meneruskan objek konteks tiruan atau pengujian ke editor konsol. Ini memungkinkan Anda untuk melihat bagaimana permintaan dan penangan respons mengevaluasi tanpa benar-benar berjalan terhadap sumber data. Misalnya, Anda dapat lulus firstname: Shaggy argumen pengujian dan melihat bagaimana itu mengevaluasi saat menggunakan ctx.args.firstname dalam kode template Anda. Anda juga dapat menguji evaluasi setiap pembantu utilitas seperti util.autoId() atauutil.time.nowISO8601().

Menguji penyelesai

Contoh ini akan menggunakan AWS AppSync konsol untuk menguji resolver.

  1. Masuk ke AWS Management Console dan buka AppSynckonsol.

    1. Di APIsdasbor, pilih GraphQL API Anda.

    2. Di Sidebar, pilih Fungsi.

  2. Pilih fungsi yang ada.

  3. Di bagian atas halaman fungsi Perbarui, pilih Pilih konteks pengujian, lalu pilih Buat konteks baru.

  4. Pilih objek konteks sampel atau isi JSON secara manual di jendela Konfigurasi konteks pengujian di bawah ini.

  5. Masukkan nama konteks Teks.

  6. Pilih tombol Simpan.

  7. Untuk mengevaluasi resolver Anda menggunakan objek konteks tiruan ini, pilih Run Test.

Untuk contoh yang lebih praktis, misalkan Anda memiliki aplikasi yang menyimpan tipe Dog GraphQL yang menggunakan pembuatan ID otomatis untuk objek dan menyimpannya di Amazon DynamoDB. Anda juga ingin menulis beberapa nilai dari argumen mutasi GraphQL dan hanya mengizinkan pengguna tertentu untuk melihat respons. Cuplikan berikut menunjukkan seperti apa skema itu:

type Dog { breed: String color: String } type Mutation { addDog(firstname: String, age: Int): Dog }

Anda dapat menulis AWS AppSync fungsi dan menambahkannya ke addDog resolver Anda untuk menangani mutasi. Untuk menguji AWS AppSync fungsi Anda, Anda dapat mengisi objek konteks seperti contoh berikut. Berikut ini memiliki argumen dari klien name danage, dan username diisi dalam identity objek:

{ "arguments" : { "firstname": "Shaggy", "age": 4 }, "source" : {}, "result" : { "breed" : "Miniature Schnauzer", "color" : "black_grey" }, "identity": { "sub" : "uuid", "issuer" : " https://cognito-idp.{region}.amazonaws.com/{userPoolId}", "username" : "Nadia", "claims" : { }, "sourceIp" :[ "x.x.x.x" ], "defaultAuthStrategy" : "ALLOW" } }

Anda dapat menguji AWS AppSync fungsi Anda menggunakan kode berikut:

import { util } from '@aws-appsync/utils'; export function request(ctx) { return { operation: 'PutItem', key: util.dynamodb.toMapValues({ id: util.autoId() }), attributeValues: util.dynamodb.toMapValues(ctx.args), }; } export function response(ctx) { if (ctx.identity.username === 'Nadia') { console.log("This request is allowed") return ctx.result; } util.unauthorized(); }

Penangan permintaan dan respons yang dievaluasi memiliki data dari objek konteks pengujian Anda dan nilai yang dihasilkan dari. util.autoId() Selain itu, jika Anda mengubah username ke nilai selainNadia, hasilnya tidak akan dikembalikan karena pemeriksaan otorisasi akan gagal. Untuk informasi selengkapnya tentang kontrol akses berbutir halus, lihat Kasus penggunaan otorisasi.

Menguji permintaan dan penangan respons dengan's AWS AppSync APIs

Anda dapat menggunakan EvaluateCode API perintah untuk menguji kode Anda dari jarak jauh dengan data tiruan. Untuk memulai dengan perintah, pastikan Anda telah menambahkan appsync:evaluateMappingCode izin ke kebijakan Anda. Sebagai contoh:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appsync:evaluateCode", "Resource": "arn:aws:appsync:<region>:<account>:*" } ] }

Anda dapat memanfaatkan perintah dengan menggunakan AWS CLIatau AWS SDKs. Misalnya, ambil Dog skema dan permintaan AWS AppSync fungsinya dan penangan respons dari bagian sebelumnya. Menggunakan CLI di stasiun lokal Anda, simpan kode ke file bernamacode.js, lalu simpan context objek ke file bernamacontext.json. Dari shell Anda, jalankan perintah berikut:

$ aws appsync evaluate-code \ --code file://code.js \ --function response \ --context file://context.json \ --runtime name=APPSYNC_JS,runtimeVersion=1.0.0

Responsnya evaluationResult berisi muatan yang dikembalikan oleh handler Anda. Ini juga berisi logs objek, yang memegang daftar log yang dihasilkan oleh handler Anda selama evaluasi. Ini memudahkan untuk men-debug eksekusi kode Anda dan melihat informasi tentang evaluasi Anda untuk membantu memecahkan masalah. Sebagai contoh:

{ "evaluationResult": "{\"breed\":\"Miniature Schnauzer\",\"color\":\"black_grey\"}", "logs": [ "INFO - code.js:13:5: \"This request is allowed\"" ] }

evaluationResultDapat diurai sebagaiJSON, yang memberikan:

{ "breed": "Miniature Schnauzer", "color": "black_grey" }

Dengan menggunakanSDK, Anda dapat dengan mudah menggabungkan pengujian dari rangkaian pengujian favorit Anda untuk memvalidasi perilaku penangan Anda. Sebaiknya buat pengujian menggunakan Jest Testing Framework, tetapi rangkaian pengujian apa pun berfungsi. Cuplikan berikut menunjukkan validasi hipotetis berjalan. Perhatikan bahwa kami mengharapkan respons evaluasi validJSON, jadi kami gunakan JSON.parse untuk mengambil JSON dari respons string:

const AWS = require('aws-sdk') const fs = require('fs') const client = new AWS.AppSync({ region: 'us-east-2' }) const runtime = {name:'APPSYNC_JS',runtimeVersion:'1.0.0') test('request correctly calls DynamoDB', async () => { const code = fs.readFileSync('./code.js', 'utf8') const context = fs.readFileSync('./context.json', 'utf8') const contextJSON = JSON.parse(context) const response = await client.evaluateCode({ code, context, runtime, function: 'request' }).promise() const result = JSON.parse(response.evaluationResult) expect(result.key.id.S).toBeDefined() expect(result.attributeValues.firstname.S).toEqual(contextJSON.arguments.firstname) })

Ini menghasilkan hasil sebagai berikut:

Ran all test suites. > jest PASS ./index.test.js ✓ request correctly calls DynamoDB (543 ms) Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 totalTime: 1.511 s, estimated 2 s

Mendebug kueri langsung

Tidak ada pengganti untuk end-to-end pengujian dan logging untuk men-debug aplikasi produksi. AWS AppSync memungkinkan Anda mencatat kesalahan dan detail permintaan lengkap menggunakan Amazon CloudWatch. Selain itu, Anda dapat menggunakan AWS AppSync konsol untuk menguji kueri GraphQL, mutasi, dan langganan serta data log streaming langsung untuk setiap permintaan kembali ke editor kueri untuk di-debug secara real time. Untuk langganan, log menampilkan informasi waktu koneksi.

Untuk melakukan ini, Anda harus mengaktifkan CloudWatch log Amazon terlebih dahulu, seperti yang dijelaskan dalam Pemantauan dan pencatatan. Selanjutnya, di AWS AppSync konsol, pilih tab Queries dan kemudian masukkan kueri GraphQL yang valid. Di bagian kanan bawah, klik dan seret jendela Log untuk membuka tampilan log. Di bagian atas halaman, pilih ikon panah putar untuk menjalankan kueri GraphQL Anda. Dalam beberapa saat, log permintaan dan respons lengkap Anda untuk operasi dialirkan ke bagian ini dan Anda dapat melihatnya di konsol.