AshJsonApi.OpenApi (ash_json_api v1.5.1)

View Source

Provides functions for generating schemas and operations for OpenApi definitions.

Add open_api_spex to your mix.exs deps for the required struct definitions.

Example

defmodule MyApp.OpenApi do
  alias OpenApiSpex.{OpenApi, Info, Server, Components}

  def spec do
    %OpenApi{
      info: %Info{
        title: "MyApp JSON API",
        version: "1.1"
      },
      servers: [
        Server.from_endpoint(MyAppWeb.Endpoint)
      ],
      paths: AshJsonApi.OpenApi.paths(MyApp.Api),
      tags: AshJsonApi.OpenApi.tags(MyApp.Api),
      components: %Components{
        responses: AshJsonApi.OpenApi.responses(),
        schemas: AshJsonApi.OpenApi.schemas(MyApp.Api)
      }
    }
  end
end

Summary

Functions

Creates an empty accumulator for schema generation.

Paths (routes) from the domain.

Common responses to include in the API Spec.

Resource schemas to include in the API spec.

Tags based on resource names to include in the API spec

Functions

define_filter?(domains, resource)

empty_acc()

Creates an empty accumulator for schema generation.

paths(domains, all_domains, opts, acc)

@spec paths(
  domain :: module() | [module()],
  module() | [module()],
  opts :: Keyword.t(),
  acc :: acc()
) ::
  {OpenApiSpex.Paths.t(), acc()}

Paths (routes) from the domain.

raw_filter_type(calculation, resource, acc)

resource_filter_fields_fields_only(resource)

responses()

@spec responses() :: OpenApiSpex.Components.responses_map()

Common responses to include in the API Spec.

schemas(domain)

schemas(domains, acc)

@spec schemas(domain :: module() | [module()], acc :: acc()) :: %{
  required(String.t()) => OpenApiSpex.Schema.t()
}

Resource schemas to include in the API spec.

spec(opts \\ [], conn \\ nil)

tags(domains)

@spec tags(domain :: module() | [module()]) :: [OpenApiSpex.Tag.t()]

Tags based on resource names to include in the API spec

tags(domain, domains)

write_attributes(resource, arguments, action, route, acc, format)

@spec write_attributes(
  resource :: module(),
  [Ash.Resource.Actions.Argument.t()],
  action :: term(),
  route :: term(),
  acc :: acc(),
  format :: content_type_format()
) :: {%{required(atom()) => OpenApiSpex.Schema.t()}, acc()}