Implementasi gRPC Dengan NodeJS

Omjebs > Tech > Implementasi gRPC Dengan NodeJS
blur close up code computer

Implementasi gRPC Dengan NodeJS

Dipostigan sebelumnya, omjebs sudah memberikan sedikit penjelasn tentang gRPC. Nah,sekarang kita akan bahas implementasi gRPC dengan NodeJS.

Berikut step dan source implementasi gRPC dengan NodeJS

1. Kita akan buat dalam 2 project yaitu 1 project untuk server dan satu lagi untuk client

contoh project nodejs grpc client-server

2. init project di masing-masing project

$npm init -y

3.Tambahkan library gRpc di setiap project

{
  "name": "grpc-client",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@grpc/proto-loader": "^0.5.5",
    "grpc": "^1.24.3",
    "uuid": "^3.3.2"
  }
}
$npm install

3. Tambahkan file protobuff yang sama di setiap project (server-client)

protobuf/product.proto

syntax = "proto3";

message ProductDetailRequest {
    string product_id = 1;
}

message ProductDetailResponse{
    string message=1;
    string status=2;
    ProductDetailDto data=3;

}

message ProductDetailDto{
    string product_id=1;
    string product_name=2;
}

service ProductService {
    rpc getProductDetail (ProductDetailRequest) returns (ProductDetailResponse);
   
}

Code di atas merupakan interface, dimana interface tersebut kita implementasikan di project server dan akan kita pangging method getProductDetail di client.

struktur project gRPC nodeJS

Untuk aplikasi Server kita menambahkan file app.js

const grpc = require('grpc')
const product = grpc.load('protobuff/product.proto')
const server = new grpc.Server()
server.bind('127.0.0.1:6061', grpc.ServerCredentials.createInsecure())
server.addService(product.ProductService.service, {
    getProductDetail: (call, callback) => {
        let product = call.request

        console.log("product id " + product.product_id)
        productResponse = {};
        productObj = {};
        if (product.product_id == "1") {
            productObj.product_id = product.product_id
            productObj.product_name = "omjebs"

            productResponse.message = "success"
            productResponse.status = "1000"
            productResponse.data = productObj;
        } else {
            productResponse.message = "failed"
            productResponse.status = "1001"
            productResponse.data = null;
        }
        callback(null, productResponse)
    },
})
console.log('Server running at http://127.0.0.1:50051')
server.start()

Secara sederhana code di atas adalah untuk implementasi gRPC server.

  1. Load protobuff
  2. Create server
  3. Implementasi service, getProductDetail
  4. Start server

Untuk Client tambahkan file client.js, app.js

//lib grpc
const grpc = require('grpc')
//path protofile
const PROTO_PATH = 'protobuff/product.proto'
//load service from product.proto/ protobuff file
const ProductService = grpc.load(PROTO_PATH).ProductService
//setup client 
const client = new ProductService('127.0.0.1:6061',
    grpc.credentials.createInsecure())


module.exports = client
const client = require('./client')

//look protobuff file what request parameter
let productDetailRequest = {
    product_id: "1"
}

//call method 
client.getProductDetail(productDetailRequest, (error, productDetailResponse) => {
    if (!error) {
        console.log('successfully fetch product detail')
        console.log(productDetailResponse)
    } else {
        console.error(error)
    }
})
  1. Load protobuff file
  2. Load service yang didaftarkan pada protobuff
  3. Panggil service
  4. Setup/panggil client dengan api yang diinitiate di server

Untuk Menjalankan gRPC di nodeJs sama dengan biasanya, yaitu masing – masing project kita berikan command di terminal.

$npm app.js

Untuk code penuhnya dapat dilihat di github ini.

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x