Skip to main content

Light-weight Python framework for building REST APIs.

Project description

https://travis-ci.org/petr-s/cleaREST.svg?branch=master https://coveralls.io/repos/github/petr-s/cleaREST/badge.svg?branch=master

cleaREST

Light-weight Python framework for building REST APIs

  • WSGI

  • minimalistic

  • easy to use

  • advanced variables processing

  • automatic html documentation generation

URL Routing

is done by decorating your handling function with one of these decorators:

  • @GET

  • @POST

only one argument is required (url to handle) ie:

@GET("/my/awesome/url")
def my_function():
    ...

optionally you can specify successful http result status (default is HTTP_OK) ie:

@GET("/my/awesome/url", status=HTTP_CREATED)
def my_function():
    ...

list of status tuples:

  • HTTP_OK

  • HTTP_CREATED

Variables

  • GET variables from query string

  • POST variables can be send as:

  • application/x-www-form-urlencoded

  • multipart/form-data

  • application/json

  • url path variables (identifier inside curly brackets) ie:

    @GET("/my/awesome/url/{variable}")
    def my_function(variable):
        ...

Parsing

per parameter parsing function assigned as default value ie:

@GET("/my/awesome/url")
def my_function(myid=int):
    ...

optional parameter:

@GET("/my/awesome/url")
def my_function(myid=(int, 0)):
    ...

reduction multiple into one:

@GET("/my/awesome/url")
def my_function(user_id=lambda user, password: login):
    ...

Returning data

build-in support:

Class

Content-type

str

text/plain

dict

application/json

minidom

application/xml

etree

application/xml

you can also register any custom data-type or override table above with:

register_content_type(type_, content_type, handler)

Errors

to return a http error raise one of these exceptions:

  • HttpBadRequest

  • HttpNotFound

  • HttpUnsupportedMediaType

  • HttpNotImplemented

ie:

@GET("/my/awesome/url")
def my_function(myid=int):
    if myid == -1:
         raise HttpNotFound()
    ...

HTML Documentation

when is url opened by web-browser html documentation is shown instead of actual function call.

  • “application/xhtml+xml” in accept http header

  • similar tags to sphinx/docutils

  • extra example tags: “:example:” and for response “:rexample”:

ie:

@GET("/my/api")
def my_function(a, b=int):
    """
    Describe your function here.

    :param str a: Describe a here.
    :param int b: Describe b here.
    :return: W/E you function returns.

    :example::

        GET /my/api?a=someting&b=42

    :rexample::

        {
            "something": "something"
            ...
        }
    """
    ...

“real app” example:

https://cloud.githubusercontent.com/assets/4590121/15144637/01abb660-16b1-11e6-85b4-bdb46d33e3cf.png

Examples:

GET Hello world:

from wsgiref.simple_server import make_server
from clearest import application, GET


@GET("/")
def hello():
    return "hello world!"

 httpd = make_server("", 8000, application)
 httpd.serve_forever()

Output:

curl localhost:8000

hello world!

POST var:

from wsgiref.simple_server import make_server
from clearest import application, POST


@POST("/")
def hello(what):
    return "hello {what}!".format(what=what)


httpd = make_server("", 8000, application)
httpd.serve_forever()

Output:

curl –data “what=world” localhost:8000

hello world!

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

cleaREST-0.3.5.zip (23.9 kB view hashes)

Uploaded Source

Built Distribution

cleaREST-0.3.5-py2.py3-none-any.whl (21.7 kB view hashes)

Uploaded Python 2 Python 3

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