Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kiwicom/flask-ninja
https://github.com/kiwicom/flask-ninja
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/kiwicom/flask-ninja
- Owner: kiwicom
- Created: 2022-04-28T16:03:58.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-12-15T20:32:14.000Z (9 months ago)
- Last Synced: 2024-07-16T18:18:57.187Z (2 months ago)
- Language: Python
- Size: 1.03 MB
- Stars: 14
- Watchers: 6
- Forks: 4
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Flask Ninja
![build](https://github.com/kiwicom/flask-ninja/workflows/Build%20jobs/badge.svg)
![python](https://img.shields.io/badge/Python-3.9%20|%203.10-blue)**Flask Ninja** is a web framework for building APIs with Flask and Python 3.9+ type hints.
Key features:
- Easy: Designed to be easy to use and intuitive.
- Fast to code: Type hints and automatic docs lets you focus only on business logic.
- Standards-based: Based on the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.
- Models based: Pydantic models support and automatic (de)serialization of requests/responses.
- Secure: Natively supports various authentication methods for the requests.For mode details, see the [Documentation](https://flask-ninja.readthedocs.io/en/latest/)
## Installation
```
pip install flask-ninja
```## Usage
In your flask project where you create flask app:
```Python
from flask import Flask
from flask_ninja import NinjaAPI
from pydantic import BaseModelapp = Flask(__name__)
api = NinjaAPI(app)class Response(BaseModel):
"""Response model containing results of various number operations."""
sum: int
difference: int
product: int
power: int@api.get("/compute")
def compute(a: int, b: int) -> Response:
"""Computes results of various number operations.This endpoint returns a result of the following operations:
- sum
- difference
- product
- power:param int a: First number
:param int b: Second number number
"""
return Response(
sum=a + b,
difference=a - b,
product=a * b,
power=a ** b
)if __name__ == "__main__":
app.run()
```**That's it !**
Now you've just created an API that:
- receives an HTTP GET request at `/compute`
- takes, validates and type-casts GET parameters `a` and `b`
- validates the returned Response object and serializes it into JSON
- generates an OpenAPI schema for defined operation### Interactive API docs
Now go to http://127.0.0.1:5000/docs
You will see the automatic interactive API documentation (provided by Swagger UI):