
GraphQL adalah standar untuk mendeklarasikan struktur data dan metode untuk memperoleh data, yang bertindak sebagai lapisan tambahan antara klien dan server. Jika ini adalah pertama kalinya Anda mendengar tentang GraphQL, berikut adalah beberapa sumber yang bagus: satu dan dua .
Pada artikel ini saya akan memberi tahu Anda bagaimana Anda dapat menggunakan GraphQL dalam proyek Anda menggunakan teknologi InterSystems.
Saat ini, ada beberapa cara untuk membuat aplikasi client-server pada platform InterSystems :
Tapi mengapa GraphQL begitu bagus? Fitur baru apa yang akan diberikannya sebagai perbandingan, misalnya, dengan REST?
GraphQL memiliki beberapa jenis kueri:
- permintaan adalah permintaan ke server untuk menerima data, seperti pada REST, disarankan untuk menggunakan permintaan GET untuk menerima data.
- mutasi - tipe ini bertanggung jawab untuk mengubah data di server. Di REST, untuk mengubah permintaan POST (PUT, DELETE) data.
Mutasi , seperti kueri, dapat mengembalikan data - ini nyaman jika Anda ingin meminta informasi terbaru dari server segera setelah mutasi. - langganan adalah jenis kueri yang sama yang akan menampilkan data. Satu-satunya perbedaan adalah bahwa kueri dipicu dengan merender halaman pada klien, dan langganan dipicu oleh mutasi .
Fitur utama GraphQL dan manfaat apa yang digunakan
Klien memutuskan apa yang ingin ia terima.
Salah satu fitur utama GraphQL adalah bahwa struktur dan jumlah data ditentukan oleh aplikasi klien. Klien secara akurat menunjukkan data apa yang ingin ia terima, menggunakan struktur deklaratif, seperti grafik, yang sangat mirip dengan format JSON. Struktur respons sesuai dengan struktur permintaan.
Beginilah tampilan permintaan GraphQL sederhana:
{ Sample_Company { Name } }
Jawab dalam format JSON:
{ "data": { "Sample_Company": [ { "Name": "CompuSoft Associates" }, { "Name": "SynerTel Associates" }, { "Name": "RoboGlomerate Media Inc." }, { "Name": "QuantaTron Partners" } ] } }
Titik masuk tunggal
Di GraphQL, untuk bekerja dengan data, kami selalu beralih ke satu titik masuk ( titik akhir ) - server GQL. Mengubah struktur, bidang, parameter kueri, kami bekerja dengan data yang berbeda. REST yang sama memiliki banyak titik akhir.
Bandingkan REST dengan GraphQL dengan contoh sederhana:

