Apa perbedaan antara Falcor dan GraphQL?

163

GraphQL terdiri dari sistem tipe, bahasa query dan semantik eksekusi, validasi statis, dan introspeksi tipe, masing-masing diuraikan di bawah ini. Untuk memandu Anda melalui masing-masing komponen ini, kami telah menulis contoh yang dirancang untuk menggambarkan berbagai potongan GraphQL.

- https://github.com/facebook/graphql

Falcor memungkinkan Anda mewakili semua sumber data jarak jauh Anda sebagai model domain tunggal melalui grafik JSON virtual. Kode Anda dengan cara yang sama di mana pun data berada, apakah dalam memori pada klien atau melalui jaringan pada server.

- http://netflix.github.io/falcor/

Apa perbedaan antara Falcor dan GraphQL (dalam konteks Relay)?

Gajus
sumber
5
lihat podcast ini di mana Jafar berbicara tentang perbedaan antara Relay / GraphQL dan Falcor / JSON Graph youtu.be/WL54eYbTJUw?t=53m55s
gdi2290

Jawaban:

131

Saya telah melihat Angular Air Episode 26: FalcorJS dan Angular 2 di mana Jafar Husain menjawab bagaimana GraphQL dibandingkan dengan FalcorJS . Ini adalah ringkasan (parafrase):

  • FalcorJS dan GraphQL menangani masalah yang sama (meminta data, mengelola data).
  • Perbedaan penting adalah bahwa GraphQL adalah bahasa query dan FalcorJS tidak.
  • Ketika Anda meminta sumber daya FalcorJS, Anda secara eksplisit meminta serangkaian nilai yang terbatas. FalcorJS memang mendukung hal-hal seperti rentang, misalnya genres[0..10]. Tapi itu tidak mendukung permintaan terbuka, mis genres[0..*].
  • GraphQL diatur berdasarkan: beri saya semua catatan yang benar, pesan dengan ini, dll. Dalam hal ini, bahasa permintaan GraphQL lebih kuat daripada FalcorJS.
  • Dengan GraphQL Anda memiliki bahasa permintaan yang kuat, tetapi Anda harus menafsirkan bahasa permintaan itu di server.

Jafar berpendapat bahwa di sebagian besar aplikasi, tipe kueri yang pergi dari klien ke server memiliki bentuk yang sama. Oleh karena itu, memiliki operasi yang spesifik dan dapat diprediksi seperti get and set memaparkan lebih banyak peluang untuk meningkatkan cache. Selain itu, banyak pengembang yang terbiasa dengan pemetaan permintaan menggunakan router sederhana dalam arsitektur REST.

Diskusi akhir memutuskan apakah kekuatan yang datang dengan GraphQL melebihi kompleksitas.

Gajus
sumber
82

