24 stable releases (11 major)

✓ Uses Rust 2018 edition

14.0.5 Nov 28, 2019
13.2.0 Sep 13, 2019
13.0.0 Jul 29, 2019
12.2.0 Jul 30, 2019
0.1.0 Jan 19, 2016

#9 in HTTP server

Download history 2878/week @ 2019-10-04 2930/week @ 2019-10-11 3507/week @ 2019-10-18 5193/week @ 2019-10-25 4675/week @ 2019-11-01 4621/week @ 2019-11-08 3779/week @ 2019-11-15 4164/week @ 2019-11-22 5004/week @ 2019-11-29 5386/week @ 2019-12-06 3618/week @ 2019-12-13 1922/week @ 2019-12-20 1830/week @ 2019-12-27 2863/week @ 2020-01-03 2921/week @ 2020-01-10

16,790 downloads per month
Used in 23 crates (13 directly)

MIT license

185KB
5.5K SLoC

jsonrpc-http-server

Rust http server using JSON-RPC 2.0.

Documentation

Example

Cargo.toml

[dependencies]
jsonrpc-http-server = "14.0"

main.rs

use jsonrpc_http_server::*;
use jsonrpc_http_server::jsonrpc_core::*;

fn main() {
	let mut io = IoHandler::default();
	io.add_method("say_hello", |_| {
		Ok(Value::String("hello".into()))
	});

	let server = ServerBuilder::new(io)
		.cors(DomainsValidation::AllowOnly(vec![AccessControlAllowOrigin::Null]))
		.start_http(&"127.0.0.1:3030".parse().unwrap())
		.expect("Unable to start RPC server");

	server.wait();
}

You can now test the above server by running cargo run in one terminal, and from another terminal issue the following POST request to your server:

$ curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "say_hello", "id":123 }' 127.0.0.1:3030

to which the server will respond with the following:

{"jsonrpc":"2.0","result":"hello","id":123}

If you omit any of the fields above, or invoke a different method you will get an informative error message:

$ curl -X POST -H "Content-Type: application/json" -d '{"method": "say_hello", "id":123 }' 127.0.0.1:3030
{"error":{"code":-32600,"message":"Unsupported JSON-RPC protocol version"},"id":123}
$ curl -X POST -H "Content-Type: application/json" -d '{"jsonrpc": "2.0", "method": "say_bye", "id":123 }' 127.0.0.1:3030
{"jsonrpc":"2.0","error":{"code":-32601,"message":"Method not found"},"id":123}

Dependencies

~8.5MB
~182K SLoC