# OpenAPI-Generator
Generate OpenAPI definitions from various places (currently only from plain old documentation)
# USAGE
Export OpenAPI from plain old documentation:
Perl modules (web controllers in some framework):
* Controllers/Controller1.pm:
```
package Controllers::Controller1;
use strict;
use warnings;
=head1 NAME
Controllers::Controller1;
=head1 OPENAPI
=over 2
=item GET /api/request
parameters:
- $ref: "#/components/parameters/UserId"
=cut
sub hande_api_request { ... }
=item POST /api/request
requestBody:
content:
application/json:
schema:
type: object
properties:
username:
type: string
responses:
"200":
description: something
=cut
sub handle_api_request2 { ... }
1
__END__
=item PARAM UserId
name: id
in: query
schema:
type: integer
=item SECURITY ApiKey
type: apiKey
description: api key for my API
name: x-Api-Key
in: header
```
* Controllers/Controller2.pm
```
package Controllers::Controller2;
use strict;
use warnings;
=head1 NAME
Controllers::Controller2;
=head1 OPENAPI
=over 2
=item PUT /api/request
parameters:
- name: id
in: query
schema:
type: integer
minimum: 1
requestBody:
content:
multipart/form-data:
schema:
type: object:
properties:
securityKey:
type: string
responses:
"200":
description: everything is ok
content:
application/json:
schema:
$ref: "#/components/schemas/User"
=cut
sub hande_api_request { ... }
=item POST /api/request2
requestBody:
content:
application/json:
schema:
type: object
properties:
username:
type: string
responses:
"200":
description: something
=cut
sub handle_api_request2 { ... }
=item SCHEMA User
type: object
properties:
username:
type: string
=cut
1
```
In your script, which generates openapi file for you application:
```
#!/usr/bin/env perl
use strict;
use warnings;
use OpenAPI::Generator;
use YAML;
my $common_def = openapi_from(pod => {src => './Controllers'});
print YAML::Dump($common_def);
```
Will print:
```
---
components:
parameters:
UserId:
in: query
name: id
schema:
type: integer
schemas:
User:
properties:
username:
type: string
type: object
securitySchemes:
ApiKey:
description: api key for my API
in: header
name: x-Api-Key
type: apiKey
paths:
/api/request:
get:
parameters:
- $ref: '#/components/parameters/UserId'
post:
requestBody:
content:
application/json:
schema:
properties:
username:
type: string
type: object
responses:
200:
description: something
put:
parameters:
- in: query
name: id
schema:
minimum: 1
type: integer
requestBody:
content:
multipart/form-data:
schema:
properties:
securityKey:
type: string
type: 'object:'
responses:
200:
content:
application/json:
schema:
$ref: '#/components/schemas/User'
description: everything is ok
/api/request2:
post:
requestBody:
content:
application/json:
schema:
properties:
username:
type: string
type: object
responses:
200:
description: something
```
# INSTALLATION
To install this module, run the following commands:
```
perl Makefile.PL
make
make test
make install
```
# SUPPORT AND DOCUMENTATION
After installing, you can find documentation for this module with the
perldoc command.
```
perldoc OpenAPI::Generator
```
# LICENSE AND COPYRIGHT
This software is Copyright (c) 2021 by Anton Fedotov.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)