Saya sekarang telah menulis aplikasi dengan kedua perpustakaan dan saya bisa setuju dengan semua yang ada di pos Gajus, tetapi menemukan beberapa hal berbeda yang paling penting dalam penggunaan kerangka kerja saya sendiri.

  • Mungkin perbedaan praktis terbesar adalah bahwa sebagian besar contoh dan mungkin pekerjaan yang dilakukan sampai titik ini pada GraphQL telah terkonsentrasi pada pengintegrasian GraphQL dengan Relay - sistem Facebook untuk mengintegrasikan widget ReactJS dengan persyaratan data mereka. FalcorJS di sisi lain cenderung bertindak secara terpisah dari sistem widget yang berarti keduanya lebih mudah untuk diintegrasikan ke dalam klien Non-React / Relay dan itu akan melakukan lebih sedikit bagi Anda secara otomatis dalam hal mencocokkan dependensi data widget dengan widget.
  • Sisi lain dari FalcorJS yang fleksibel dalam integrasi sisi klien adalah bahwa ia bisa sangat berpendapat tentang bagaimana server perlu bertindak. FalcorJS benar-benar memiliki kemampuan "Panggil Kueri ini melalui HTTP" - meskipun Jafar Husain tampaknya tidak terlalu banyak membicarakannya - dan begitu Anda memasukkannya, cara perpustakaan klien bereaksi terhadap informasi server sangat mirip kecuali bahwa GraphQL / Relay menambahkan lapisan konfigurasi. Dalam FalcorJS, jika Anda mengembalikan nilai untuk film, nilai pengembalian Anda lebih baik mengatakan 'film', sedangkan di GraphQL, Anda dapat menggambarkan bahwa meskipun kueri mengembalikan 'film', Anda harus meletakkannya di sisi klien sebagai data 'film' ' - ini adalah bagian dari kekuatan vs kompleksitas pengorbanan yang disebutkan Gajus.
  • Secara praktis, GraphQL dan Relay tampaknya lebih berkembang. Jafar Husain telah menyebutkan bahwa versi berikutnya dari frontflix Netflix akan berjalan setidaknya sebagian di FalcorJS sedangkan tim Facebook telah menyebutkan bahwa mereka telah menggunakan beberapa versi stack GraphQL / Relay dalam produksi selama lebih dari 3 tahun.
  • Komunitas pengembang sumber terbuka di sekitar GraphQL dan Relay tampaknya berkembang pesat. Ada sejumlah besar proyek pendukung yang dihadiri banyak orang di sekitar GraphQL dan Relay sedangkan saya secara pribadi menemukan sangat sedikit di sekitar FalcorJS. Juga repositori dasar github untuk Relay ( https://github.com/facebook/relay/pulse ) secara signifikan lebih aktif daripada repositori github untuk FalcorJS ( https://github.com/netflix/falcor/pulse ). Ketika saya pertama kali menarik repo Facebook, contohnya rusak. Saya membuka masalah github dan itu diperbaiki dalam beberapa jam. Di sisi lain, masalah github yang saya buka di FalcorJS tidak mendapat tanggapan resmi dalam dua minggu.
Tim Overclocked
sumber
1
GraphQL (2012) telah ada jauh sebelum React dan Relay, jadi poin pertama Anda mungkin tidak sepenuhnya akurat.
Burgi
Kamu mungkin benar. Saya bukan facebooker, jadi saya tidak bisa berbicara dengan sejarah. Komentar saya lebih banyak berasal dari dokumentasi dan pembicaraan facebook saat ini. Mereka diperkenalkan ke dunia sebagai teman ( facebook.github.io/react/blog/2015/02/20/… ) dan keduanya kembali dengan cara yang cukup. Saya telah melihat beberapa handwaving kabur tentang Relay kembali 3 tahun dalam komentar tanggal awal 2015 sehingga ada kemungkinan bahwa keduanya dikembangkan secara internal selama beberapa tahun sebelum disajikan ke dunia luar. Tetapi saya tentu saja tidak memiliki pengetahuan khusus.
OverclockedTim
25

Lee Byron salah satu insinyur di belakang GraphQL melakukan AMA di hashnode , inilah jawabannya ketika ditanya pertanyaan ini:

  • Falcor mengembalikan Observable, GraphQL hanya nilai. Untuk bagaimana Netflix ingin menggunakan Falcor, ini masuk akal bagi mereka. Mereka membuat beberapa permintaan dan menyajikan data saat itu sudah siap, tetapi itu juga berarti bahwa pengembang klien harus bekerja dengan Observable secara langsung. GraphQL adalah model permintaan / respons, dan mengembalikan kembali JSON, yang mudah untuk kemudian digunakan. Relay menambahkan kembali beberapa dinamika yang dihadirkan Falcor dengan tetap mempertahankan hanya menggunakan nilai-nilai polos.
  • Jenis sistem. GraphQL didefinisikan berdasarkan sistem tipe, dan itu memungkinkan kami untuk membuat banyak alat menarik seperti GraphiQL, pembuat kode, deteksi kesalahan, dll. Falcor jauh lebih dinamis, yang bernilai dalam dirinya sendiri tetapi membatasi kemampuan untuk melakukan hal semacam ini.
  • Penggunaan jaringan. GraphQL pada awalnya dirancang untuk mengoperasikan umpan berita Facebook di perangkat kelas bawah bahkan pada jaringan kelas bawah, sehingga sangat membantu Anda untuk mendeklarasikan semua yang Anda butuhkan dalam satu permintaan jaringan untuk meminimalkan latensi. Falcor, di sisi lain, sering melakukan perjalanan bolak-balik untuk mengumpulkan data tambahan. Ini benar-benar hanya pertukaran antara kesederhanaan sistem dan kontrol jaringan. Untuk Netflix, mereka juga berurusan dengan perangkat yang sangat rendah (mis. Roku stick) tetapi asumsinya adalah jaringan akan cukup baik untuk melakukan streaming video.

Sunting: Falcor memang dapat mengelompokkan permintaan , membuat komentar tentang penggunaan jaringan tidak akurat. Terima kasih kepada @PrzeoR

YasserKaddour
sumber
4
BUKAN BENAR -> "" "Falcor, di sisi lain, sering melakukan beberapa perjalanan bolak-balik untuk mengumpulkan data tambahan. Ini benar-benar hanya pertukaran antara kesederhanaan sistem dan kontrol jaringan." "". Cukup periksa fungsionalitas Batch Falcor dan itu sama atau bahkan lebih baik daripada di Relay.
PrzeoR
1
@ PrzeoR Terima kasih atas koreksinya! Saya mengedit posting!
YasserKaddour
Anda dipersilakan :-) terkait dengan FalcorJS periksa untuk lebih jelasnya di sini: reactjs.co/2016/02/03/…
PrzeoR
Artikel hebat memang Falcor hebat, sayangnya saya adalah Pengembang Scala dan tidak ada implementasi Falcor di Scala dan dalam bahasa lain dalam hal ini, namun ada Sangria implementasi GraphQL yang sangat baik di Scala
YasserKaddour
Dan ada alternatif lain untuk menyampaikan yang menggunakan redux seperti apollo-client dan cashay
YasserKaddour
21

