Tinkex.API.URL (Tinkex v0.3.4)

View Source

URL building and query parameter management for Tinkex API requests.

Handles:

  • URL construction from base URL and path
  • Query parameter normalization and merging
  • Query string encoding/decoding

Summary

Functions

Builds a complete URL from base URL, path, and query parameters.

Normalizes query parameters from various input formats into a map.

Functions

build_url(base_url, path, default_query, request_query)

@spec build_url(String.t(), String.t(), map(), map()) :: String.t()

Builds a complete URL from base URL, path, and query parameters.

Merges query parameters in priority order (later overrides earlier):

  1. Default query from config
  2. Query parameters embedded in the path
  3. Explicit request query parameters

Examples

iex> build_url("https://api.example.com", "/v1/test", %{}, %{"key" => "value"})
"https://api.example.com/v1/test?key=value"

iex> build_url("https://api.example.com", "/v1/test?existing=1", %{}, %{"new" => "2"})
"https://api.example.com/v1/test?existing=1&new=2"

normalize_query_params(params)

@spec normalize_query_params(nil | map() | keyword()) :: map()

Normalizes query parameters from various input formats into a map.

Accepts:

  • nil (returns empty map)
  • Map with string or atom keys
  • Keyword list

Filters out nil values and ensures all keys/values are strings.

Examples

iex> normalize_query_params(nil)
%{}

iex> normalize_query_params(%{key: "value", nil_key: nil})
%{"key" => "value"}

iex> normalize_query_params([key: "value", other: 123])
%{"key" => "value", "other" => "123"}