REST API

REST API vs GraphQL

REST API vs GraphQL

Versi TL;DRDR

Di salah satu posting sebelumnya, kami membahas secara singkat, seperti apa rasanya menggunakan GitHub API v3. Versi ini dirancang untuk dihubungkan seperti API REST lainnya. Ada titik akhir untuk setiap sumber daya yang Anda perlukan untuk mengakses dan/atau memodifikasi. Ada titik akhir untuk setiap pengguna, setiap organisasi, setiap repositori, dan seterusnya. Misalnya, setiap pengguna memiliki titik akhir API-nya di https://api.github.com/pengguna/ Anda dapat mencoba mengganti nama pengguna Anda sebagai gantinya dan masukkan URL di browser untuk melihat apa yang ditanggapi oleh API.

GitHub API v4, di sisi lain, menggunakan GraphQL di mana QL adalah singkatan dari Query Language. GraphQL adalah cara baru untuk mendesain API Anda. Sama seperti ada banyak layanan web yang ditawarkan sebagai REST API tidak hanya yang ditawarkan oleh GitHub, ada banyak layanan web yang memungkinkan Anda untuk berinteraksi dengan mereka melalui GraphQL.

Perbedaan paling mencolok yang akan Anda lihat antara GraphQL dan REST API adalah bahwa GraphQL dapat bekerja dari satu titik akhir API. Dalam kasus GitHub API v4, titik akhir ini adalah https://api.github.com/graphql dan hanya itu. Anda tidak perlu khawatir tentang menambahkan string panjang di akhir URI root atau menyediakan parameter string kueri untuk informasi tambahan. Anda cukup mengirim argumen seperti JSON ke API ini, hanya meminta hal-hal yang Anda butuhkan, dan Anda akan mendapatkan kembali muatan JSON dengan informasi yang sama persis seperti yang Anda minta. Anda tidak perlu berurusan dengan menyaring informasi yang tidak diinginkan, atau mengalami overhead kinerja karena respons yang besar.

Apa itu REST API?

Nah, REST adalah singkatan dari Representational State Transfer dan API adalah singkatan dari Application Programming Interface. REST API, atau API 'RESTful',  telah menjadi filosofi desain inti di balik sebagian besar aplikasi client-server modern. Ide muncul dari kebutuhan untuk memisahkan berbagai komponen aplikasi seperti UI sisi klien dan logika sisi server.

Jadi sesi antara klien dan server biasanya tanpa kewarganegaraan. Setelah halaman web dan skrip terkait dimuat, Anda dapat terus berinteraksi dengannya dan ketika Anda melakukan tindakan (seperti menekan tombol kirim), maka permintaan kirim dikirim bersama dengan semua informasi kontekstual yang dibutuhkan server web untuk memproses permintaan itu ( seperti nama pengguna, token, dll). Transisi aplikasi dari satu keadaan ke keadaan lain tetapi tanpa kebutuhan konstan untuk koneksi antara klien dan server.

REST mendefinisikan satu set batasan antara klien dan server, dan komunikasi hanya dapat terjadi di bawah batasan tersebut. Misalnya REST over HTTP biasanya menggunakan model CRUD, yang merupakan singkatan dari Create, Read, Update and Delete dan metode HTTP seperti POST, GET, PUT dan DELETE membantu Anda melakukan operasi tersebut dan operasi itu sendiri. Teknik intrusi lama seperti injeksi SQL bukanlah kemungkinan dengan sesuatu seperti REST API yang ditulis dengan ketat (walaupun REST bukan obat mujarab keamanan).

Ini juga sangat membantu pengembang UI! Karena semua yang Anda terima dari permintaan HTTP adalah aliran teks yang khas (kadang-kadang diformat sebagai JSON), Anda dapat dengan mudah mengimplementasikan halaman web untuk browser atau aplikasi (dalam bahasa pilihan Anda) tanpa mengkhawatirkan arsitektur sisi server. Anda membaca dokumentasi API untuk layanan seperti Reddit, Twitter atau Facebook dan Anda dapat menulis ekstensi untuk mereka atau klien pihak ketiga dalam bahasa pilihan Anda karena Anda dijamin bahwa perilaku API akan tetap sama.

