Apical
Elixir Routers from OpenAPI schemas
Installation
This package can be installed by adding apical to your list of dependencies in mix.exs:
def deps do
[
{:apical, "~> 0.1.0"}
]
endBasic use
For the following router module:
defmodule MyProjectWeb.ApiRouter do
require Apical
Apical.router_from_string(
"""
openapi: 3.1.0
info:
title: My API
version: 1.0.0
paths:
"/":
get:
operationId: getOperation
responses:
"200":
description: OK
""",
controller: MyProjectWeb.ApiController,
encoding: "application/yaml"
)
endYou would connect this to your endpoint as follows:
defmodule MyProjectWeb.ApiEndpoint do
use Phoenix.Endpoint, otp_app: :my_project
plug(MyProjectWeb.ApiRouter)
endAnd compose a controller as follows:
defmodule MyProjectWeb.ApiController do
use Phoenix.Controller
alias Plug.Conn
# NOTE THE CASING BELOW:
def getOperation(conn, _params) do
Conn.send_resp(conn, 200, "OK")
end
endFrom file:
You may also generate a router from a file:
defmodule MyProjectWeb.ApiRouter do
require Apical
Apical.router_from_file("priv/assets/api/openapi.v1.yaml",
controller: MyProjectWeb.ApiController
)
endAdvanced usage
For more advanced usage, consult the tests in the test directory. Guides will be provided in the next version of apical
Documentation
Documentation can be found at https://hexdocs.pm/apical.