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
- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 64d83d7208d71b9cf162a546a8f53c42345a5fbfd9ab1446a96e8e7d36982e40 |
|
MD5 | 9996116dbb5128b78733bd0d5ca16e18 |
|
BLAKE2b-256 | 7c89289dcc88faf075d0b02b339bb33d7bbc0646027ba4f329d6b979201ddfef |
File details
Details for the file Flask_First-0.18.1-py3-none-any.whl
.
File metadata
- Download URL: Flask_First-0.18.1-py3-none-any.whl
- Upload date:
- Size: 1.1 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 26ddb0b338baf04e4df5a7469a7a0869b7490358d177793a6f6d989ab96439f3 |
|
MD5 | 42130c6f952f21cef5e129ce27a453e8 |
|
BLAKE2b-256 | 8ccc656eaba875e58ef39f14bd6f0a483f6751a6e915b1435021ceba0ffab0b0 |