Membuat aplikasi server klien dengan gRPC

gRPC adalah framework RPC modern, open source, dan berperforma tinggi yang dapat berjalan di lingkungan apa pun. API ini dapat menghubungkan layanan di dalam dan di seluruh pusat data secara efisien dengan dukungan yang dapat dicocokkan untuk load balancing, pelacakan, pemeriksaan kondisi, dan autentikasi. API ini juga dapat digunakan di mil terakhir komputasi terdistribusi untuk menghubungkan perangkat, aplikasi seluler, dan browser ke layanan backend. Anda dapat menemukan dokumentasi di situs resmi gRPC dan mendapatkan dukungan dari komunitas open source. Panduan ini menunjukkan solusi untuk mem-build aplikasi Android menggunakan gRPC.

grpc.io adalah situs resmi untuk project gRPC. Untuk mempelajari cara kerja gRPC lebih lanjut, lihat Apa itu gRPC? dan Konsep gRPC. Untuk mempelajari cara menggunakan gRPC di aplikasi Android, lihat contoh Hello World di Panduan Memulai Android Java gRPC. Anda juga dapat menemukan beberapa contoh Android gRPC lainnya di GitHub.

Fitur

Panggilan prosedur memudahkan segalanya
Karena merupakan RPC, model pemrogramannya adalah panggilan prosedur: aspek jaringan teknologi diabstraksikan dari kode aplikasi, sehingga terlihat seolah-olah itu adalah panggilan fungsi dalam proses normal. Interaksi klien-server Anda tidak akan dibatasi oleh semantik metode resource HTTP (seperti GET, PUT, POST, dan DELETE). Dibandingkan dengan REST API, penerapan Anda terlihat lebih alami, tanpa perlu menangani metadata protokol HTTP.
Transmisi jaringan yang efisien dengan HTTP/2
Mengirim data dari perangkat seluler ke server backend dapat menjadi proses yang memerlukan banyak resource. Dengan menggunakan protokol HTTP/1.1 standar, koneksi yang sering dilakukan dari perangkat seluler ke layanan cloud dapat menghabiskan baterai, meningkatkan latensi, dan memblokir aplikasi lain agar tidak terhubung. Secara default, gRPC berjalan di atas HTTP/2, yang memperkenalkan streaming dua arah, kontrol alur, kompresi header, dan kemampuan untuk melakukan multipleks pada permintaan melalui satu koneksi TCP/IP. Hasilnya, gRPC dapat mengurangi penggunaan resource, sehingga menghasilkan waktu respons yang lebih rendah antara aplikasi dan layanan yang berjalan di cloud, mengurangi penggunaan jaringan, dan masa pakai baterai lebih lama untuk klien yang berjalan di perangkat seluler.
Dukungan pertukaran data streaming bawaan
gRPC dirancang dengan dukungan HTTP/2 untuk streaming dua arah full-duplex sejak awal. Streaming memungkinkan permintaan dan respons memiliki ukuran besar secara arbitrer, seperti operasi yang memerlukan upload atau download informasi dalam jumlah besar. Dengan streaming, klien dan server dapat membaca dan menulis pesan secara bersamaan dan berlangganan satu sama lain tanpa melacak ID resource. Hal ini membuat implementasi aplikasi Anda lebih fleksibel.
Integrasi yang lancar dengan Protocol Buffer
gRPC menggunakan Protocol Buffer (Protobuf) sebagai metode serialisasi/deserialisasi dengan plugin codegen yang dioptimalkan untuk Android (Protobuf Java Lite). Dibandingkan dengan format berbasis teks (seperti JSON), Protobuf menawarkan pertukaran data yang lebih efisien dalam hal kecepatan marshaling dan ukuran kode, sehingga lebih cocok digunakan di lingkungan seluler. Selain itu, sintaksis pesan/definisi layanan yang ringkas milik Protobuf mempermudah penentuan model data dan protokol aplikasi untuk aplikasi Anda.

Ringkasan penggunaan

Berdasarkan tutorial Dasar-Dasar gRPC - Android Java, penggunaan gRPC untuk aplikasi Android melibatkan empat langkah:

  • Menentukan layanan RPC dengan buffering protokol dan membuat antarmuka klien gRPC.
  • Membuat Saluran yang berfungsi sebagai media untuk panggilan RPC antara klien dan server.
  • Buat Stub klien sebagai titik entri untuk memulai panggilan RPC dari sisi klien.
  • Buat panggilan RPC ke server jarak jauh seperti yang Anda lakukan saat melakukan panggilan prosedur lokal.

Untuk tujuan demonstrasi, byte ditransmisikan dalam teks biasa pada contoh yang diberikan. Namun, aplikasi Anda harus selalu mengenkripsi data jaringan dalam produksi. gRPC menyediakan dukungan enkripsi SSL/TLS serta pertukaran token OAuth (OAuth2 dengan layanan Google) untuk autentikasi. Untuk detail selengkapnya, lihat TLS di Android dan Menggunakan OAuth2.

Transportasi

gRPC menyediakan dua pilihan penerapan Transport untuk klien Android: OkHttp dan Cronet.

Memilih transport (tingkat lanjut)

  • OkHttp
    OkHttp adalah stack jaringan ringan yang dirancang untuk digunakan di perangkat seluler. Ini adalah transport default gRPC untuk berjalan di lingkungan Android. Untuk menggunakan OkHttp sebagai transport gRPC untuk aplikasi Anda, buat saluran dengan AndroidChannelBuilder, yang menggabungkan OkHttpChannelBuilder dan akan mendaftarkan pemantauan jaringan dengan OS Android untuk merespons perubahan jaringan dengan cepat. Contoh penggunaannya dapat ditemukan di gRPC-Java AndroidChannelBuilder.
  • Cronet (eksperimental)
    Cronet adalah stack Jaringan Chromium yang dipaketkan sebagai library untuk seluler. QUIC menawarkan dukungan jaringan yang kuat dengan protokol QUIC termutakhir, yang sangat efektif dalam lingkungan jaringan yang tidak dapat diandalkan. Untuk mempelajari Cronet lebih lanjut, lihat Menjalankan operasi jaringan menggunakan Cronet. Untuk menggunakan Cronet sebagai transport gRPC untuk aplikasi Anda, buat saluran dengan CronetChannelBuilder. Contoh penggunaan disediakan di Transport gRPC-Java Cronet.

Secara umum, sebaiknya aplikasi yang menargetkan versi SDK terbaru menggunakan Cronet karena menawarkan stack jaringan yang lebih canggih. Kelemahan penggunaan Cronet adalah ukuran APK yang bertambah, karena menambahkan dependensi Cronet biner akan menambah ukuran aplikasi sebesar >1 MB, dibandingkan dengan OkHttp yang hanya ~100 KB. Mulai GMSCore v.10, salinan terbaru Cronet dapat dimuat dari Layanan Google Play. Ukuran APK mungkin tidak lagi menjadi masalah, meskipun perangkat yang tidak menginstal GMSCore terbaru mungkin masih lebih memilih menggunakan OkHttp.