Crate fts_axum

Crate fts_axum 

Source
Expand description

crates.io version docs.rs documentation crates.io downloads crates.io license getting started

§Flow Trading Service (FTS)

This crate is part of a collection of crates that together implement flow trading as proposed by Budish, Cramton, et al, in which trade occurs continuously over time via regularly-scheduled batch auctions.

The different crates in this workspace are as follows:

  • fts_core: Defines a set of data primitives and operations but defers the implementations of these operations, consistent with a so-called “hexagonal architecture” approach to separating responsibilities.
  • fts_solver: Provides a reference solver for the flow trading quadratic program.
  • fts_axum: A REST API HTTP server for interacting with the solver and persisting state across auctions.
  • fts_sqlite: An implementation of the core data operations using SQLite, suitable for exploration of flow trading-based marketplaces such as a forward market.

§FTS Axum Server

This crate provides a REST API for the core flow trading operations. A running server will host this schema at http://localhost:8080/docs.

§On the use of JSON and HTTP

It is true that JSON is a significantly flawed choice for (de)serialization of bid data. It is also true that a RESTful API over HTTP is questionable, at best, with respect to building a trading platform. On the other hand, these choices allow for virtually any programming environment to easily interface with the server, as well as open the door to rich, web-based clients.

Given that this project is primarily intended to motivate the use of flow trading, especially in the context of forward markets, these trade-offs are more than reasonable. With that said, the design of flow trading specifically discourages high-frequency execution, so the performance overhead of these trade-offs are also largely irrelevant.

§Authorization

In the interest of simplicity, endpoints that process bid data (or execute administrative actions) expect HTTP requests to contain the Authorization header with a bearer token. While an implementation is free to choose the token format, a good choice is a JWT token where the sub: claim specifies the bidder’s UUID, alongside any additional claims.

§API Endpoints and Data Types

Please refer to the automatically generated OpenAPI schema for up-to-date documentation of the endpoints. Note that any endpoint expecting a datetime type expects an RFC3339-compliant string.

Modules§

config
Configuration types for the Axum HTTP server.

Traits§

ApiApplication
Axum imposes all sorts of constraints on what can pass for state. This trait, coupled with a blanket implementation, specifies it all upfront and in one place. If a function takes a generic T: ApiApplication, then everything one might reasonably want to do should work.

Functions§

router
Construct a full API router with the given state and config
schema
Extract the OpenAPI documentation for the server
start_server
Starts the HTTP server with the provided configuration