View Source BridgeEx.Graphql (bridge_ex v2.4.0)

Create a Graphql bridge in the given module.

Once created, a graphql request can be made via MyBridge.call("my-query", %{"variable": "var"})

Options

  • endpoint: URL of the remote Graphql endpoint.
  • auth0: enable and configure Auth0 for authentication of requests. Takes the form of [enabled: false, audience: "target-audience"].
  • encode_variables: if true, encode the Graphql variables to JSON. Defaults to false.
  • format_response: transforms camelCase keys in response to snake_case. Defaults to false.
  • format_variables: transforms snake_case variable names to camelCase. Defaults to false.
  • http_headers: HTTP headers for the request. Defaults to %{"Content-type": "application/json"}.
  • http_options: HTTP options to be passed to Telepoison. Defaults to [timeout: 1_000, recv_timeout: 16_000].
  • log_options: override global configuration for logging errors. Takes the form of [log_query_on_error: false, log_response_on_error: false].
  • max_attempts: number of times the request will be retried upon failure. Defaults to 1. ⚠️ Deprecated: use retry_options instead.
  • decode_keys: determines how JSON keys in GraphQL responses are decoded. Can be set to :atoms, :strings or :existing_atoms. Currently, the default mode is :atoms but will be changed to :strings in a future version of this library. You are highly encouraged to set this option to :strings to avoid memory leaks and security concerns.
  • retry_options: override configuration regarding retries, namely
    • delay: meaning depends on timing
      • :constant: retry ever delay ms
      • :exponential: start retrying with delay ms
    • max_retries. Defaults to 0
    • policy: a function that takes an error as input and returns true/false to indicate whether to retry the error or not. Defaults to "always retry" (fn _ -> true end).
    • timing: either :exponential or :constant, indicates how frequently retries are made (e.g. every 1s, in an exponential manner and so on). Defaults to :exponential

Examples

defmodule MyBridge do
  use BridgeEx.Graphql, endpoint: "http://my-api.com/graphql"
end

defmodule MyBridge do
  use BridgeEx.Graphql,
    endpoint: "http://my-api.com/graphql",
    auth0: [enabled: true, audience: "target-audience", client: :target_client]
end

# If you would like to configure these options to use values evaluated at runtime,
# you can do so through your application config, e.g.
config :bridge_ex, MyBridge,
  endpoint: Application.fetch_env!(:my_app, :service_endpoint)