API REST

REST API vs GraphQL

REST API vs GraphQL

TL; versi DR

Dalam salah satu catatan sebelumnya, kami membincangkan, secara ringkas, bagaimana rasanya menggunakan GitHub API v3. Versi ini direka untuk dihubungkan seperti REST API yang lain. Terdapat titik akhir untuk setiap sumber yang perlu anda akses dan / atau ubah suai. Terdapat titik akhir untuk setiap pengguna, setiap organisasi, setiap repositori dan sebagainya. Sebagai contoh, setiap pengguna mempunyai titik akhir API di https: // api.github.com / pengguna / anda boleh mencuba menggantikan nama pengguna anda dan bukannya dan masukkan URL dalam penyemak imbas untuk melihat apa yang dibalas oleh API.

GitHub API v4, sebaliknya, menggunakan GraphQL di mana QL bermaksud Query Language. GraphQL adalah kaedah baru untuk merancang API anda. Sama seperti terdapat banyak perkhidmatan web yang ditawarkan sebagai API REST bukan hanya yang ditawarkan oleh GitHub, terdapat banyak perkhidmatan web yang membolehkan anda berinteraksi dengan mereka melalui GraphQL.

Perbezaan paling ketara yang akan anda perhatikan antara GraphQL dan REST API adalah bahawa GraphQL dapat berfungsi dari satu titik akhir API. Sekiranya GitHub API v4, titik akhir ini adalah https: // api.github.com / graphql dan itu sahaja. Anda tidak perlu bimbang untuk menambahkan rentetan panjang pada akhir URI root atau memberikan parameter rentetan pertanyaan untuk maklumat tambahan. Anda hanya menghantar argumen seperti JSON ke API ini, hanya meminta perkara yang anda perlukan, dan anda akan mendapat muatan JSON dengan maklumat yang sama seperti yang anda minta. Anda tidak perlu menangani penyaringan maklumat yang tidak diingini, atau mengalami overhead prestasi kerana respons yang besar.

Apa itu API REST?

Nah, REST adalah singkatan Perwakilan Negeri Perpindahan dan API bermaksud Antaramuka Pengaturcaraan Aplikasi. API REST, atau API 'RESTful', telah menjadi falsafah reka bentuk teras di sebalik kebanyakan aplikasi pelayan pelanggan moden. Idea ini muncul dari keperluan untuk memisahkan pelbagai komponen aplikasi seperti UI sisi pelanggan dan logik sisi pelayan.

Oleh itu, sesi antara pelanggan dan pelayan biasanya tidak mempunyai status. Setelah laman web dan skrip yang berkaitan dimuat, anda dapat terus berinteraksi dengannya dan ketika anda melakukan tindakan (seperti menekan butang kirim) maka permintaan kirim akan dikirim bersama dengan semua informasi kontekstual yang diperlukan oleh pelayan web untuk memproses permintaan tersebut ( seperti nama pengguna, token, dll). Aplikasi beralih dari satu keadaan ke keadaan lain tetapi tanpa memerlukan sambungan yang berterusan antara pelanggan dan pelayan.

REST menentukan sekumpulan kekangan antara klien dan pelayan, dan komunikasi hanya boleh berlaku di bawah kekangan tersebut. Contohnya REST over HTTP biasanya menggunakan model CRUD, yang bermaksud kaedah Buat, Baca, Kemas kini dan Padam dan HTTP seperti POST, GET, PUT dan DELETE membantu anda menjalankan operasi tersebut dan operasi tersebut sahaja. Teknik pencerobohan lama seperti suntikan SQL bukan kemungkinan dengan sesuatu seperti REST API yang ditulis dengan ketat (walaupun REST bukan keselamatan ubat mujarab).

Ia juga banyak membantu pemaju UI! Oleh kerana semua yang anda terima dari permintaan HTTP adalah khas aliran teks (diformat sebagai JSON, kadang-kadang) anda dapat dengan mudah menerapkan halaman web untuk penyemak imbas atau aplikasi (dalam bahasa pilihan anda) tanpa perlu risau tentang seni bina sisi pelayan. Anda membaca dokumentasi API untuk perkhidmatan seperti Reddit, Twitter atau Facebook dan anda boleh menulis sambungan untuk mereka atau pelanggan pihak ketiga dalam bahasa pilihan anda kerana anda dijamin bahawa tingkah laku API akan tetap sama.

