Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menggunakan subsciptions untuk aplikasi data real-time di AWS AppSync
AWS AppSyncmemungkinkan Anda memanfaatkan langganan untuk menerapkan pembaruan aplikasi langsung, pemberitahuan push, dll. Ketika klien menjalankan operasi langganan GraphQL, koneksi WebSocket aman secara otomatis dibuat dan dikelola oleh. AWS AppSync Aplikasi kemudian dapat mendistribusikan data secara real-time dari sumber data ke pelanggan sambil AWS AppSync terus mengelola koneksi aplikasi dan persyaratan penskalaan. Bagian berikut akan menunjukkan kepada Anda bagaimana langganan AWS AppSync bekerja.
Arahan berlangganan skema GraphQL
Langganan di AWS AppSync dipanggil sebagai respons terhadap mutasi. Ini berarti Anda dapat membuat sumber data apa pun secara AWS AppSync real time dengan menentukan direktif skema GraphQL pada mutasi.
Pustaka AWS Amplify klien secara otomatis menangani manajemen koneksi berlangganan. Pustaka menggunakan pure WebSockets sebagai protokol jaringan antara klien dan layanan.
catatan
Untuk mengontrol otorisasi pada waktu koneksi ke langganan, Anda dapat menggunakan AWS Identity and Access Management (IAM), kumpulan identitas Amazon Cognito AWS Lambda, atau kumpulan pengguna Amazon Cognito untuk otorisasi tingkat lapangan. Untuk kontrol akses berbutir halus pada langganan, Anda dapat melampirkan resolver ke bidang langganan Anda dan melakukan logika menggunakan identitas pemanggil dan sumber data. AWS AppSync Untuk informasi selengkapnya, lihat Mengkonfigurasi otorisasi dan otentikasi untuk mengamankan GraphQL APIs.
Langganan dipicu dari mutasi dan set pemilihan mutasi dikirim ke pelanggan.
Contoh berikut menunjukkan cara bekerja dengan langganan GraphQL. Itu tidak menentukan sumber data karena sumber data bisa Lambda, Amazon DynamoDB, atau Amazon Service. OpenSearch
Untuk memulai langganan, Anda harus menambahkan titik masuk langganan ke skema Anda sebagai berikut:
schema { query: Query mutation: Mutation subscription: Subscription }
Misalkan Anda memiliki situs posting blog, dan Anda ingin berlangganan blog baru dan perubahan ke blog yang ada. Untuk melakukan ini, tambahkan Subscription
definisi berikut ke skema Anda:
type Subscription { addedPost: Post updatedPost: Post deletedPost: Post }
Misalkan lebih lanjut bahwa Anda memiliki mutasi berikut:
type Mutation { addPost(id: ID! author: String! title: String content: String url: String): Post! updatePost(id: ID! author: String! title: String content: String url: String ups: Int! downs: Int! expectedVersion: Int!): Post! deletePost(id: ID!): Post! }
Anda dapat membuat bidang ini secara real time dengan menambahkan @aws_subscribe(mutations:
["mutation_field_1", "mutation_field_2"])
arahan untuk setiap langganan yang ingin Anda terima notifikasi, sebagai berikut:
type Subscription { addedPost: Post @aws_subscribe(mutations: ["addPost"]) updatedPost: Post @aws_subscribe(mutations: ["updatePost"]) deletedPost: Post @aws_subscribe(mutations: ["deletePost"]) }
Karena @aws_subscribe(mutations: ["",..,""])
mengambil array input mutasi, Anda dapat menentukan beberapa mutasi, yang memulai langganan. Jika Anda berlangganan dari klien, kueri GraphQL Anda mungkin terlihat seperti berikut:
subscription NewPostSub { addedPost { __typename version title content author url } }
Kueri berlangganan ini diperlukan untuk koneksi dan perkakas klien.
Dengan WebSockets klien murni, penyaringan set seleksi dilakukan per klien, karena setiap klien dapat menentukan set pilihannya sendiri. Dalam hal ini, set pemilihan langganan harus merupakan bagian dari set pemilihan mutasi. Misalnya, langganan yang addedPost{author title}
ditautkan ke mutasi hanya addPost(...){id
author title url version}
menerima penulis dan judul posting. Itu tidak menerima bidang lainnya. Namun, jika mutasi tidak memiliki penulis dalam kumpulan pemilihannya, pelanggan akan mendapatkan null
nilai untuk bidang penulis (atau kesalahan jika bidang penulis didefinisikan sebagai required/not-null dalam skema).
Set pemilihan langganan sangat penting saat menggunakan pure WebSockets. Jika bidang tidak didefinisikan secara eksplisit dalam langganan, maka bidang tersebut AWS AppSync tidak ditampilkan.
Pada contoh sebelumnya, langganan tidak memiliki argumen. Misalkan skema Anda terlihat seperti berikut:
type Subscription { updatedPost(id:ID! author:String): Post @aws_subscribe(mutations: ["updatePost"]) }
Dalam hal ini, klien Anda mendefinisikan langganan sebagai berikut:
subscription UpdatedPostSub { updatedPost(id:"XYZ", author:"ABC") { title content } }
Jenis pengembalian subscription
bidang dalam skema Anda harus cocok dengan tipe pengembalian bidang mutasi yang sesuai. Pada contoh sebelumnya, ini ditampilkan sebagai keduanya addPost
dan addedPost
dikembalikan sebagai tipePost
.
Untuk mengatur langganan pada klien, lihatMembangun aplikasi klien menggunakan Amplify client.
Menggunakan argumen berlangganan
Bagian penting dari penggunaan langganan GraphQL adalah memahami kapan dan bagaimana menggunakan argumen. Anda dapat membuat perubahan halus untuk memodifikasi bagaimana dan kapan memberi tahu klien tentang mutasi yang telah terjadi. Untuk melakukan ini, lihat skema sampel dari chapter quickstart, yang menciptakan “Todos”. Untuk skema sampel ini, mutasi berikut didefinisikan:
type Mutation { createTodo(input: CreateTodoInput!): Todo updateTodo(input: UpdateTodoInput!): Todo deleteTodo(input: DeleteTodoInput!): Todo }
Dalam contoh default, klien dapat berlangganan pembaruan apa pun Todo
onUpdateTodo
subscription
dengan menggunakan tanpa argumen:
subscription OnUpdateTodo { onUpdateTodo { description id name when } }
Anda dapat memfilter Anda subscription
dengan menggunakan argumennya. Misalnya, untuk hanya memicu subscription
ketika a todo
dengan spesifik ID
diperbarui, tentukan ID
nilainya:
subscription OnUpdateTodo { onUpdateTodo(id: "
a-todo-id
") { description id name when } }
Anda juga dapat melewati beberapa argumen. Misalnya, berikut ini subscription
menunjukkan cara mendapatkan pemberitahuan tentang Todo
pembaruan apa pun di tempat dan waktu tertentu:
subscription todosAtHome { onUpdateTodo(when: "tomorrow", where: "at home") { description id name when where } }
Perhatikan bahwa semua argumen bersifat opsional. Jika Anda tidak menentukan argumen apa pun di Andasubscription
, Anda akan berlangganan semua Todo
pembaruan yang terjadi di aplikasi Anda. Namun, Anda dapat memperbarui definisi bidang Anda subscription
untuk meminta ID
argumen. Ini akan memaksa respons spesifik, todo
bukan semua todo
s:
onUpdateTodo( id: ID!, name: String, when: String, where: String, description: String ): Todo
Argumen nilai null memiliki arti
Saat membuat kueri langganan AWS AppSync, nilai null
argumen akan memfilter hasil secara berbeda dari menghilangkan argumen sepenuhnya.
Mari kita kembali ke API sampel todos di mana kita bisa membuat todos. Lihat skema sampel dari chapter quickstart.
Mari kita memodifikasi skema kita untuk menyertakan owner
bidang baru, pada Todo
tipe, yang menggambarkan siapa pemiliknya. owner
Bidang tidak diperlukan dan hanya dapat diaturUpdateTodoInput
. Lihat versi skema yang disederhanakan berikut ini:
type Todo { id: ID! name: String! when: String! where: String! description: String! owner: String } input CreateTodoInput { name: String! when: String! where: String! description: String! } input UpdateTodoInput { id: ID! name: String when: String where: String description: String owner: String } type Subscription { onUpdateTodo( id: ID, name: String, when: String, where: String, description: String ): Todo @aws_subscribe(mutations: ["updateTodo"]) }
Langganan berikut mengembalikan semua Todo
pembaruan:
subscription MySubscription { onUpdateTodo { description id name when where } }
Jika Anda memodifikasi langganan sebelumnya untuk menambahkan argumen bidangowner:
null
, Anda sekarang mengajukan pertanyaan yang berbeda. Langganan ini sekarang mendaftarkan klien untuk mendapatkan pemberitahuan tentang semua Todo
pembaruan yang belum diberikan pemilik.
subscription MySubscription { onUpdateTodo(owner: null) { description id name when where } }
catatan
Per 1 Januari 2022, MQTT over WebSockets tidak lagi tersedia sebagai protokol untuk langganan GraphQL di. AWS AppSync APIs Pure WebSockets adalah satu-satunya protokol yang didukung di AWS AppSync.
Klien berdasarkan pustaka Amplify AWS AppSync SDK atau Amplify, dirilis setelah November 2019, secara otomatis menggunakan pure WebSockets secara default. Upgrade klien ke versi terbaru memungkinkan mereka untuk menggunakan AWS AppSync WebSockets mesin murni.
Pure WebSockets hadir dengan ukuran muatan yang lebih besar (240 KB), variasi opsi klien yang lebih luas, dan CloudWatch metrik yang ditingkatkan. Untuk informasi lebih lanjut tentang menggunakan WebSocket klien murni, lihatMembangun WebSocket klien real-time di AWS AppSync.