UPDATE: Saya telah menemukan komentar yang sangat berguna di bawah posting saya yang ingin saya bagikan dengan Anda sebagai pelengkap untuk konten utama: masukkan deskripsi gambar di sini

Mengenai kurangnya contoh, Anda dapat menemukan repo pengguna falcorjs yang mengagumkan, ada beberapa contoh penggunaan CRUD Falcor: https://github.com/przeor/awesome-falcorjs ... Hal kedua, ada buku berjudul " Menguasai Pengembangan Penuh Stack React "yang mencakup Falcor juga (cara yang baik untuk belajar bagaimana menggunakannya):

masukkan deskripsi gambar di sini

POST ORGINAL DI BAWAH INI:

FalcorJS ( https://www.facebook.com/groups/falcorjs/ ) jauh lebih sederhana untuk menjadi efisien dibandingkan dengan Relay / GraphQL.

Kurva pembelajaran untuk GraphQL + Relay adalah BESAR: masukkan deskripsi gambar di sini

Dalam ringkasan singkat saya: Go for Falcor. Gunakan Falcor dalam proyek Anda berikutnya sampai ANDA memiliki anggaran besar dan banyak waktu belajar untuk tim Anda kemudian gunakan RELAY + GRAPHQL.

GraphQL + Relay memiliki API yang sangat besar sehingga Anda harus efisien. Falcor memiliki API kecil dan sangat mudah untuk dipahami oleh pengembang front-end yang akrab dengan JSON.

Jika Anda memiliki proyek AGILE dengan sumber daya terbatas -> maka pergilah untuk FalcorJS!

SUBYEKTIFKU pendapat: FalcorJS adalah 500% + lebih mudah untuk efisien dalam javascript full-stack.

Saya juga telah menerbitkan beberapa kit starter FalcorJS pada proyek saya (+ lebih banyak contoh proyek falcor dengan tumpukan penuh): https://www.github.com/przeor

Untuk lebih detail teknis:

1) Ketika Anda menggunakan Falcor, maka Anda dapat menggunakan keduanya di front-end dan backend:

mengimpor falcor dari 'falcor';

dan kemudian membangun model Anda berdasarkan.