Misalkan Anda ingin mengunggah konten pengguna, untuk REST Anda perlu membuat tiga permintaan ke server:
- Kami memuat data pengguna dengan id- nya
- Dengan id kita mendapatkan postingannya
- Dengan id kita mendapatkan pelanggannya
Kartu REST cocok dengan permintaan ini:
<Route Url="/user/:id" Method="GET" Call="GetUserByID"/> <Route Url="/user/:id/posts" Method="GET" Call="GetUserPostsByID"/> <Route Url="/user/:id/follovers" Method="GET" Call="GetUserFolloversByID"/>
Untuk mendapatkan dataset baru, kartu REST harus dilengkapi dengan titik akhir baru.
GraphQL mengatasi tugas ini dalam satu permintaan. Untuk melakukan ini, tentukan yang berikut ini di badan permintaan:
{ operationName: null, // query ( query TestName(...){...} ) query: "query { User(id: "ertg439frjw") { name posts { title } followers(last: 3) { name } } }", variables: null // , query* }
Kartu REST cocok dengan permintaan ini:
<Route Url="/graphql" Method="POST" Call="GraphQL"/>
Selain itu, ini adalah satu-satunya titik akhir di server.
Instal GraphQL dan GraphiQL
Untuk mulai menggunakan GraphQL, Anda perlu melakukan beberapa langkah:
- Unduh rilis terbaru dari GitHub dan impor ke area yang diinginkan
- Buka portal manajemen sistem dan buat aplikasi web baru untuk produk Anda dari Platform Data InterSystems (CachΓ©, Ensemble, atau IRIS):
- Nama - /
- Cakupan - mis. SAMPLES
- Kelas penangan - GraphQL.REST.Main
- GraphiQL adalah shell untuk menguji permintaan GraphQL. Unduh rilis GraphiQL rakitan terbaru atau bangun sendiri
- Buat aplikasi web baru:
- Nama - / graphiql
- Cakupan - mis. SAMPLES
- Jalur fisik ke file CSP adalah C: \ InterSystems \ GraphiQL \
Mari kita lihat hasilnya
Pergi ke browser di tautan ini http: // localhost: 57772 / graphiql / index.html (localhost - server, 57772 - port)

Saya pikir semuanya jelas dengan area Permintaan dan Respons , dan Skema adalah dokumentasi yang dibuat untuk semua kelas yang disimpan di area tersebut.
Sirkuit berisi:
- Kelas
- Properti, Argumen, dan Jenisnya
- Deskripsi semua hal di atas, yang dihasilkan dari komentar
Pertimbangkan diagram menggunakan kelas Sample_Company sebagai contoh :

GraphiQL juga mendukung pelengkapan otomatis, yang dapat dipanggil dengan kombinasi tombol Ctrl + Space :

Pertanyaan
Kueri dapat berupa sederhana atau bersarang, Anda dapat meminta beberapa set data. Di bawah ini adalah contoh permintaan data dari dua kelas yang berbeda, Sample_Person dan Sample_Company :

Penyaringan
Saat ini, hanya kesetaraan ketat yang didukung:

Pagination
4 fungsi untuk pagination diterapkan, jika perlu mereka dapat dikombinasikan:
- setelah: n - semua rekaman dengan id lebih besar dari n
- sebelumnya: n - semua rekaman dengan id kurang dari n
- pertama: n - n entri pertama
- terakhir: n - n entri terakhir

Lingkup
Paling sering, sesuai dengan logika bisnis aplikasi untuk klien tertentu, tidak semua kelas di wilayah tersebut harus tersedia, tetapi kelas yang ia miliki haknya, sesuai dengan perannya. Berdasarkan ini, ada kebutuhan untuk membatasi visibilitas kelas kepada klien:
- Semua kelas dalam lingkup ( GraphQL.Scope.All )
- Kelas yang diwarisi dari superclass ( GraphQL.Scope.Superclass )
- Kelas milik paket tertentu ( GraphQL.Scope.Package )
Untuk mengubah cara visibilitas terbatas, Anda perlu membuka studio, pergi ke area yang diinginkan dan buka kelas GraphQL.Settings . Ini memiliki parameter SCOPECLASS , nilai defaultnya diatur ke GraphQL.Scope.All - ini adalah kelas yang menggambarkan antarmuka untuk membatasi visibilitas kelas di lapangan:

Untuk mengubah batas visibilitas kelas, Anda hanya perlu mengatur salah satu nilai yang ditunjukkan di atas, GraphQL.Scope.Package atau GraphQL.Scope.Superclass .
Dalam kasus GraphQL.Scope.Package , masih perlu untuk pergi ke kelas ini dan mengatur nilai parameter Paket ke nama paket yang diinginkan, misalnya, Sampel , maka semua kelas tersimpan dari paket ini akan tersedia:

Dan dengan GraphQL.Scope.Superclass, Anda juga bisa mewarisi dari kelas ini di kelas yang Anda butuhkan

Saat ini didukung
Permintaan:
- Dasar
- Objek Bersarang
- Lembar tipe sederhana
- Lembar benda
Sedang dalam implementasi
Permintaan:
- Objek Bersarang
- Dukungan untuk semua jenis hubungan
- penyaringan
Dalam rencana
β Tautan ke repositori proyek
β Tautan ke server demo
Permasalahan Tarik Permintaan sangat disambut.
Ikuti perkembangan proyek kami!