JSON-RPC Generator API Reference
Technical documentation for developers integrating JSON-RPC generation capabilities into their applications
On this page
Need to generate JSON-RPC?
Try our interactive generator tool for quick JSON-RPC creation.
Try Generator ToolOverview
The JSON-RPC Generator API is a powerful library that allows developers to programmatically generate valid JSON-RPC 1.0 and 2.0 messages. It provides a simple, intuitive interface for creating requests, responses, notifications, and batch operations that conform to the official specification.
This API can be integrated into both client-side and server-side JavaScript applications, making it versatile for various use cases including testing, development, and production environments.
Installation
The Generator API can be installed via npm:
npm install @jsonrpc-tools/generator
Or included via CDN:
<script src="https://cdn.jsonrpc.dev/generator/v1/generator.min.js"></script>
API Reference
Core Methods
createRequest(method, params, id, options)
Creates a JSON-RPC request object.
Parameters:
method
(String): The name of the method to be invokedparams
(Array|Object, optional): Parameters to pass to the methodid
(String|Number, optional): Request identifieroptions
(Object, optional): Generation options
Returns:
A valid JSON-RPC request object
createResponse(result, id, options)
Creates a JSON-RPC success response object.
Parameters:
result
(Any): The result valueid
(String|Number): Request identifier matching the original requestoptions
(Object, optional): Generation options
Returns:
A valid JSON-RPC response object
createErrorResponse(error, id, options)
Creates a JSON-RPC error response object.
Parameters:
error
(Object): Error object with code, message, and optional dataid
(String|Number|null): Request identifier matching the original requestoptions
(Object, optional): Generation options
Returns:
A valid JSON-RPC error response object
createNotification(method, params, options)
Creates a JSON-RPC notification (a request without an ID).
Parameters:
method
(String): The name of the method to be invokedparams
(Array|Object, optional): Parameters to pass to the methodoptions
(Object, optional): Generation options
Returns:
A valid JSON-RPC notification object
createBatch(items, options)
Creates a JSON-RPC batch request or response.
Parameters:
items
(Array): Array of request or response objectsoptions
(Object, optional): Generation options
Returns:
A valid JSON-RPC batch array
Request Generator
The request generator allows you to create valid JSON-RPC request objects with various parameter types.
Example: Creating Requests
// Import the generator import { createRequest } from '@jsonrpc-tools/generator'; // Create a request with positional parameters const requestWithPositionalParams = createRequest( 'subtract', [42, 23], 1, { version: '2.0' } ); console.log(requestWithPositionalParams); // Output: { jsonrpc: '2.0', method: 'subtract', params: [42, 23], id: 1 } // Create a request with named parameters const requestWithNamedParams = createRequest( 'subtract', { minuend: 42, subtrahend: 23 }, 2, { version: '2.0' } ); console.log(requestWithNamedParams); // Output: { jsonrpc: '2.0', method: 'subtract', params: { minuend: 42, subtrahend: 23 }, id: 2 } // Create a request with string ID const requestWithStringId = createRequest( 'getUser', { userId: 123 }, 'user-req-1', { version: '2.0' } ); console.log(requestWithStringId); // Output: { jsonrpc: '2.0', method: 'getUser', params: { userId: 123 }, id: 'user-req-1' }
Response Generator
The response generator enables you to create both success and error responses that comply with the JSON-RPC specification.
Example: Creating Responses
// Import the generator import { createResponse, createErrorResponse } from '@jsonrpc-tools/generator'; // Create a success response const successResponse = createResponse( 19, // result 1, // id matching the original request { version: '2.0' } ); console.log(successResponse); // Output: { jsonrpc: '2.0', result: 19, id: 1 } // Create an error response const errorResponse = createErrorResponse( { code: -32602, message: 'Invalid params', data: { details: 'Parameter "userId" must be a number' } }, 2, // id matching the original request { version: '2.0' } ); console.log(errorResponse); /* Output: { jsonrpc: '2.0', error: { code: -32602, message: 'Invalid params', data: { details: 'Parameter "userId" must be a number' } }, id: 2 } */ // Create a response for a request that produced a parsing error const parseErrorResponse = createErrorResponse( { code: -32700, message: 'Parse error' }, null, // null ID for parse errors { version: '2.0' } ); console.log(parseErrorResponse); // Output: { jsonrpc: '2.0', error: { code: -32700, message: 'Parse error' }, id: null }
Batch Generator
The JSON-RPC 2.0 specification allows for batching multiple requests or responses in a single message.
Example: Creating Batch Requests
// Import the generator import { createRequest, createNotification, createBatch } from '@jsonrpc-tools/generator'; // Create individual requests const request1 = createRequest('sum', [1, 2, 3], 1, { version: '2.0' }); const request2 = createRequest('subtract', [42, 23], 2, { version: '2.0' }); const notification = createNotification('log', { message: 'Processing batch' }, { version: '2.0' }); // Combine into a batch const batchRequest = createBatch([request1, request2, notification], { version: '2.0' }); console.log(JSON.stringify(batchRequest, null, 2)); /* Output: [ { "jsonrpc": "2.0", "method": "sum", "params": [1, 2, 3], "id": 1 }, { "jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 2 }, { "jsonrpc": "2.0", "method": "log", "params": { "message": "Processing batch" } } ] */
Example: Creating Batch Responses
// Import the generator import { createResponse, createErrorResponse, createBatch } from '@jsonrpc-tools/generator'; // Create individual responses const response1 = createResponse(6, 1, { version: '2.0' }); // response to 'sum' const response2 = createResponse(19, 2, { version: '2.0' }); // response to 'subtract' // Combine into a batch response const batchResponse = createBatch([response1, response2], { version: '2.0' }); console.log(JSON.stringify(batchResponse, null, 2)); /* Output: [ { "jsonrpc": "2.0", "result": 6, "id": 1 }, { "jsonrpc": "2.0", "result": 19, "id": 2 } ] */
Templates
The Generator API includes built-in templates for common JSON-RPC message types.
Standard Error Templates
Predefined templates for standard JSON-RPC error responses:
- Parse Error (-32700)
- Invalid Request (-32600)
- Method Not Found (-32601)
- Invalid Params (-32602)
- Internal Error (-32603)
Example Usage of Templates
import { templates } from '@jsonrpc-tools/generator'; // Create an Invalid Method error response const errorResponse = templates.errors.methodNotFound(1); console.log(errorResponse); /* Output: { jsonrpc: '2.0', error: { code: -32601, message: 'Method not found' }, id: 1 } */
Complete Example
Building a JSON-RPC Client
import { createRequest, createBatch } from '@jsonrpc-tools/generator'; class JsonRpcClient { constructor(endpoint) { this.endpoint = endpoint; this.requestId = 1; } async callMethod(method, params) { const request = createRequest( method, params, this.requestId++, { version: '2.0' } ); return this._sendRequest(request); } async callBatch(calls) { const requests = calls.map(call => { return createRequest( call.method, call.params, this.requestId++, { version: '2.0' } ); }); const batchRequest = createBatch(requests, { version: '2.0' }); return this._sendRequest(batchRequest); } async _sendRequest(requestData) { try { const response = await fetch(this.endpoint, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(requestData) }); const data = await response.json(); // Handle errors in response if (!Array.isArray(data) && data.error) { throw new Error(`${data.error.code}: ${data.error.message}`); } return data; } catch (error) { console.error('RPC call failed:', error); throw error; } } } // Example usage const client = new JsonRpcClient('https://api.example.com/jsonrpc'); // Single method call client.callMethod('getUserById', { id: 123 }) .then(response => console.log('User:', response.result)) .catch(error => console.error('Error:', error)); // Batch call client.callBatch([ { method: 'getUserById', params: { id: 123 } }, { method: 'getPostsByUser', params: { userId: 123, limit: 5 } } ]) .then(responses => { console.log('User:', responses[0].result); console.log('Posts:', responses[1].result); }) .catch(error => console.error('Error:', error));