Skip to content

doojonio/OpenAPI-Generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

linux

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)

About

Pod to OpenAPI

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages