BinanceSpotRest (Binance Spot Rest v0.1.2)
View SourceEntry point for making Binance Spot REST API requests.
Overview
This module provides a unified request/2
function that handles:
- Optional validation of endpoint-specific query structs
- Preparing the HTTP request
- Signing and executing the request (or returning it for inspection)
You typically don’t need to call any other module directly — just build a query and pass it here.
Usage
- Build a query struct for the desired endpoint.
- Pass it to
BinanceSpotRest.request/2
. - Optionally configure behavior via options (validation, execution, headers, etc.).
Example
alias BinanceSpotRest.Endpoints.Trading.OrderPost.LimitQuery
query = %LimitQuery{
symbol: "LTCBTC",
side: BinanceSpotRest.Enums.Side._BUY(),
type: BinanceSpotRest.Enums.OrderType._LIMIT(),
timeInForce: BinanceSpotRest.Enums.TimeInForce._GTC(),
quantity: Decimal.new("1.0"),
price: Decimal.new("0.00029")
}
{:ok, result} = BinanceSpotRest.request(query)
# With test overrides
BinanceSpotRest.request(query,
execute: false,
base_url: "https://mock.url",
timestamp_fn: fn -> 1_740_000_000_000 end,
signature_fn: fn _query_string, _secret_key -> "mock-signature" end
)
Low-level API (optional)
You can also use the lower-level functions directly:
import Loe
alias BinanceSpotRest.Endpoints.Trading.OrderPost.LimitQuery
query = %LimitQuery{
symbol: "LTCBTC",
side: BinanceSpotRest.Enums.Side._BUY(),
type: BinanceSpotRest.Enums.OrderType._LIMIT(),
timeInForce: BinanceSpotRest.Enums.TimeInForce._GTC(),
quantity: Decimal.new("1.0"),
price: Decimal.new("0.00029")
}
query
~>> BinanceSpotRest.Query.validate()
~>> BinanceSpotRest.Query.prepare()
~>> BinanceSpotRest.Client.create_request()
~>> BinanceSpotRest.Client.make_request()
# With overrides, without validation, and without executing the request
query
~>> BinanceSpotRest.Query.prepare()
~>> BinanceSpotRest.Client.create_request(
base_url: "https://mock.url",
headers: [{"FAKE_API_KEY", "fake_api_key"}],
timestamp_fn: fn -> 1_740_000_000_000 end,
signature_fn: fn _query_string, _secret_key -> "mock-signature" end
)
Endpoint Queries
Each Binance endpoint has its own query module under:
BinanceSpotRest.Endpoints.<Category>.<EndpointPath>.<QueryModule>
Where <EndpointPath>
is derived from the endpoint path and HTTP method:
Example 1:
- Endpoint:
/api/v3/ticker/bookTicker
- Method:
GET
- Module path:
TickerBookTicker
(method suffix omitted for GET)
- Endpoint:
Example 2:
- Endpoint:
/api/v3/order/amend/keepPriority
- Method:
PUT
- Module path:
OrderAmendKeepPriorityPut
(HTTP method suffix added)
- Endpoint:
All query structs follow a consistent pattern and include field validation.
See Also
BinanceSpotRest.request/2
— Main function for triggering a requestBinanceSpotRest.Client
— low-level client and request builder
Summary
Functions
Processes a query struct into a request and optionally validates or sends it.
Types
Functions
Processes a query struct into a request and optionally validates or sends it.
Options
This function accepts both internal control options and options that affect the underlying HTTP request.
Control Options
:validate
(boolean, default:true
) — whether to validate the query struct before preparing the request.:execute
(boolean, default:true
) — whether to actually execute the HTTP request or just return the request struct.
Client Options
These options are forwarded to BinanceSpotRest.Client.create_request/2
and affect how the HTTP request is constructed:
:base_url
(String.t()
) — override the default Binance base URL (useful for testing or mocking).:headers
([{String.t(), String.t()}]
) — additional or replacement HTTP headers.:secret_key_fn
((() -> String.t())
) — a function that returns the Binance secret key.:timestamp_fn
((() -> integer())
) — a function that returns a timestamp (used in signed endpoints).:signature_fn
((String.t(), String.t() -> String.t())
) — a function to compute the request signature.
Examples
BinanceSpotRest.request(query)
BinanceSpotRest.request(query, validate: false)
BinanceSpotRest.request(query, execute: false)
BinanceSpotRest.request(query, validate: false, execute: false)
BinanceSpotRest.request(query,
base_url: "https://test.binance.local",
headers: [{"X-MOCK", "true"}],
timestamp_fn: fn -> 1_740_000_000_000 end,
signature_fn: fn _data, _key -> "mock-signature" end,
execute: false
)
Returns either:
{:ok, response}
if successful (or ifexecute: false
, the request struct){:error, reason}
if validation, preparation, or request execution fails