View Source 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
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
end
See quick start and documentation section for more detail.
Request and response using postman:
installation
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.4"}
]
end
This package depends on ex_json_schema for validation purposes.
quick-start
Quick start
Please see this guide for usage with phoenix.
documentation
Documentation
The docs can be found at https://hexdocs.pm/phx_json_rpc.
links
Links
The package creation was inspired by some other repos:
license
License
MIT. Please see the license file for more information.