kylelw23

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

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?

https://github.com/xerions/phoenix_swagger/blob/250d7c79459227095c0eb5c12237afb1b21b6477/examples/simple/lib/simple_web/controllers/user_controller.ex#L93

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

Where Next?

Popular in Discussions Top

New
jesse
Hi everyone, I hesitated to post this here because I don’t want you to think I’m spamming, but I’ve been working on a Platform-as-a-Serv...
New
AstonJ
I’ve just started the Phoenix part of the utterly brilliant online course by @pragdave. On generating the Phoenix app he uses the --no-ec...
New
Crowdhailer
I’ve been hearing much about the new formatter and it’s something I have been keen to try. I find examples buy far the most illuminating...
248 19814 150
New
AngeloChecked
What learn first? Rust or Elixir Hi Elixir community! I’m here because i want learn a new language. I’m a junior developer and mainly i ...
New
matthias_toepp
I’d love to hear what people think about Wisp, the new Gleam web framework started by Gleam’s primary creator Louis Pilfold. Gleam, alon...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

Other popular topics Top

grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 54260 488
New
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New
albydarned
Hello all! I am typing this post from my new MacBook Pro with the M1 chip. I’m loving it so far, and will probably use it as my daily dr...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New

We're in Beta

About us Mission Statement