Django REST framework (DRF) is a open source, mature and well supported Python/Django library that aims at building sophisticated web APIs. It is flexible and fully-featured toolkit with modular and customizable architecture that makes possible development of both simple, turn-key API endpoints and complicated REST constructs.
The only REST framework’s dependencies are Python (2.6.5+) and Django (1.30+). All other packages are optional, e.g. for filtering and OAuth support, or Markdown, PyYAML, defusedxml for Markdown, YAML, XML content types support.
Django REST framework contains wide set of out of the box features, but the core view class is very simple and framework in general is easy to use. The main idea behind the DRF is to clearly divide a model, the generalized wire representation (e.g. JSON, XML, etc.), and set of generic Class-Based-Views that can be customized to satisfy the specific API endpoint using Serializer that describes the mapping between them.
One of the main differences between DRF and other frameworks is that it allows developer to define URL structure and not rely on an auto-generated one, while others automate much of the conversion from Django models to REST endpoints, thus are less flexible. Moreover, Django REST Framework includes built-in API browser for testing out newly developed API.
Web API developed with DRF is rich and web browsable, supports a wide range of media types, authentication and permission policies out of the box. API’s display data can use standard function based views, or granular with powerful class based views for more complex functionality. Since authentication as a mechanism of associating an incoming request with a set of identifying credentials is one of the key features, DRF provides a set of authentication policies out of the box (including OAuth1a and OAuth2), and gives opportunity to develop custom schemes.
Main advantages of Django REST framework:
- Simplicity, flexibility, quality, and test coverage of source code.
- Powerful serialization engine compatible with both ORM and non-ORM data sources.
- Pluggable and easy to customise emitters, parsers, validators and authenticators.
- Generic classes for CRUD operations.
- Clean, simple, views for Resources, using Django's new class based views.
- Support for ModelResources with out-of-the-box default implementations and input validation (optional support for forms as input validation).
- HTTP response handling, content type negotiation using HTTP Accept headers.
- Pagination simplifies the process of returning paginated data in a way that can then be rendered to arbitrary media types.
- Publishing of metadata along with querysets.
- Permission classes and throttling management (API may feature a RESTrictive throttle for unauthenticated requests, a less RESTrictive throttle for authenticated requests, etc.).
DRF allows the flexibility to extend and customize the framework’s tools according to programmer’s demands that greatly reduces development time. The Django REST framework is used by such giants as Mozilla and Eventbrite. To get more information visit django-REST-framework.org.