DEV Community

Cover image for HOW TO SET UP AND USE gRPC IN REACT OR NEXT
Faisal Salif
Faisal Salif

Posted on • Edited on

HOW TO SET UP AND USE gRPC IN REACT OR NEXT

  1. Download and install the protoc complier file
    https://github.com/protocolbuffers/protobuf/releases/tag/v25.

  2. Install protoc packages globally

    • npm install -g protoc-gen-js protoc-gen-grpc-web
  3. Install these two packages in your local project

    • npm install grpc-web google-protobuf
  4. Create a proto.sh file in Root Dir of your project, (this will have the script to compile our raw protos to js or tsx
    => Sample of the script i used

SHELL SCRIPT

  1. Add a script property in you packge.json to run the shell file

    • example "proto-build":"sh path_to_shell_file"
  2. Create a folder called protos in your src or app folder and inside the protos folder create a folder called raw. which we'll keep all our raw proto files. e.g src/proto/raw

  3. run the script to compile raw proto file = npm run proto-build

=> CREATING API FROM COMPLIED PROTOS

  1. Create a folder in your src and name it api , this folder will have all api files we would be using for our api calls.

  2. Create a apiConfig.js file in your src/app directory , this file will have the URL and METADATA (configurations)

e.g export const URL = "url_to_your_backend"
export const METADATA = {
key: "key_to_connect",
pass:"password_to_connect"
}

  1. Now we can go ahead to connect to the backend and consume our api's.

Image description
This how I connect to my api and access a method from the proto services

  • import {METADATA,URl} from './app/apiConfig.js'
  • import {CustomerSvcClient} from './protos/gen/Customer_grpc_web_pb' (give you the service method you need to use)
  • import {Request1,Request2,..} from './protos/gen/Customer/pb' (gives you the messages or requests to you need to use)
    function CustomerController(){
       const client = new CustomerSvcCLient(URL,null,null)

       //Creating a function to make your api requests
       const getAllCustomers = async(**data**)=>{
       try{
         return new Promise(resolve,reject)=>{
         const request = new Request1()

         //if our request requires a body we can attach them as so
         request.setName(data.name)
         request.setAge(data.age)

         //We can make out api call by using a method from our 
         client 
         client.getAllUsers(request,METADATA,(err,response)=>{
           if(err) reject(err)
           //converts our response to object
           const result = response.toObject() 
           resolve(result)
         })
       }
      }
     }catch(err){
      console.log(err)
     }

     cosnt anotheFucntion=async()=>{....}



    return {getAllCustomers,anotherFunction}



    }

export default CustomerController
Enter fullscreen mode Exit fullscreen mode
  1. Consuming the api and displaying data e.g App.js
import CustomerController from './file_directory'

//grab the methods you want to use from the API file
const {getAllCustomers,anotherFunction} = CustomerController() 

  useEffect(()=>{
     async function getData(){
       const getValue = await getAllCustomers({name:'myname',age:20})
       console.log(getValue.userlistList)
       setData(getValue.userlistList)
     }
     getData()
   },[])
Enter fullscreen mode Exit fullscreen mode

API Trace View

Struggling with slow API calls?

Dan Mindru walks through how he used Sentry's new Trace View feature to shave off 22.3 seconds from an API call.

Get a practical walkthrough of how to identify bottlenecks, split tasks into multiple parallel tasks, identify slow AI model calls, and more.

Read more →

Top comments (0)

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay