Small, opinionated library for building async REST APIs.
Project description
Introduction
Apian is an opinionated library for setting up a Python-based service with a minimum of boilerplate. It is a thin wrapper around flask-restplus and provides:
Documentation using OpenAPI.
Info and health resources.
JWT-based authentication.
Configuration injection using miniscule.
Example
Add a configuration file config.yaml
in the root of the project, with the
following contents:
environment: production
debug: False
authentication:
enabled: True
secret: secret
To create a Flask application and run it on localhost:5000
:
from apian import read_config, create_api, create_app, authenticated
from flask_restplus import Namespace, Resource
ns = Namespace("user")
@ns.route("")
class UserItem(Resource):
@authenticated
def get(self, user_id):
return user_id
config = read_config()
api = create_app("my-app", config)
api.add_namespace(ns)
app = create_app(api, config)
app.run()
The application has endpoints at the paths:
GET /my-app/api/info
- Return information about the service.GET /my-app/api/health
- Return the health status of the service.GET /my-app/api/user
- Return the user ID set in the Bearer token.
To access the user resource, ensure that the requests package is installed and execute the following snippet:
import jwt
import requests
def auth_token():
user_id = 10
claims = {"iat": dt.datetime.utcnow(), "sub": user_id}
key = "secret"
return jwt.encode(claims, key, "HS256")
headers = {"Authorization": "Bearer {}".format(
requests.get("http://localhost:5000/my-app/api/user", headers=headers)
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.