Nonchalant Programming Master

    @bufferapp/micro-rpc

    0.1.7 • Public • Published

    micro-rpc

    Async RPC microservices made easy

    Made with Micro

    Quickstart

    Create a RPC method to add 2 numbers:

    // index.js
    const { rpc, method, createError } = require('@bufferapp/micro-rpc');
    module.exports = rpc(
      method('add', (a, b) => a + b)
    );

    Start the server

    micro

    Use the Micro RPC Client: https://github.com/bufferapp/micro-rpc-client to run the add method

    const RPCClient = require('@bufferapp/micro-rpc-client');
    
    const rpc = new RPCClient({
      serverUrl: 'https://localhost:3000',
    });
    
    rpc.call('add', 2, 2)
      .then(result => console.log(result)); // output: 4

    Or you can use curl to call the add method:

    curl -H "Content-Type: application/json" -X POST -d '{"name": "add", "args": "[2, 3]"}' localhost:3000 | python -m json.tool
    
    # {
    #    "result": 5
    # }

    To see a list of all available methods use the methods call:

    curl -H "Content-Type: application/json" -X POST -d '{"name": "methods"}' localhost:3000 | python -m json.tool
    
    # {
    #   result: [
    #     {
    #       "docs": "add two numbers"
    #       "name": "add"
    #     },
    #     {
    #       "docs": "list all available methods",
    #       "name": "methods"
    #     }
    #   ]
    # }

    Usage

    Here's a few examples of how to hook up the handler methods:

    const { rpc, method, createError } = require('@bufferapp/micro-rpc');
    module.exports = rpc(
      method('add', (a, b) => a + b),
      method('addAsync', (a, b) => new Promise((resolve) => {
        resolve(a + b);
      })),
      method('addItems', ({ a, b }) => a + b),
      method('addItemsAsync', ({ a, b }) => new Promise((resolve) => {
        resolve(a + b);
      })),
      method('throwError', () => {
        throw createError({ message: 'I\'m sorry I can\'t do that'});
      }),
    
      method('throwErrorAsync', () => new Promise((resolve, reject) => {
        reject(createError({ message: 'Something is broke internally', statusCode: 500 }));
      })),
      method('documentation',
      `
      # documentation
    
      Document what a method does.
      `,
      () => new Promise((resolve, reject) => {
        reject(createError({ message: 'Something is broke internally', statusCode: 500 }));
      }))
    );

    API

    rpc

    An async function that can be served by Micro, takes a bunch of methods as arguments.

    rpc(...methods)

    ...methods - method - micro rpc method (see below)

    method

    add a remote method

    method(name, [docs], fn)

    name - string - the name of the method
    docs - string - documentation about a method
    fn - function - the function to call and apply parameters the method is requested

    createError

    create an error to be thrown, optionally set the status code

    createError({ message, statusCode = 400})

    message - string - error message to return
    statusCode - string - optional HTTP status code (default to 400)

    Request and Response Objects

    Request and response objects are always passed along as the last two arguments in case they're needed.

    method('addWithSession', (a, b, req, res) => {
      if (!req.session) {
        throw createError({ message: 'a session is needed to add numbers', statusCode: 401});
      }
      return a + b;
    };

    Keywords

    Install

    npm i @bufferapp/micro-rpc

    DownloadsWeekly Downloads

    177

    Version

    0.1.7

    License

    MIT

    Last publish

    Collaborators

    • egomezd
    • cheahenry
    • jacobchadwell
    • boristroja
    • philippemiguet
    • josemdev
    • msanroman
    • daisymarie128
    • hamstu
    • stevenc81
    • bufferbot
    • albennett
    • mayauribe
    • ssvmvss
    • gomezjuliana
    • esclapes
    • ay8s
    • mickmahady
    • dinostheo
    • hitherejoe
    • dace
    • erickhun
    • kmbriseno
    • hackertronix
    • kiriappeee
    • ethaneisenhard
    • cmunozgar
    • gtangbuffer
    • heatheryou
    • peteremilbuffer
    • arekpn
    • abeeb
    • buffermw
    • gisete