... Anda juga memerlukan dua perpustakaan yang mudah digunakan di backend: a) falcor-express - Anda menggunakannya sekali (mis. app.use ('/ model.json', FalcorServer.dataSourceRoute (() => NamesRouter baru) ())) ). Sumber: https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/index.js

b) falcor-router - di sana Anda menentukan rute SIMPLE (mis. rute: '_view.length' ). Sumber: https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/router.js

Falcor adalah sepotong kue dalam hal kurva belajar.

Anda juga dapat melihat dokumentasi yang jauh lebih sederhana dari lib FB dan periksa juga artikel " mengapa Anda harus peduli tentang falcorjs (netflix falcor) ".

2) Relay / GraphQL lebih cenderung seperti alat perusahaan besar.

Misalnya, Anda memiliki dua dokumentasi berbeda yang dibicarakan secara terpisah:

a) Relay: https://facebook.github.io/relay/docs/tutorial.html - Kontainer - Rute - Kontainer Root - Status Siap - Mutasi - Lapisan Jaringan - Plugin Babel Relay - GRAPHQL

  • Spesifikasi Relay GraphQL
  • Identifikasi Objek
  • Koneksi
  • Mutasi
  • Bacaan lebih lanjut
  • REFERENSI API

  • Menyampaikan

  • RelayContainer
  • Relay. Rute
  • Relay.RootContainer
  • Relay.QL
  • Relay. Pemindahan
  • Relay. Tipe
  • Relay. Toko
  • INTERFASI

  • RelayNetworkLayer

  • RelayMutationRequest
  • RelayQueryRequest

