UPDATE: We've now blown way past all the stretch goals and still going strong! For an indication of how further funding will continue to help, please see the roadmap in the 'Off the scale' project update.
"In my 12 years of being a web and mobile developer, I have never been so excited about one particular framework or library as I am about Django REST Framework." — How Django REST framework changed my life
Django REST framework is a hugely popular Web API framework for Django. In order to continue to move the project forward it's now time for a major new release, including:
- Faster, simpler and easier-to-use serializers.
- An alternative admin-style interface for the browsable API.
- Search and filtering controls made accessible in the browsable API.
- Alternative API pagination styles.
Documentation around API versioning.
- Triage of outstanding tickets.
- Improving the ongoing quality and maintainability of the project.
If the Kickstarter campaign succeeds we'll be able to comprehensively address some of the shortcomings in Django REST framework's current design, and help secure a sustainable future for the project.
Base goal: £4,000
The most pressing need for Django REST framework is a major overhaul of the serializers. This is currently the most awkward and complicated part of the project and it is in need of serious improvement. The aims of redesigning the serializers API would be:
- A much cleaner, simpler API & implementation.
- Support and documentation for writing completely custom serializer implementations, to provide for custom validation or output styles and non-ORM data sources.
Better support for validating and restoring complex nested structures.
- Better support for using and styling serializers as regular HTML forms
- Better documentation around using views as both Web pages and API endpoints.
I've already started work on designing the new serializers implementation. The basic API around how fields and serializers are declared will remain largely the same, but the underlying behaviour around how objects are deserialized and saved will be rewired and radically improved.
Redesigning the serializers will involve some design trade-offs, but I firmly believe they are the right ones to make. The new implementation will remove some of the complex automatic behaviour that's currently built-in to the design, and instead focus on simple, explicit behaviour that is easy to customize. I'm confident that this will result in something that is both easier to use and more functional.
Meeting the base goal will allow me to guarantee 2 full-time days per week on the project for two months.
Stretch goal: £8,000
The first stretch goal would focus on general feature improvements, including the following:
Better documentation and support for API versioning.
- Improved pagination API allowing for differing pagination styles such as range headers.
- Search, filtering, ordering and pagination controls presented in the browsable API.
- Improved error reporting and support for dealing with configuration errors, such as misconfigured hyperlinked relationships in serializer classes.
Meeting this level of funding would also allow me to properly review and close off outstanding tickets, and generally get the project into a really nicely polished and easily maintainable state.
Meeting this stretch goal will allow me to guarantee 2 full-time days per week on the project for four months.
Stretch goal: £12,000
If this Kickstarter project is sufficiently funded we'll be able to build on the baseline improvements, and additionally provide an alternative admin-style view for the browsable API.
The admin-style interface will be a web interface similar to the built-in Django admin, and will present your API data in a tabular format with controls for searching, sorting, adding, editing and deleting entires. It will be usable as an internal or customer-facing tool for viewing and managing your application data.
If we meet all our stretch goals, I will guarantee 2 full-time days per week on the project for a minimum of six months.
What about backwards compatibility?
REST framework 3 will remain largely API compatible with previous versions. However there are some areas where changes will be necessary, most notably to parts of the serializer API.
Where API changes are made I will be focusing on releasing incremental updates with a clear migration path for existing projects.
Since it's initial release in 2011, Django REST framework has been developed almost exclusively in personal time. In that time we've closed over 1,500 tickets - roughly one per day, every single day, for three years.
Professional, polished, well documented software projects take a lot of time to build. Given family and work commitments, building a major new release of the project in my personal time is not a feasible option.
What happens after the Kickstarter?
If we meet the full set of stretch goals the project will be in a much more maintainable state. That means I'll be better placed to deal with incoming support questions, triaging issues.
I'll also be able to concentrate my future efforts on ways to help other contributors take on more of a core support role in the project, by documenting up processes for contributions, reviews and project releases.
I am the original author and primary maintainer of Django REST framework. I initially released the project in January 2011 and have been working on it consistently since then. I have been developing with Django for about 5 years.
I work as Technical Lead at DabApps. We are a software consultancy specialising in building reliable, scalable API-based services and products.
I live in the wonderful seaside city of Brighton, UK, with my wife and son.
About Django REST framework
Django REST framework is a popular Web API framework for Django. The project currently has over 2400 stars on GitHub and a growing ecosystem of third-party packages. With 270 individual commiters to date it is now the most highly contributed Django package.
Since its release in 2011 the project has matured with consistent releases to a focus on quality and reliability. The project has adopted formal policies for security releases and backward compatibility, and is used and trusted by developers worldwide, including at well-established companies such as Mozilla and Eventbrite.
Risks and challenges
All software projects carry risks of delay, mis-estimation, or unforeseen design issues. The scope of the project is ambitious, so I'll be taking the following steps to reduce the risks of not delivering:
• The basics of the serializer redesign and broad plans around the admin style interface have already been partially validated.
• After more than 2 years of working with the current serializers implementation I'm confident that I understand the design trade-offs well enough to significantly improve the API and implementation.
• Where possible I will be releasing incremental updates. This will reduce the risk of not delivering functionality, and help ease any migration issues.
• Work on each goal will be strictly time-boxed. If necessary the scope of individual features may be reduced or adjusted in order to prioritize the core aims of the project.
Longer term the risks to the project are around ensuring it continues to remain well maintained and supported. This Kickstarter proposal is aimed towards getting Django REST framework to a secure, well-maintained baseline, and ensure that I'll be in a position to focus on growing the community and project for several years to come.Learn about accountability on Kickstarter
- (30 days)