Sebaliknya, pelayan tidak peduli sama ada bahagian depan ditulis dalam Go, Ruby atau Python. Sama ada penyemak imbas, aplikasi atau CLI. Ia hanya 'melihat' permintaan dan memberi respons yang tepat.

Apa itu GraphQL?

Seperti halnya dalam dunia komputer, REST API menjadi lebih besar dan lebih kompleks dan pada masa yang sama orang mahu melaksanakan dan menggunakannya dengan lebih cepat dan mudah. Inilah sebabnya mengapa Facebook muncul dengan idea GraphQL, dan kemudiannya membuka sumbernya. QL dalam GraphQL bermaksud Bahasa Pertanyaan.

GraphQL membolehkan klien membuat permintaan API yang sangat spesifik, bukannya membuat panggilan API yang kaku dengan parameter dan respons yang telah ditentukan. Jauh lebih mudah kerana pelayan kemudian bertindak balas dengan tepat data yang anda minta, tanpa lebihan.

Lihat permintaan REST ini dan tindak balasnya yang sepadan. Permintaan ini bertujuan untuk melihat hanya bio awam pengguna.

Permintaan: DAPATKAN https: // api.github.com / pengguna /
Jawapan:

"log masuk": "octocat",
"id": 583231,
"node_id": "MDQ6VXNlcjU4MzIzMQ ==",
"avatar_url": "https: // avatars3.githubusercontent.com / u / 583231?v = 4 ",
"gravatar_id": "",
"url": "https: // api.github.com / pengguna / octocat ",
"html_url": "https: // github.com / octocat ",
"followers_url": "https: // api.github.com / pengguna / octocat / pengikut ",
"following_url": "https: // api.github.com / pengguna / octocat / follow / other_user ",
"gists_url": "https: // api.github.com / pengguna / octocat / gists / gist_id ",
"starred_url": "https: // api.github.com / pengguna / octocat / berbintang / owner / repo ",
"subscriptions_url": "https: // api.github.com / pengguna / octocat / langganan ",
"organization_url": "https: // api.github.com / pengguna / octocat / org ",
"repos_url": "https: // api.github.com / pengguna / octocat / repos ",
"events_url": "https: // api.github.com / pengguna / octocat / acara / privasi ",
"diterima_events_url": "https: // api.github.com / pengguna / octocat / accept_events ",
"type": "Pengguna",
"site_admin": salah,
"name": "The Octocat",
"syarikat": "GitHub",
"blog": "http: // www.github.com / blog ",
"location": "San Francisco",
"e-mel": batal,
"disewa": batal,
"bio": batal,
"public_repos": 8,
"public_gists": 8,
"pengikut": 2455,
"mengikuti": 9,
"create_at": "2011-01-25T18: 44: 36Z",
"dikemas kini_at": "2018-11-22T16: 00: 23Z"

Saya telah menggunakan nama pengguna octocat, tetapi anda boleh menggantinya dengan nama pengguna pilihan anda dan menggunakan cURL untuk membuat permintaan ini di baris perintah atau Postman jika anda memerlukan GUI. Walaupun permintaannya sederhana, fikirkan semua maklumat tambahan yang anda dapat dari respons ini. Sekiranya anda memproses data dari sejuta pengguna seperti itu dan menyaring semua data yang tidak diperlukan dengan menggunakan maka itu tidak berkesan. Anda membuang lebar jalur, memori dan mengira untuk mendapatkan, menyimpan dan menyaring semua jutaan pasangan kunci-nilai tambahan yang tidak akan pernah anda

Juga struktur tindak balas bukanlah sesuatu yang anda tahu sebelumnya. Respons JSON ini setara dengan objek kamus di Python, atau objek dalam JavaScript. Titik akhir lain akan bertindak balas dengan objek JSON yang mungkin terdiri dari objek bersarang, senarai bersarang di dalam objek atau gabungan sewenang-wenangnya jenis data JSON, dan anda perlu merujuk dokumentasi untuk mendapatkan spesifik. Semasa anda memproses permintaan, anda harus mengetahui format ini yang berubah dari titik akhir ke titik akhir.

GraphQL tidak bergantung pada kata kerja HTTP seperti POST, GET, PUT dan DELETE untuk melakukan operasi CRUD di pelayan. Sebaliknya, hanya ada satu jenis jenis permintaan HTTP dan endopint untuk semua operasi yang berkaitan dengan CRUD. Sekiranya GitHub ini melibatkan permintaan jenis POST dengan hanya satu titik akhir https: // api.github.com / grafikql

