An open API service indexing awesome lists of open source software.

https://github.com/klen/http-router

A simple router for HTTP applications
https://github.com/klen/http-router

http-router

Last synced: 10 months ago
JSON representation

A simple router for HTTP applications

Awesome Lists containing this project

README

          

HTTP Router
###########

.. _description:

**http-router** -- A simple router for HTTP applications

The library is not a HTTP framework. It's an utilite to build the frameworks.
The main goal of the library to bind targets to http routes and match them.

.. _badges:

.. image:: https://github.com/klen/http-router/workflows/tests/badge.svg
:target: https://github.com/klen/http-router/actions
:alt: Tests Status

.. image:: https://img.shields.io/pypi/v/http-router
:target: https://pypi.org/project/http-router/
:alt: PYPI Version

.. image:: https://img.shields.io/pypi/pyversions/http-router
:target: https://pypi.org/project/http-router/
:alt: Python Versions

.. _contents:

.. contents::

.. _requirements:

Requirements
=============

- python 3.9, 3.10, 3.11, 3.12, 3.13, pypy3

.. _installation:

Installation
=============

**http-router** should be installed using pip: ::

pip install http-router

Usage
=====

Create a router:

.. code:: python

from http_router import Router

# Initialize the router
router = Router(trim_last_slash=True)

Define routes:

.. code:: python

@router.route('/simple')
def simple():
return 'result from the fn'

Call the router with HTTP path and optionally method to get a match result.

.. code:: python

match = router('/simple', method='GET')
assert match, 'HTTP path is ok'
assert match.target is simple

The router supports regex objects too:

.. code:: python

import re

@router.route(re.compile(r'/regexp/\w{3}-\d{2}/?'))
def regex():
return 'result from the fn'

But the lib has a simplier interface for the dynamic routes:

.. code:: python

@router.route('/users/{username}')
def users():
return 'result from the fn'

By default this will capture characters up to the end of the path or the next
``/``.

Optionally, you can use a converter to specify the type of the argument like
``{variable_name:converter}``.

Converter types:

========= ====================================
``str`` (default) accepts any text without a slash
``int`` accepts positive integers
``float`` accepts positive floating point values
``path`` like string but also accepts slashes
``uuid`` accepts UUID strings
========= ====================================

Convertors are used by prefixing them with a colon, like so:

.. code:: python

@router.route('/orders/{order_id:int}')
def orders():
return 'result from the fn'

Any unknown convertor will be parsed as a regex:

.. code:: python

@router.route('/orders/{order_id:\d{3}}')
def orders():
return 'result from the fn'

Multiple paths are supported as well:

.. code:: python

@router.route('/', '/home')
def index():
return 'index'

Handling HTTP methods:

.. code:: python

@router.route('/only-post', methods=['POST'])
def only_post():
return 'only-post'

Submounting routes:

.. code:: python

subrouter = Router()

@subrouter.route('/items/{item}')
def items():
pass

router = Router()
router.route('/api')(subrouter)

match = router('/api/items/12', method='GET')
assert match, 'HTTP path is ok'
assert match.target is items
assert match.params == {"item": "12"}

.. _bugtracker:

Bug tracker
===========

If you have any suggestions, bug reports or
annoyances please report them to the issue tracker
at https://github.com/klen/http-router/issues

.. _contributing:

Contributing
============

Development of the project happens at: https://github.com/klen/http-router

.. _license:

License
========

Licensed under a `MIT license`_.

.. _links:

.. _klen: https://github.com/klen
.. _MIT license: http://opensource.org/licenses/MIT