Hi Elixir community,
My phoenix application already set up the swagger and it’s up and running.
I specified swagger specification for /get and it works well
swagger_path :index do
get("/api/campaigns")
description("List of campaigns")
response(code(:ok), "Success")
end
but when I tried specify swagger for /post, I got stuck at its parameter() although I followed the documents, I installed latest PhoenixSwagger from its github branch
I still can’t specify the parameter right
I tried this
swagger_path :create do
post("/api/campaigns")
description("Create a campaign")
PhoenixSwagger.Path.Parameter(:name, :start_date, :end_date, :budget, :hashtags, :team_id, :description)
response(code(:ok), "Success")
end
with parenthesis and not with parenthesis
or this
swagger_path :create do
post("/api/campaigns")
description("Create a campaign")
parameter(:name, :start_date, :end_date, :budget, :hashtags, :team_id, :description)
response(code(:ok), "Success")
end
and I got this error for the two above code:
lib/kernel/parallel_compiler.ex:346: anonymous fn/5 in Kernel.ParallelCompiler.spawn_workers/7
With phoenix_swagger you probably want to refer to the Swagger 2.0 Documentation. You have to define a request body as described here: Describing Request Body.
Did you check out the example they provide in the repository?
This could look like the following example
swagger_path :create do
post("/api/campaigns")
description("Create a campaign")
parameter(:campaign, :body, Schema.ref(:campaign), "Campaign Attributes")
response(200, "Success")
end
Additionally you have to define the :campaign schema. Here you can make use of the swagger_definitions/0 function, which you can also add into the same controller:
def swagger_definitions do
%{
campaign:
swagger_schema do
title("Campaign")
description("A campaign.")
properties do
data(
Schema.new do
properties do
name(:string, "Campaign name", required: true)
start_time(:string, "Start time of the campaign.",
required: true,
format: "date-time"
)
id(:string, "Auto generated ID of type binary_id", required: false)
end
end
)
end
example(%{
campaign: %{
name: "Marketing 101",
start_time: "2030-07-01T21:00:00Z"
}
})
end
}
end