gRPC Unary API

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.

Sharing is caring:

Leave a Comment