kylelw23
Phoenix and Swagger
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
How can I get the parameter right ? Thank you
Marked As Solved
daskycodes
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 | Swagger Docs.
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
Popular in Discussions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








