Pendahuluan
Pada gRPC Unary, client akan mengirim satu request message ke server dan akan menerima satu response message.
Berikut beberapa point penting mengenai gRPC Unary
- RPC yang paling umum digunakan.
- Cocok digunakan untuk ukuran data yang kecil.
- Selalu mulai dengan Unary API, jika ada masalah performance, ubah ke streaming API.
gRPC Unary call di definisikan dalam protobuffer. Berikut contohnya:
Unary call didefinisikan dengan menggunakan keyword rpc. Setiap rpc harus memiliki request dan response message.
RPC akan menggunakan fungsi Greet yang menerima message request dan mengembalikan message response.
message GreetRequest {
//field goes here
}
message GreetResponse {
//field goes here
}
service NamaService {
rpc Greet(GreetRequest) returns (GreetResponse) {};
}
Contoh Implementasi
Buat file protos/greet.proto, kita definisikan message request, response dan service.
syntax = "proto3"; package greet; message Greeting { string first_name = 1; string last_name = 2; } message GreetRequest{ Greeting greeting = 1; } message GreetResponse{ string result = 1; } service GreetService { rpc Greet (GreetRequest) returns (GreetResponse){}; }
Buka terminal lalu jalankan perintah compile
protoc-gen-grpc --proto_path=protos --js_out=import_style=commonjs,binary:server --grpc_out=server protos/greet.proto
Akan dihasilkan 2 file yaitu greet_grpc_pb.js dan greet_pb.js.
Berikutnya kita akan implementasikan unary gRPC diatas dengan menambahkan GreetService kedalam server/index.js
var grpc = require('grpc'); var greets = require('./greet_pb'); var service = require('./greet_grpc_pb'); function greet (call, callback){ var greeting = new greets.GreetResponse(); greeting.setResult( "Hello, " + call.request.getGreeting().getFirstName() ); callback(null, greeting); } function main(){ var Server = new grpc.Server(); Server.addService(service.GreetServiceService, {greet: greet}); Server.bindAsync("127.0.0.1:50051", grpc.ServerCredentials.createInsecure(), ()=>{ Server.start(); }); console.log("Server running.."); } main()
Kemudian kita implementasikan code request pada client/client.js
var grpc = require('grpc'); var greets = require('../server/greet_pb'); var service = require('../server/greet_grpc_pb'); function unary(){ var client = new service.GreetServiceClient('localhost:50051', grpc.credentials.createInsecure()); var request = new greets.GreetRequest(); var greeting = new greets.Greeting(); greeting.setFirstName("Test1"); greeting.setLastName("Test2"); request.setGreeting(greeting); client.greet(request, (error, response)=>{ if (!error){ console.log("Response: ", response.getResult()); }else{ console.error(error); } }); } unary()
Buka dua buah terminal, jalankan server, kemudian jalankan code client
//pada terminal pertama, masuk direktori server
$ node index.js
//pada terminal kedua, masuk direktori client
$ node client.js
//akan return
Response: Hello, Test1
Sampai disini kita sudah berhasil mengimplementasikan gRPC unary API.