PhxJsonRpc
Simple implementation of JSON-RPC server, written in elixir and working with phoenix.
Allows you to define any number of rpc endpoints, which can be accessed via http protocol.
How it works
The package uses router macro for matching RPC calls to your end-user service.
It uses JSON SCHEMA as a specification for your services and provides parsing, validation and error handling briefly.
Requests can be served in batches with asyncronous order.
To start handling requests with phoenix:
- Define rpc router
defmodule MyApp.Rpc.Router do
use PhxJsonRpc.Router,
otp_app: :rpc_router,
schema: "[PATH_TO_YOUR_SCHEMA]",
version: "2.0",
max_batch_size: 20
alias MyApp.Service
## Service routes
rpc("hello", Service, :hello, "#/components/schemas/Greeting")
end- Use handler in any web controller
defmodule MyAppWeb.RpcController do
use MyAppWeb, :controller
alias MyApp.Rpc.Router
def rpc(conn, request) do
response = Router.handle(request)
render(conn, "response.json", response)
end
end- Import helpers inside your view
defmodule MyAppWeb.RpcView do
use MyAppWeb, :view
import PhxJsonRpc.Views.Helpers
def render("response.json", %{response: response}) do
render_json(response)
end
end- Ensure your service module is defined and it's methods described in json-schema
defmodule MyApp.Service do
@moduledoc "My service"
def hello(%{"name" => name}) do
"Hello, #{name}"
end
endSee quick start and documentation section for more detail.
Request and response using postman:
Installation
The package can be installed
by adding phx_json_rpc to your list of dependencies in mix.exs:
def deps do
[
{:phx_json_rpc, "~> 0.3.5"}
]
endThis package depends on ex_json_schema for validation purposes.
Quick start
Please see this guide for usage with phoenix.
Documentation
The docs can be found at https://hexdocs.pm/phx_json_rpc.
Links
The package creation was inspired by some other repos:
License
MIT. Please see the license file for more information.