Sebaliknya, server tidak peduli apakah front-end ditulis dalam Go, Ruby atau Python. Baik itu browser, aplikasi, atau CLI. Itu hanya 'melihat' permintaan dan merespons dengan tepat.

Apa itu GraphQL?

Seperti apa pun di dunia komputer, REST API menjadi lebih besar dan lebih kompleks dan pada saat yang sama orang ingin menerapkan dan mengkonsumsinya dengan cara yang lebih cepat dan lebih sederhana. Inilah sebabnya mengapa Facebook datang dengan ide GraphQL, dan kemudian open source itu. QL di GraphQL adalah singkatan dari Query Language.

GraphQL memungkinkan klien untuk membuat permintaan API yang sangat spesifik, alih-alih membuat panggilan API yang kaku dengan parameter dan respons yang telah ditentukan sebelumnya. Ini jauh lebih sederhana karena server kemudian merespons dengan persis data yang Anda minta, tanpa ada kelebihan.

Lihatlah permintaan REST ini dan tanggapannya yang sesuai. Permintaan ini dimaksudkan untuk melihat hanya bio publik pengguna.

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

"login": "octocat",
"id": 583231,
"node_id": "MDQ6VXNlcjU4MzIzMQ==",
"avatar_url": "https://avatars3.githubusercontent.com/u/583231?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/pengikut",
"following_url": "https://api.github.com/users/octocat/following/other_user",
"gists_url": "https://api.github.com/users/octocat/Gists/gist_id",
"starred_url": "https://api.github.com/users/octocat/starred/owner/repo",
"subscriptions_url": "https://api.github.com/users/octocat/langganan",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events/privacy",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"ketik": "Pengguna",
"site_admin": salah,
"nama": "Kucing Gurita",
"perusahaan": "GitHub",
"blog": "http://www.github.com/blog",
"lokasi": "San Francisco",
"email": null,
"bisa disewa": null,
"bio": null,
"public_repos": 8,
"public_gists": 8,
"pengikut": 2455,
"mengikuti": 9,
"created_at": "2011-01-25T18:44:36Z",
"updated_at": "22-11-2018T16:00:23Z"

Saya telah menggunakan nama pengguna octocat, tetapi Anda dapat menggantinya dengan nama pengguna pilihan Anda dan menggunakan cURL untuk membuat permintaan ini di baris perintah atau Tukang Pos jika Anda memerlukan GUI. Meskipun permintaannya sederhana, pikirkan semua informasi tambahan yang Anda dapatkan dari tanggapan ini. Jika Anda memproses data dari satu juta pengguna seperti itu dan memfilter semua data yang tidak perlu menggunakan maka itu tidak efisien. Anda membuang-buang bandwidth, memori, dan komputasi untuk mendapatkan, menyimpan, dan memfilter jutaan pasangan nilai kunci tambahan yang tidak akan pernah Anda dapatkan

Juga struktur responsnya bukanlah sesuatu yang Anda ketahui sebelumnya. Respons JSON ini setara dengan objek kamus di Python, atau objek di JavaScript. Titik akhir lain akan merespons dengan objek JSON yang mungkin terdiri dari objek bersarang, daftar bersarang di dalam objek, atau kombinasi sembarang tipe data JSON, dan Anda perlu merujuk dokumentasi untuk mendapatkan spesifikasinya. Saat Anda memproses permintaan, Anda harus menyadari 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 server. Sebaliknya, hanya ada satu jenis jenis permintaan HTTP dan endopint untuk semua operasi terkait CRUD. Dalam kasus GitHub ini melibatkan permintaan tipe POST dengan hanya satu titik akhir https://api.github.com/graphql

