Generate OpenAPI definitions from various places (currently only from plain old documentation)
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
To install this module, run the following commands:
perl Makefile.PL
make
make test
make install
After installing, you can find documentation for this module with the perldoc command.
perldoc OpenAPI::Generator
This software is Copyright (c) 2021 by Anton Fedotov.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)