Properti tambahan dari GraphQL - AWS AppSync

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

Properti tambahan dari GraphQL

GraphQL terdiri dari beberapa prinsip desain untuk menjaga kesederhanaan dan ketahanan dalam skala.

Deklaratif

GraphQL bersifat deklaratif, yang berarti pengguna akan mendeskripsikan (membentuk) data dengan hanya mendeklarasikan bidang yang ingin mereka kueri. Respons hanya akan mengembalikan data untuk properti ini. Misalnya, berikut adalah operasi yang mengambil Book objek dalam tabel DynamoDB dengan nilai 13 ISBN id 9780199536061:

{ getBook(id: "9780199536061") { name year author } }

Respons akan mengembalikan bidang di payload (name,year, danauthor) dan tidak ada yang lain:

{ "data": { "getBook": { "name": "Anna Karenina", "year": "1878", "author": "Leo Tolstoy", } } }

Karena prinsip desain ini, GraphQL menghilangkan masalah abadi dari over- dan under-fetching REST APIs yang berhubungan dengan sistem yang kompleks. Ini menghasilkan pengumpulan data yang lebih efisien dan peningkatan kinerja jaringan.

Hirarkis

GraphQL fleksibel karena data yang diminta dapat dibentuk oleh pengguna agar sesuai dengan kebutuhan aplikasi. Data yang diminta selalu mengikuti jenis dan sintaks properti yang ditentukan dalam API GraphQL Anda. Misalnya, cuplikan berikut menunjukkan getBook operasi dengan lingkup bidang baru yang disebut quotes yang mengembalikan semua string kutipan tersimpan dan halaman yang ditautkan ke Book 9780199536061:

{ getBook(id: "9780199536061") { name year author quotes { description page } } }

Menjalankan query ini mengembalikan hasil sebagai berikut:

{ "data": { "getBook": { "name": "Anna Karenina", "year": "1878", "author": "Leo Tolstoy", "quotes": [ { "description": "The highest Petersburg society is essentially one: in it everyone knows everyone else, everyone even visits everyone else.", "page": 135 }, { "description": "Happy families are all alike; every unhappy family is unhappy in its own way.", "page": 1 }, { "description": "To Konstantin, the peasant was simply the chief partner in their common labor.", "page": 251 } ] } } }

Seperti yang Anda lihat, quotes bidang yang ditautkan ke buku yang diminta dikembalikan sebagai array dalam format yang sama yang dijelaskan oleh kueri kami. Meskipun tidak ditampilkan di sini, GraphQL memiliki keuntungan tambahan karena tidak khusus tentang lokasi data yang diambilnya. Booksdan quotes dapat disimpan secara terpisah, tetapi GraphQL akan tetap mengambil informasi selama asosiasi ada. Ini berarti kueri Anda dapat mengambil banyak data mandiri dalam satu permintaan.

Introspektif

GraphQL adalah mendokumentasikan diri, atau introspektif. Ini mendukung beberapa operasi bawaan yang memungkinkan pengguna untuk melihat jenis dan bidang yang mendasarinya dalam skema. Misalnya, berikut adalah Foo tipe dengan description bidang date dan:

type Foo { date: String description: String }

Kita bisa menggunakan _type operasi untuk menemukan metadata pengetikan di bawah skema:

{ __type(name: "Foo") { name # returns the name of the type fields { # returns all fields in the type name # returns the name of each field type { # returns all types for each field name # returns the scalar type } } } }

Ini akan mengembalikan respons:

{ "__type": { "name": "Foo", # The type name "fields": [ { "name": "date", # The date field "type": { "name": "String" } # The date's type }, { "name": "description", # The description field "type": { "name": "String" } # The description's type }, ] } }

Fitur ini dapat digunakan untuk mengetahui jenis dan bidang apa yang didukung skema GraphQL tertentu. GraphQL mendukung berbagai macam operasi introspektif ini. Untuk informasi lebih lanjut, lihat Introspeksi.

Pengetikan yang kuat

GraphQL mendukung pengetikan yang kuat melalui jenis dan sistem bidangnya. Ketika Anda mendefinisikan sesuatu dalam skema Anda, itu harus memiliki tipe yang dapat divalidasi sebelum runtime. Itu juga harus mengikuti spesifikasi sintaks GraphQL. Konsep ini tidak berbeda dengan pemrograman dalam bahasa lain. Misalnya, inilah Foo tipe dari sebelumnya:

type Foo { date: String description: String }

Kita bisa melihat bahwa Foo adalah objek yang akan dibuat. Di dalam instanceFoo, akan ada date dan description field, keduanya tipe String primitif (skalar). Secara sintaksis, kita melihat bahwa Foo dideklarasikan, dan bidangnya ada di dalam ruang lingkupnya. Kombinasi pemeriksaan tipe dan sintaks logis ini memastikan bahwa API GraphQL Anda ringkas dan terbukti dengan sendirinya. Spesifikasi pengetikan dan sintaks GraphQL dapat ditemukan di sini.