Menjadi permintaan POST, ia dapat membawa JSON seperti badan teks yang akan digunakan untuk operasi GraphQL kami. Operasi ini dapat bertipe pertanyaan jika semua yang ingin dilakukan adalah membaca beberapa informasi, atau bisa juga mutasi jika data perlu diubah.

Untuk membuat panggilan API GraphQL, Anda dapat menggunakan penjelajah GraphQL GitHub. Lihatlah GraphQL ini pertanyaan untuk mengambil jenis data yang sama (bio publik pengguna) seperti yang kami lakukan di atas menggunakan REST.

Permintaan: POSTING https://api.github.com/graphql
pertanyaan
pengguna (login: "ranvo")
bio


 
Tanggapan:
 

"data":
"pengguna":
"bio": "Penggemar teknologi dan sains. Saya menyukai segala macam hal yang tidak berhubungan dari
server ke fisika kuantum.\r\nKadang-kadang, saya menulis posting blog tentang minat di atas."


Seperti yang Anda lihat, responsnya hanya terdiri dari apa yang Anda minta, itulah bio pengguna. Anda memilih pengguna tertentu dengan memberikan nama pengguna (dalam kasus saya, itu ranvo) dan kemudian Anda meminta nilai atribut dari pengguna tersebut, dalam hal ini atribut tersebut adalah bio. Server API mencari informasi spesifik yang tepat dan merespons dengan itu dan tidak ada yang lain.

Di sisi lain, GraphQL juga memungkinkan Anda membuat satu permintaan dan mengekstrak informasi yang akan membawa Anda beberapa permintaan di REST API tradisional. Ingatlah bahwa semua permintaan GraphQL dibuat hanya untuk satu titik akhir API. Ambil contoh kasus penggunaan di mana Anda perlu meminta server API GitHub untuk bio pengguna dan salah satu kunci SSH-nya. Itu akan membutuhkan dua permintaan GET.

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





 
Tanggapan GraphQL:
 

"data":
"pengguna":
"bio": "Penggemar teknologi dan sains. Saya menyukai segala macam hal yang tidak berhubungan dari
server ke fisika kuantum.\r\nKadang-kadang, saya menulis posting blog tentang minat di atas.",
"kunci publik":
"tepi": [

"simpul":
"key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH31mVjRYdzeh8oD8jvaFpRuIgL65SwILyKpeGBUNGOT"


]



Ada objek bersarang, tetapi jika Anda melihat permintaan Anda, mereka cukup cocok dengan permintaan Anda sehingga Anda dapat mengetahui dan, dalam beberapa hal, membentuk struktur respons yang Anda dapatkan .

Kesimpulan

GraphQL memang datang dengan kurva belajarnya sendiri, yang sangat curam, atau tidak curam sama sekali tergantung pada siapa yang Anda tanyakan. Dari sudut pandang objektif, saya dapat memberikan fakta berikut untuk Anda. Ini fleksibel seperti yang Anda lihat di atas, introspektif - artinya, Anda dapat menanyakan API GraphQL tentang API itu sendiri. Bahkan jika Anda tidak akan membangun server API Anda menggunakannya, kemungkinan Anda harus berinteraksi dengan API yang hanya mengizinkan GraphQL.

Anda dapat mempelajari lebih lanjut tentang teknisnya di sini dan jika Anda ingin melakukan panggilan API GraphQL dari workstation lokal Anda, gunakan Graphiql.

Game Terbaik untuk Dimainkan dengan Pelacakan Tangan
Oculus Quest baru-baru ini memperkenalkan ide hebat pelacakan tangan tanpa pengontrol. Dengan jumlah permainan dan aktivitas yang terus meningkat yang...
Cara Menampilkan Overlay OSD di Aplikasi dan Game Linux Layar Penuh
Memainkan game layar penuh atau menggunakan aplikasi dalam mode layar penuh bebas gangguan dapat memutus Anda dari informasi sistem yang relevan yang ...
5 Kartu Tangkap Game Teratas
Kita semua telah melihat dan menyukai gameplay streaming di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain top yang telah m...