GraphQL untuk Platform InterSystems


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 :


  • SISA
  • Soket web
  • SABUN

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:


  1. Kami memuat data pengguna dengan id- nya
  2. Dengan id kita mendapatkan postingannya
  3. 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:


  1. Unduh rilis terbaru dari GitHub dan impor ke area yang diinginkan
  2. 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
  3. GraphiQL adalah shell untuk menguji permintaan GraphQL. Unduh rilis GraphiQL rakitan terbaru atau bangun sendiri
  4. 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)


GraphiQL


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:


filter


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

filter


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:
ruang lingkup
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
    • Hanya banyak satu sikap
  • Lembar tipe sederhana
  • Lembar benda

Sedang dalam implementasi


Permintaan:


  • Objek Bersarang
    • Dukungan untuk semua jenis hubungan
  • penyaringan
    • Dukungan Ketimpangan

Dalam rencana



β†’ Tautan ke repositori proyek
β†’ Tautan ke server demo


Permasalahan Tarik Permintaan sangat disambut.
Ikuti perkembangan proyek kami!

Source: https://habr.com/ru/post/id413717/


All Articles