Skip to main content

Small, opinionated library for building 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


Download files

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

Files for apian, version 0.4.0
Filename, size File type Python version Upload date Hashes
Filename, size apian-0.4.0.tar.gz (5.8 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page