b) GrapQL: https://facebook.github.io/graphql/

  • 2Bahasa
  • 2.1Sumber Teks
  • 2.1.1Unicode
  • 2.1.2Ruang Putih
  • 2.1.3Garis Terminator
  • 2.1.4Komentar
  • 2.1.5 Koma Tidak Penting
  • 2.1.6 Token Teknis
  • 2.1.7 Token yang Ditandai
  • 2.1.8Punctuator
  • 2.1.9Nama
  • 2.2 Dokumen Permintaan
  • 2.2.1Operasi
  • 2.2.2Seleksi Pemilihan
  • 2.2.3 Hasil
  • 2.2.4Arumen
  • 2.2.5Layar Alias
  • 2.2.6Fragments
  • 2.2.6.1 Ketentuan Jenis
  • 2.2.6.2Inline Fragmen
  • 2.2.7 Nilai Input
  • 2.2.7.1Int Value
  • 2.2.7.2Nilai Float
  • 2.2.7.3 Nilai Boolean
  • 2.2.7.4String Value
  • 2.2.7.5Nilai Akhir
  • 2.2.7.6Daftar Nilai
  • 2.2.7.7Input Nilai Objek
  • 2.2.8Variabel
  • 2.2.8.1Variabel digunakan dalam Fragmen
  • 2.2.9 Jenis Input
  • 2.2.10 Arahan
  • 2.2.10.1 Arahan Arah
  • Sistem 3Type
  • 3.1Jenis
  • 3.1.1Scalars
  • 3.1.1.1Built-in Scalars
  • 3.1.1.1.1Int
  • 3.1.1.1.2Float
  • 3.1.1.1.3String
  • 3.1.1.1.4Boolean
  • 3.1.1.1.5ID
  • 3.1.2Objek
  • 3.1.2.1Object Field Arguments
  • 3.1.2.2Penghentian bidangObject
  • 3.1.2.3 Validasi jenis objek
  • 3.1.3 Antarmuka
  • 3.1.3.1 Validasi tipe antarmuka
  • 3.1.4Union
  • 3.1.4.1 Validasi jenis UNI
  • 3.1.5Num
  • 3.1.6Masukan Objek
  • 3.1.7Lists
  • 3.1.8 Tidak-Null
  • 3.2Direktif
  • 3.2.1@skip
  • 3.2.2@sertakan
  • 3.3Mulai tipe
  • 4Introspeksi
  • 4.1 Prinsip Umum
  • 4.1.1 Konvensi penamaan
  • 4.1.2Dokumentasi
  • 4.1.3Persetujuan
  • 4.1.4Jenis Introspeksi Nama
  • 4.2 Introspeksiema
  • 4.2.1 Jenis "__Type"
  • 4.2.2 Jenis Jenis
  • 4.2.2.1Scalar
  • 4.2.2.2Object
  • 4.2.2.3Union
  • 4.2.2.4Interface
  • 4.2.2.5Enum
  • 4.2.2.6Input Object
  • 4.2.2.7Daftar
  • 4.2.2.8No-null
  • 4.2.2.9Mengombinasikan Daftar dan Non-Null
  • 4.2.3The __Field Jenis
  • 4.2.4The __InputValue Type
  • 5 pembatalan
  • 5.1Operasi
  • 5.1.1 Definisi Operasi Bernama
  • 5.1.1.1 Nama Operasi Keunikan
  • 5.1.2 Definisi Operasi Anonim
  • 5.1.2.1Lone Anonymous Operation
  • 5.2 Hasil
  • 5.2.1Pilih Pilihan pada Objek, Antarmuka, dan Jenis Serikat
  • 5.2.2 Penggabungan Pilihan Bidang
  • 5.2.3Pilihan Field Leaf
  • 5.3Arumen
  • 5.3.1 Nama Dokumen
  • 5.3.2 Keunikan Dokumen
  • 5.3.3 Nilai-Nilai Dokumen Ketepatan
  • 5.3.3.1 Nilai Yang Kompatibel
  • 5.3.3.2 Argumen yang Diperlukan
  • 5.4Fragments
  • 5.4.1 Deklarasi Tagihan
  • 5.4.1.1 Nama Unik Keunikan
  • 5.4.1.2 Keberadaan Jenis Sprag
  • 5.4.1.3Fragments Pada Jenis Komposit
  • 5.4.1.4Fragments Harus Digunakan
  • 5.4.2 Spread Segmen
  • 5.4.2.1 Target sebaran target didefinisikan
  • 5.4.2.2 Spread spread tidak boleh membentuk siklus
  • 5.4.2.3 Penyebaran fragmen dimungkinkan
  • 5.4.2.3.1Object Spreads Dalam Lingkup Objek
  • 5.4.2.3.2Abstrak Spread dalam Lingkup Objek
  • 5.4.2.3.3Object Spreads Dalam Lingkup Abstrak
  • 5.4.2.3.4Abstrak Menyebar dalam Lingkup Abstrak
  • 5.5 Nilai
  • 5.5.1Input Objek Bidang Keunikan
  • 5.6Direktif
  • 5.6.1 Arahan Didefinisikan
  • 5.7 Variabel
  • 5.7.1Variabel Keunikan
  • 5.7.2Variabel Nilai Default Diketik dengan Benar
  • 5.7.3Variabel Adalah Jenis Input
  • 5.7.4Semua Variabel Penggunaan yang Didefinisikan
  • 5.7.5Semua Variabel yang Digunakan
  • 5.7.6Semua Penggunaan Variabel Diizinkan
  • 6 Eksekusi
  • 6.1Menilai permintaan
  • 6. Variabel Penawaran
  • 6.3Evaluasi operasi
  • 6.4 Mengevaluasi set pilihan
  • 6.5 Mengevaluasi set bidang yang dikelompokkan
  • 6.5.1 entri entri
  • 6.5.2 Evaluasi normal
  • 6.5.3 Eksekusi serial
  • 6.5.4 Penanganan teror
  • 6.5.5Nullability
  • 7Respon
  • 7.1 Format Serialisasi
  • 7.1.1 Seronisasi JSON
  • 7.2 Format Respon
  • 7.2.1 Data
  • 7.2.2 Kesalahan
  • AAppendix: Konvensi Notasi
  • A.1Context-Free Grammar
  • A.2 Tata Bahasa Leksikal dan Sintaksis
  • A.3 Notasi Grammar
  • A.4Grammar Semantik
  • A.5 Algoritma
  • BAppendix: Ringkasan Tata Bahasa
  • B.1 Token yang Ditandai
  • B.2 Token Teknis
  • B.3 Dokumen Permintaan

