Skip to main content

Flask extension for using 'specification first' or 'API-first' principle via OpenAPI specification.

Project description

Flask-First

Flask extension for using "specification first" and "API-first" principles.

Features

  • Application Factory supported.
  • Validating and serializing headers of request.
  • Validating and serializing path parameters of request.
  • Validating and serializing arguments of request.
  • Validating and serializing cookies of request.
  • Validating and serializing JSON of request.
  • Validating JSON from response for debugging.
  • Provides a Swagger UI.
  • Support OpenAPI version 3.1.0.
  • Support specification from multiple file.

Installation

Recommended using the latest version of Python. Flask-First supports Python 3.9 and newer.

Install and update using pip:

$ pip install -U flask_first

Settings

FIRST_RESPONSE_VALIDATION - Default: False. Enabling response body validation. Useful when developing. Must be disabled in a production environment.

Tools

Possible to get data from path-parameters, arguments, JSON, cookies and headers in serialized form. Use flask-first object attached to the query.

from flask import request


def route_func():
    path_parameters = request.extensions['first']['views']
    args = request.extensions['first']['args']
    json = request.extensions['first']['json']
    cookies = request.extensions['first']['cookies']
    headers = request.extensions['first']['headers']

Data types

Supported formats for string type field:

  • uuid
  • date-time
  • date
  • time
  • email
  • ipv4
  • ipv6
  • uri
  • binary

Examples

Simple example

OpenAPI 3 specification file openapi.yaml:

openapi: 3.1.0
info:
  title: Simple API for Flask-First
  version: 1.0.0
paths:
  /{name}:
    parameters:
    - name: name
      in: path
      required: true
      schema:
        type: string
    get:
      operationId: index
      summary: Returns a list of items
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string

File with application initialization main.py:

import os

from flask import Flask
from flask_first import First

basedir = os.path.abspath(os.path.dirname(__file__))
path_to_spec = os.path.join(basedir, 'openapi.yaml')

app = Flask(__name__)
app.config['FIRST_RESPONSE_VALIDATION'] = True
first = First(path_to_spec, app=app, swagger_ui_path='/docs')


def index(name):
    return {'message': name}


first.add_view_func(index)

if __name__ == '__main__':
    app.run()

Run application:

$ python main.py

Check url in browser http://127.0.0.1:5000/username. Check SwaggerUI url in browser http://127.0.0.1:5000/docs.

Specification from multiple file

Flask-First supported specification OpenAPI from multiple files. You need create root file for specification with name openapi.yaml.

Root file openapi.yaml:

openapi: 3.1.0
info:
  title: Simple API for Flask-First
  version: 1.0.0
paths:
  /{name}:
    $ref: 'name.openapi.yaml#/name'
components:
  schemas:
    MessageField:
      type: string
      description: Field for message.

Child file name.openapi.yaml:

name:
  parameters:
    - name: name
      in: path
      required: true
      schema:
      type: string
  get:
    operationId: index
    summary: Returns a list of items
    responses:
      '200':
        $ref: '#/components/responses/ResponseOK'
components:
  responses:
    ResponseOK:
      description: OK
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                $ref: 'openapi.yaml#/components/schemas/MessageField'

CORS support

Your need enable CORS in Flask and adding OPTIONS method in your specification. Example:

...
paths:
  /index:
    post: ...
    get: ...
    put: ...
    patch: ...
    delete: ...
    options:
      summary: CORS support
      responses:
        200:
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
            Access-Control-Allow-Methods:
              schema:
                type: string
            Access-Control-Allow-Headers:
              schema:
                type: string
                content: { }

Additional documentation

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flask_first-0.18.1.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

Flask_First-0.18.1-py3-none-any.whl (1.1 MB view details)

Uploaded Python 3

File details

Details for the file flask_first-0.18.1.tar.gz.

File metadata

  • Download URL: flask_first-0.18.1.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.4

File hashes

Hashes for flask_first-0.18.1.tar.gz
Algorithm Hash digest
SHA256 64d83d7208d71b9cf162a546a8f53c42345a5fbfd9ab1446a96e8e7d36982e40
MD5 9996116dbb5128b78733bd0d5ca16e18
BLAKE2b-256 7c89289dcc88faf075d0b02b339bb33d7bbc0646027ba4f329d6b979201ddfef

See more details on using hashes here.

File details

Details for the file Flask_First-0.18.1-py3-none-any.whl.

File metadata

File hashes

Hashes for Flask_First-0.18.1-py3-none-any.whl
Algorithm Hash digest
SHA256 26ddb0b338baf04e4df5a7469a7a0869b7490358d177793a6f6d989ab96439f3
MD5 42130c6f952f21cef5e129ce27a453e8
BLAKE2b-256 8ccc656eaba875e58ef39f14bd6f0a483f6751a6e915b1435021ceba0ffab0b0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page