Mojolicious::Plugin::Swagger2(3) Mojolicious plugin for Swagger2


package MyApp;
use Mojo::Base "Mojolicious";
sub startup {
my $app = shift;
$app->plugin(Swagger2 => {url => "data://MyApp/petstore.json"});
@@ petstore.json
"swagger": "2.0",
"info": {...},
"host": "",
"basePath": "/api",
"paths": {
"/pets": {
"get": {...}


Mojolicious::Plugin::Swagger2 is Mojolicious::Plugin that add routes and input/output validation to your Mojolicious application.

Have a look at the ``RESOURCES'' for a complete reference to what is possible or look at Swagger2::Guides::Tutorial for an introduction.




This hook will be DEPRECATED! See <>.



The Swagger2 object used to generate the routes is available as "swagger" from stash. Example code:

  sub documentation {
    my ($c, $args, $cb);
    $c->$cb($c->stash('swagger')->pod->to_string, 200);


The Swagger specification for the current operation object <> is stored in the ``swagger_operation_spec'' stash variable.

  sub list_pets {
    my ($c, $args, $cb);



Holds the URL to the swagger specification file.



  $bool = $c->dispatch_to_swagger(\%data);

This helper can be used to handle WebSocket requests with swagger. See Swagger2::Guides::WebSocket for details.

This helper is EXPERIMENTAL.


  $c->render_swagger(\%err, \%data, $status);

This method is used to render %data from the controller method. The %err hash will be empty on success, but can contain input/output validation errors. $status is used to set a proper HTTP status code such as 200, 400 or 500.

See also Swagger2::Guides::Render for more information.



  $self->register($app, \%config);

This method is called when this plugin is registered in the Mojolicious application.

%config can contain these parameters:

  • coerce

    This argument will be passed on to ``coerce'' in JSON::Validator.

  • ensure_swagger_response

      $app->plugin(swagger2 => {
        ensure_swagger_response => {
          exception => "Internal server error.",
          not_found => "Not found.",

    Adds a before_render hook which will make sure ``exception'' and ``not_found'' responses are in JSON format. There is no need to specify ``exception'' and ``not_found'' if you are happy with the defaults.

  • route

    Need to hold a Mojolicious route object. See ``Protected API'' for an example.

    This parameter is optional.

  • spec_path

    Holds the location for where the specifiation can be served from. The default value is ``/'', relative to ``basePath'' in the specification. Can be disabled by setting this value to empty string.

  • validate

    A boolean value (default is true) that will cause your schema to be validated. This plugin will abort loading if the schema include errors

  • swagger

    A "Swagger2" object. This can be useful if you want to keep use the specification to other things in your application. Example:

      use Swagger2;
      my $swagger = Swagger2->new->load($url);
      plugin Swagger2 => {swagger => $swagger2};
      app->defaults(swagger_spec => $swagger->api_spec);

    Either this parameter or "url" need to be present.

  • url

    This will be used to construct a new Swagger2 object. The "url" can be anything that ``load'' in Swagger2 can handle.

    Either this parameter or "swagger" need to be present.


Copyright (C) 2014-2015, Jan Henning Thorsen

This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.


Jan Henning Thorsen - "[email protected]"