codedge-llc / mapi

Turn your Elixir module into an HTTP microservice API

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Status Coverage Status Hex.pm

mapi

Turn your Elixir module into an HTTP microservice API

Supports HTTP/1.1 and HTTP/2. Very much a work in progress.

Installation

  1. Add mapi to your list of dependencies in mix.exs:
def deps do
  [
    {:mapi, "~> 0.3.0"}
  ]
end
  1. Configure your endpoints in config.exs
config :mapi, endpoints: [
  {YourModule, [port: 4002]}
]

Usage

Set up an example server for the String module with JSON responses.

# config.exs
config :mapi, endpoints: [
  {String, [port: 4002, type: :json]}
]

Once configured, call your server as if you were calling the function. Mapi supports both HTTP/1.1 and HTTP/2.

$ curl localhost:4002/upcase?q1="testing"
"TESTING"

URL params are applied to the function in alphabetical order without respect to the parameter names themselves. Use parameter names such as q1, q2, .... Parameters are strings, but will be cast to integers, atoms, and booleans if applicable. All other types are not yet supported.

Currently only GET requests are supported.

Responses

Mapi currently supports the following response types:

  • Plaintext
  • JSON
  • Erlang ETF

Configure them with a :type option of either :text, :json, or :etf, respectively. If not specified, Mapi will default to plaintext.

All valid requests give a response of 200 status. Invalid paths will return 404. Valid paths with an incorrect number of parameters will return 400, and all other errors will return 500.

Roadmap TODO

  • Configurable support for HTTP methods other than GET
  • Body parameter decoding (for non-GET requests)
  • Configurable endpoint webserver
  • Support for nested paths, custom routing, etc

About

Turn your Elixir module into an HTTP microservice API

License:MIT License


Languages

Language:Elixir 100.0%