25 poin oleh disjukr 2022-04-06 | 9 komentar | Bagikan ke WhatsApp

Di Riiid, yang mengoperasikan Santa TOEIC, kami sangat aktif menggunakan gRPC/Protobuf.
Tidak lama setelah saya bergabung dengan Riiid, kami mendapat pemberitahuan bahwa ke depannya semua API yang disediakan tim backend untuk frontend (mobile/web) akan diseragamkan ke gRPC.

Untuk menggunakan stack gRPC/Protobuf di frontend web, sebelumnya ada cara seperti memakai protoc dengan plugin JS/TS, atau menggunakan Protobuf.js.

Plugin JS resmi protoc memiliki masalah karena menghasilkan kode dengan gaya yang sangat lama, dan plugin-plugin di ekosistem juga tidak bisa memenuhi semua kebutuhan kami. Ada juga ketidaknyamanan karena harus bergantung pada binary native (protoc). (Belakangan ini juga ada masalah bahwa protoc sulit dipasang di perangkat M1.)

Selama ini kami telah membuat berbagai produk menggunakan Protobuf.js, tetapi karena semua antarmuka komunikasi lintas platform untuk seluruh produk di perusahaan didefinisikan dengan Protobuf, kami menyadari bahwa Protobuf.js belum cukup matang untuk memenuhi kebutuhan kami.
Kami menemui berbagai masalah, misalnya jika nama message sama maka ia keliru dianggap sebagai message di namespace lain, atau jika pada namespace global deklarasi message mengikuti enum maka kode tipe message tidak dihasilkan, atau definisi tipe TypeScript berbeda dengan perilaku JS yang dihasilkan.

Dalam proses ini, untuk membangun sistem yang hanya mengekstrak dan membangun skema protobuf yang diperlukan oleh produk tertentu, kami membuat manajer paket protobuf bernama pollapo.
(Saat itu sudah ada pengelola dependensi protobuf lain, tetapi ada yang memiliki bug atau tidak mendukung nested dependency. Selain itu, fitur manajemen paket yang disediakan buf saat itu baru ada dalam bentuk posting blog bahwa masih dalam pengembangan, dan bahkan sampai kami membuat pollapo serta menyelesaikan migrasi internal, fitur tersebut masih belum rampung.)

pollapo memungkinkan kami mengurangi secara besar jumlah skema yang dibangun per produk, dan bug yang timbul karena hal-hal seperti nama message yang sama juga berkurang. Namun, bug dan masalah build tetap ada, sehingga untuk mengatasinya kami membuat sendiri kompiler protobuf-to-typescript.

Santa TOEIC saat ini telah sepenuhnya menyingkirkan protobuf.js dan selesai menggantinya dengan pbkit.


Aplikasi yang dikembangkan di Riiid, termasuk Santa TOEIC, sangat aktif menggunakan webview.
Webview berkomunikasi dengan native untuk memperoleh informasi perangkat/pengguna atau informasi konten yang sedang ditampilkan, dan antarmuka pada saat itu juga didefinisikan menggunakan skema layanan Protobuf.

pbkit menyediakan antarmuka yang memungkinkan layer jaringan diganti ke protokol lain selain gRPC saat menghasilkan kode layanan.
Engineer frontend web yang menggunakan kompiler pbkit tidak perlu tahu apakah komunikasi dengan native mobile dilakukan melalui permintaan gRPC atau melalui protokol App Bridge yang telah disepakati dengan engineer mobile.

Selain itu, karena kami juga mengembangkan sendiri ekstensi Chrome, isi komunikasi dengan mobile pun bisa diperiksa dengan mudah di tab pbkit pada Chrome Developer Tools, seperti melihat Network tab.

Karena kami membuat sendiri kompiler skema protobuf, kami merasa fitur seperti Go to Definition di editor kode bisa segera dibuat, sehingga kami juga membuat ekstensi VSCode.
Sebelumnya, ekstensi protobuf khusus VSCode yang ada hanya menyediakan fungsi seperti syntax highlighting, tetapi ekstensi pbkit untuk VSCode memiliki fitur Go to Definition yang benar-benar berfungsi.

Ke depannya kami berencana mengembangkan dukungan untuk bahasa lain seperti swift/kotlin/python, dukungan use case server, alat pembuat dokumentasi, serta alat linting/formatting.
Kami juga sedang mencari engineer yang akan mengembangkan alat-alat ini bersama kami: https://riiid.com/ko/career/dx-software-engineer

Kami sangat mengharapkan perhatian dan minat Anda.

pbkit repository: https://github.com/pbkit/pbkit
ekstensi vscode: https://marketplace.visualstudio.com/items?itemName=pbkit.vscode-pbkit
ekstensi Chrome: https://chrome.google.com/webstore/detail/pbkit-devtools/fjacmiijeihblfhobghceofniolonhca

9 komentar

 
sixmen 2022-04-06

Di perusahaan kami, beberapa tahun lalu kami mempertimbangkan gRPC lalu akhirnya memilih Thrift. Generator JS untuk Thrift juga tidak lengkap, jadi kami memodifikasinya sendiri, dan kami sadar itu benar-benar pekerjaan yang seharusnya tidak dilakukan. Karena itu saya sempat berpikir kami seharusnya memilih gRPC, tetapi sepertinya keadaan di sana juga tidak terlalu bagus.

Setelah itu kami memilih GraphQL, dan saya cukup puas. Kadang saya khawatir dengan overhead komunikasi, tetapi saya memang tidak sanggup memakai protokol berbasis biner.

 
cometkim 2022-04-06

Kami menggunakannya dengan baik di Karrot Market!! ( _ _ )

Kami sedang berusaha memanfaatkannya dengan baik untuk mesh API internal hehe

 
kbumsik 2022-04-06

Wah, luar biasa!

 
winterjung 2022-04-06

Wah, Anda membuat kompiler sendiri ya. Keren sekali! (Saya penasaran bagaimana kode golang dihasilkan, tapi sepertinya saat ini hanya mendukung deno dan node.js.) Saya biasanya memakai protoc atau buf bersama ts-proto, jadi saya penasaran bagaimana perbedaan kode ts yang dihasilkan dibandingkan dengan ts-proto.

 
bichi 2022-04-06

Rasanya seperti muter jauh ya https://github.com/trpc/trpc

 
danchu 2022-04-06

bichi / Jika API server disediakan melalui protokol gRPC, bukankah tRPC bukan ditujukan untuk mendukung hal itu~?

 
disjukr 2022-04-06

Saya setuju bahwa menggunakan stack gRPC/Protobuf bukanlah hal yang ideal. (Bukan karena saya yang ingin memakainya, melainkan karena kondisi perusahaan)
Namun, karena trpc mendefinisikan interface menggunakan zod, sepertinya ini akan ideal ketika menggunakan TypeScript di semua platform.
Sepertinya akan sulit digunakan di lingkungan kami yang menulis server dengan Kotlin, dan juga tampaknya kurang cocok untuk berkomunikasi dengan mobile native (Swift, Kotlin).

 
freedomzero 2022-04-06

Tulisan terkait gRPC selalu disambut :)

 
xguru 2022-04-06

Wah, sampai ada ekstensi VS/Chrome untuk kodenya juga.. keren sekali!! Semangat terus.
Tulisan perkenalannya juga sangat bagus, jadi sepertinya orang yang datang lewat GeekNews akan mendapatkan informasi yang lebih banyak daripada yang langsung hanya mengunjungi repo ^^;

Kalau ada yang saat ini menggunakan Protobuf dan meninggalkan komentar, sepertinya itu akan sangat membantu.