Skip to main content

Automated REST APIs for existing database-driven systems

Project description

sandman
=======

|Build Status| |Coverage Status|

Documentation
-------------

`Sandman documentation <https://sandman.readthedocs.org/en/latest/>`__

**sandman** "makes things REST". Have an existing database you'd like to
expose via a REST API? Normally, you'd have to write a ton of
boilerplate code for the ORM you're using, then integrate that into some
web framework.

I don't want to write boilerplate.

Here's what's required to create a RESTful API service from an existing
database using **sandman**:

.. code:: python

from sandman import app, db

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///chinook'

from sandman.model import register, Model

class Artist(Model):
__tablename__ = 'Artist'

class Album(Model):
__tablename__ = 'Album'

class Playlist(Model):
__tablename__ = 'Playlist'

register((Artist, Album, Playlist))

app.run()

Let's start our new service and make a request:

.. code:: zsh

> python runserver.py &
* Running on http://127.0.0.1:5000/

> curl GET http://localhost:5000/artists

.. code:: json

...
{
"ArtistId": 273,
"Name": "C. Monteverdi, Nigel Rogers - Chiaroscuro; London Baroque; London Cornett & Sackbu",
"links": [
{
"rel": "self",
"uri": "/artists/ArtistId"
}
]
},
{
"ArtistId": 274,
"Name": "Nash Ensemble",
"links": [
{
"rel": "self",
"uri": "/artists/ArtistId"
}
]
},
{
"ArtistId": 275,
"Name": "Philip Glass Ensemble",
"links": [
{
"rel": "self",
"uri": "/artists/ArtistId"
}
]
}
]

Oh, that's not enough? You also want a Django-style admin interface
built automatically? Fine. Add one more line to the list of models to
get access to this:

.. figure:: /docs/images/admin_tracks_improved.jpg
:alt: improved admin interface screenshot

improved admin interface screenshot
With **sandman**, (almost) zero boilerplate code is required. Your
existing database structure and schema is introspected and your database
tables magically get a RESTful API and admin interface. For each table,
Sandman creates:

- proper endpoints
- support for a configurable set of HTTP verbs

- GET
- POST
- PATCH
- PUT
- DELETE

- responses with appropriate ``rel`` links automatically
- custom validation by simply defining ``validate_<METHOD>`` methods on
your Model
- explicitly list supported methods for a Model by setting the
``__methods__`` attribute
- customize a Models endpoint by setting the ``__endpoint__`` method
- essentially a HATEOAS-based service sitting in front of your database

*Warning: Sandman is still very much a work in progress. Use it at your
own risk. It's also often changing in backwards incompatible ways.*

Installation
~~~~~~~~~~~~

``pip install sandman``

Quickstart
~~~~~~~~~~

You'll need to create one file with the following contents (which I call
``runserver.py``):

.. code:: python

from sandman.model import register, Model

# Insert Models here
# Register models here
# register((Model1, Model2, Model3))
# or
# register(Model1)
# register(Model2)
# register(Model3)

from sandman import app, db
app.config['SQLALCHEMY_DATABASE_URI'] = '<your database connection string (using SQLAlchemy)>'
app.run()

Then simply run

.. code:: bash

python runserver.py

and try curling your new RESTful API!

Example Application
~~~~~~~~~~~~~~~~~~~

Take a look in the ``sandman/test`` directory. The application found
there makes use of the `Chinook <http://chinookdatabase.codeplex.com>`__
sample SQL database.

Coming Soon
~~~~~~~~~~~

- Authentication
- More ``links`` automatically generated (i.e. ``links`` to related
objects)

.. |Build Status| image:: https://travis-ci.org/jeffknupp/sandman.png?branch=develop
:target: https://travis-ci.org/jeffknupp/sandman
.. |Coverage Status| image:: https://coveralls.io/repos/jeffknupp/sandman/badge.png?branch=develop
:target: https://coveralls.io/r/jeffknupp/sandman?branch=develop

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

sandman-0.4.0.tar.gz (9.1 kB view details)

Uploaded Source

File details

Details for the file sandman-0.4.0.tar.gz.

File metadata

  • Download URL: sandman-0.4.0.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for sandman-0.4.0.tar.gz
Algorithm Hash digest
SHA256 8f0e0bf8ccaa01cd88dba46a1a9c53348f2a6283a45a35f3f40cad3f81b37989
MD5 0e835bbe561d6d21d58a9b02b8ef2f08
BLAKE2b-256 0d6855058a350a22f182cbb872796b729f96b10f5f98fd1654cd9c9493f993e4

See more details on using hashes here.

Provenance

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