Itu pilihanmu:

Falcor JS VERSUS yang manis dan pendek dan terdokumentasi Alat kelas perusahaan besar dengan dokumentasi panjang dan canggih sebagai GraphQL & Relay

Seperti yang saya katakan sebelumnya, jika Anda adalah dev front-end yang memahami ide menggunakan JSON, maka implementasi grafik JSON dari tim Falcor adalah cara terbaik untuk melakukan proyek dev full-stack Anda.

PrzeoR
sumber
13
Jawaban subyektif. Tidak termasuk perbandingan teknis. Lebih tepat sebagai komentar.
Gajus
2
@GajusKuizinas jawaban subjektif? Periksa dokumentasi keduanya ;-) Saya hanya mengatakan bahwa Falcor lebih cepat dan lebih cepat untuk belajar - dan itu adalah fakta ;-) juga saya telah bekerja dengan keduanya - kesederhanaan akan menang dalam jangka panjang meskipun FB melakukan yang terbaik pekerjaan dengan hype ;-)
PrzeoR
2
Itu hanya pendapat dan itu tidak menjawab pertanyaan sama sekali.
Michał Miszczyszyn
14
Saya pikir ini adalah jawaban yang bagus, to the point, kurva pembelajaran suatu teknologi tidak selalu subjektif dan dapat dengan mudah diukur, fakta disajikan di sini sehingga kesimpulan yang jelas dapat diekstraksi. Di dunia nyata, profesional yang serius mempertimbangkan fakta-fakta ini. Bagaimanapun, ini adalah pertanyaan terbuka, yang jelas mendapat manfaat dari jawaban seperti ini.
bmaggi
2
Saya setuju dengan @MorgenCheng, terpilih! Saya telah melakukan putaran beberapa minggu terakhir mengevaluasi GraphQL / Relay, Cashay, Redux dan sekarang Falcor, dan saya 100% setuju dengan PrzeoR. Relay dan GraphQL adalah teknologi luar biasa tetapi mereka membutuhkan lebih banyak kekuatan otak dan lebih sulit untuk mencari pemula. Ada sejumlah besar pembelajaran yang terlibat. Kelemahan dari Falcor, adalah kurangnya contoh untuk aplikasi berbasis CRUD penuh. Dan saya ingin melihat proyek PostgreSQL dan RethinkDB meludahkan JsonGraph.
Dom
5

Singkatnya, Falcor atau GraphQL atau Restful memecahkan masalah yang sama - menyediakan alat untuk kueri / memanipulasi data secara efektif.

Perbedaannya terletak pada cara mereka menyajikan data:

  • Falcor ingin Anda menganggap data mereka sebagai pohon JSON virtual yang sangat besar, dan menggunakan get , set , dan call untuk membaca, menulis data.
  • GraphQL ingin Anda berpikir data mereka sebagai kelompok objek yang diketik yang telah ditentukan, dan menggunakan kueri dan mutasi untuk membaca, menulis data.
  • Restful ingin Anda memikirkan data mereka sebagai kelompok sumber daya, dan menggunakan kata kerja HTTP untuk membaca, menulis data.

Setiap kali kita perlu menyediakan data untuk pengguna, kita berakhir dengan sesuatu yang disukai: client -> query -> {a layer menerjemahkan permintaan ke dalam operasi data} -> data.

Setelah berjuang dengan GraphQL, Falcor dan JSON API (dan bahkan ODdata), saya menulis layer kueri data saya sendiri . Ini lebih sederhana, lebih mudah dipelajari, dan lebih setara dengan GraphQL.

Lihat di:
https://github.com/giapnguyen74/nextql

Ini juga terintegrasi dengan featherjs untuk permintaan / mutasi waktu nyata. https://github.com/giapnguyen74/nextql-feathers

Giap Nguyen
sumber
2

OK, baru mulai dari perbedaan sederhana namun penting, GraphQL adalah query berbasis sementara Falcor tidak!

