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.