Sebagai permintaan POST, ia boleh membawa teks seperti JSON yang akan menjadi operasi GraphQL kami. Operasi ini boleh menjadi tipea pertanyaan jika semua yang ingin dilakukannya adalah membaca beberapa maklumat, atau ia boleh menjadi mutasi sekiranya data perlu diubah suai.

Untuk membuat panggilan GraphQL API, anda boleh menggunakan explorer GraphQL GitHub. Lihatlah GraphQL ini pertanyaan untuk mengambil jenis data yang sama (bio awam pengguna) seperti yang kami lakukan di atas menggunakan REST.

Permintaan: POST https: // api.github.com / grafikql
pertanyaan
pengguna (log masuk: "ranvo")
bio


 
Jawapan:
 

"data":
"pengguna":
"bio": "Peminat teknologi dan sains. Saya mempunyai pelbagai perkara yang tidak berkaitan dengan
pelayan ke fizik kuantum.\ r \ n Kadang-kadang, saya menulis catatan blog mengenai minat di atas."


Seperti yang anda lihat, tindak balas hanya terdiri dari apa yang anda minta, itulah bio pengguna. Anda memilih pengguna tertentu dengan memasukkan nama pengguna (dalam kes saya, itu ranvodan kemudian anda meminta nilai atribut pengguna tersebut, dalam hal ini atribut tersebut bio. Pelayan API mencari maklumat khusus yang tepat dan bertindak balas dengan itu dan tidak ada yang lain.

Di sisi lain, GraphQL juga membolehkan anda membuat satu permintaan dan mengekstrak maklumat yang akan membawa anda banyak permintaan dalam API REST tradisional. Ingatlah bahawa semua permintaan GraphQL dibuat hanya untuk satu titik akhir API. Contohnya, contoh penggunaan kes di mana anda perlu meminta pelayan GitHub API untuk bio pengguna dan salah satu kunci SSH-nya. Ia memerlukan dua permintaan GET.

Permintaan REST: DAPATKAN https: // api.github.com //
DAPATKAN https: // api.github.com // kunci
 
Permintaan GraphQL: POST https: // api.github.com / grafikql /
 
pertanyaan
pengguna (log masuk: "ranvo")
bio
publicKeys (terakhir: 1)
tepi
simpul
kunci





 
Respons GraphQL:
 

"data":
"pengguna":
"bio": "Peminat teknologi dan sains. Saya mempunyai pelbagai perkara yang tidak berkaitan dengan
pelayan ke fizik kuantum.\ r \ n Kadang kala, saya menulis catatan blog mengenai minat di atas.",
"publicKeys":
"tepi": [

"simpul":
"kunci": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH31mVjRYdzeh8oD8jvaFpRuIgL65SwILyKpeGBUNGOT"


]



Terdapat objek bersarang, tetapi jika anda melihat permintaan anda, mereka sangat sesuai dengan permintaan anda sehingga anda dapat mengetahui dan, dalam arti tertentu, membentuk struktur respons yang anda dapat .

Kesimpulannya

GraphQL hadir dengan keluk pembelajarannya sendiri, yang sangat curam, atau tidak curam sama sekali bergantung pada siapa yang anda tanyakan. Dari sudut objektif, saya dapat meletakkan fakta berikut untuk anda. Ia fleksibel seperti yang anda lihat di atas, ini bersifat introspektif - iaitu, anda boleh bertanya pada API GraphQL tentang API itu sendiri. Walaupun anda tidak akan membuat pelayan API menggunakannya, kemungkinan anda harus berinteraksi dengan API yang hanya membenarkan GraphQL.

Anda boleh mengetahui lebih lanjut mengenai teknikalnya di sini dan jika anda ingin membuat panggilan GraphQL API dari stesen kerja tempatan anda kemudian gunakan Graphiql.

Cara Menunjukkan Overlay OSD dalam Aplikasi dan Permainan Linux Skrin Penuh
Bermain permainan skrin penuh atau menggunakan aplikasi dalam mod skrin penuh bebas gangguan dapat memisahkan anda dari maklumat sistem yang relevan y...
5 Kad Tangkap Permainan Teratas
Kita semua telah melihat dan menyukai streaming permainan permainan di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain terat...
Cara Membangunkan Permainan di Linux
Satu dekad yang lalu, tidak banyak pengguna Linux akan meramalkan bahawa sistem operasi kegemaran mereka suatu hari nanti akan menjadi platform permai...