Nelson Vides 596d446f54
Erlang server overhaul (#19465)
* Upgrade erlang-server code generation and fix is_authorized crashes

* Introduce structured logging

* Improve general formatting

* Update generated files

* Enable erlang server on CI

* Add echo-server testing to CI

* Require OTP27 explicitly in the generated rebar.config file

* Rework handler and API

With this work, json validation becomes optional, fully implemented in
the `_api` module as it was before, but without being forcibly called by
the `_handler`. It is instead left as optional for the user to take
advantage of the exposed callbacks. Jesse also chooses draft-06 as a
default, but these can be chosen manually by the user too, as long as
jesse implements them.

`_handler` also becomes lighter, it now handles all mime types
transparently by forwarding to a user-given module that must implement
`accept_callback/4` and `provide_callback/4` as described in the
`_logic_handler` callbacks. These will simply be the return values of
cowboy_rest's `content_types_accepted` and `content_types_provided`
respectively, and should simply comply with their defined APIs. They
only get two parameters extending the behaviour, so that the user-given
callback can pattern-match on them: the path prefix of the logic
handler, and the operationID of the call.

* Fix return types for provide_callbacks

* Upgrade jesse to incur no dependencies

The less dependencies the built code requires the better.

* Fix dialyzer errors in the generated code

* Apply stronger dialyzer checks
2024-09-07 16:45:42 +08:00

1.2 KiB

OpenAPI server library for Erlang

Overview

An Erlang server stub generated by OpenAPI Generator given an OpenAPI spec.

Dependencies: Erlang OTP/27 and rebar3. Also:

Prerequisites

Getting started

Use erlang-server with rebar3

1, Create an application by using rebar3
	$ rebar3 new app http_server

2, Generate erlang-server project using openapi-generator
	https://github.com/OpenAPITools/openapi-generator#2---getting-started

3, Copy erlang-server file to http_server project, and don't forget the 'priv' folder.

4, Start in the http_server project:
	1, Introduce the following line in the http_server_app:start(_Type, _Args) function
		openapi_server:start(http_server, #{ip => {127,0,0,1}, port => 8080})
	2, Compile your http_server project
		$ rebar3 compile
	3, Start erlang virtual machine
		$ rebar3 shell
	4, Start project
		application:ensure_all_started(http_server).

To implement your own business logic, create a module called http_server_logic that implements the behaviour openapi_logic_handler. Refer to openapi_logic_handler documentation for details.