Tetapi bagaimana mereka membantu Anda?

Pada dasarnya, mereka berdua membantu kami mengelola dan meminta data, tetapi GraphQL memiliki Model req / res dan mengembalikan data sebagai JSON , pada dasarnya ide dalam GraphQL memiliki satu permintaan untuk mendapatkan semua data Anda dalam satu tujuan ... Juga, memiliki respons yang tepat dengan permintaan yang tepat, Jadi sesuatu untuk dijalankan di internet dan perangkat seluler berkecepatan rendah, seperti jaringan 3G ... Jadi jika Anda memiliki banyak pengguna seluler atau karena beberapa alasan Anda ingin memiliki lebih sedikit permintaan dan respons yang lebih cepat , gunakan GraphQL ... Sementara Facor tidak terlalu jauh dari ini, jadi baca terus ...

Di sisi lain, Falcor oleh Netflix, biasanya memiliki permintaan tambahan (biasanya lebih dari satu kali) untuk mengambil semua data Anda, walaupun mereka berusaha memperbaikinya menjadi satu syarat ... Falcor lebih terbatas untuk kueri dan tidak memiliki pra pembantu kueri yang ditentukan seperti rentang dan lain-lain ...

Tetapi untuk klarifikasi lebih lanjut, mari kita lihat bagaimana masing-masing dari mereka memperkenalkan diri:

GraphQL, Bahasa permintaan untuk API Anda

GraphQL adalah bahasa permintaan untuk API dan runtime untuk memenuhi permintaan tersebut dengan data yang ada. GraphQL memberikan deskripsi data yang lengkap dan dapat dipahami dalam API Anda, memberi klien kemampuan untuk meminta apa yang mereka butuhkan dan tidak lebih, membuatnya lebih mudah untuk mengembangkan API dari waktu ke waktu, dan memungkinkan alat pengembang yang kuat.

Kirim permintaan GraphQL ke API Anda dan dapatkan apa yang Anda butuhkan, tidak lebih dan tidak kurang. Permintaan GraphQL selalu mengembalikan hasil yang dapat diprediksi. Aplikasi yang menggunakan GraphQL cepat dan stabil karena mereka mengontrol data yang mereka dapatkan, bukan server.

Permintaan GraphQL mengakses tidak hanya properti dari satu sumber tetapi juga dengan lancar mengikuti referensi di antara mereka. Sementara REST API biasanya memerlukan pemuatan dari banyak URL, GraphQL APIs mendapatkan semua data yang dibutuhkan aplikasi Anda dalam satu permintaan. Aplikasi yang menggunakan GraphQL bisa cepat bahkan pada koneksi jaringan seluler yang lambat.

API GraphQL diatur berdasarkan jenis dan bidang, bukan titik akhir. Akses kapabilitas penuh data Anda dari titik akhir tunggal. GraphQL menggunakan tipe untuk memastikan Aplikasi hanya menanyakan apa yang mungkin dan memberikan kesalahan yang jelas dan bermanfaat. Aplikasi dapat menggunakan tipe untuk menghindari penulisan kode parsing manual.


Falcor, perpustakaan JavaScript untuk pengambilan data yang efisien

Falcor memungkinkan Anda mewakili semua sumber data jarak jauh Anda sebagai model domain tunggal melalui grafik JSON virtual. Kode Anda dengan cara yang sama di mana pun data berada, apakah dalam memori pada klien atau melalui jaringan pada server.

Sintaks jalur seperti JavaScript memudahkan untuk mengakses data sebanyak atau sesedikit yang Anda inginkan, saat Anda menginginkannya. Anda mengambil data Anda menggunakan operasi JavaScript yang sudah dikenal seperti get, set, dan call. Jika Anda tahu data Anda, Anda tahu API Anda.

Falcor secara otomatis menelusuri referensi dalam grafik Anda dan membuat permintaan sesuai kebutuhan. Falcor secara transparan menangani semua komunikasi jaringan, secara oportunis mengumpulkan dan menghapus permintaan.

Alireza
sumber