跳转至

引言

在本书中,您将学习如何使用 Django 和 Django REST Framework 构建多个复杂度递增的 Web API。Django 是一个非常流行的基于 Python 的 Web 框架,它处理了构建网站的复杂部分:认证、连接数据库、逻辑、安全性等。还有数千个第三方包为 Django 本身添加功能,其中最突出的是 Django REST Framework,它允许开发人员将任何现有的 Django 项目转换为强大的 Web API。

Django 和 Django REST Framework 被世界上大型科技公司使用,包括 Instagram、Mozilla 和 Pinterest。但它们也非常适合初学者或周末侧项目,因为 Django 的"电池包含"方法掩盖了许多底层复杂性,允许快速安全的开发。到本书结束时,您将能够用少量代码在更短的时间内创建生产就绪的 Web API。

为什么需要 APIs

API(应用程序编程接口)是描述两台计算机直接相互通信的简写方式。对于存在于万维网上的 Web API,主导架构模式被称为 REST(表现层状态转移),将在本书后面详细介绍。

早在 2005 年,当 Django 首次发布时,大多数网站由一个大型单体代码库组成。数据库模型、视图和 URLs 的后端与前端模板相结合,以控制每个网页的表示层。

但如今,网站采用 API 优先方法(正式分离后端和前端)要常见得多。这允许网站使用专用的 JavaScript 前端框架,如 React 或 Vue,它们分别发布于 2013 年和 2014 年。

当当前的前端框架在未来几年最终被更新的框架取代时,后端 API 可以保持不变。不需要重大的重写。

另一个主要好处是,单个 API 可以支持用不同语言和框架编写的多个前端。考虑到 JavaScript 用于 Web 前端,而 Android 应用需要 Java 编程语言,iOS 应用需要 Swift 编程语言。使用传统的单体方法,Django 网站无法支持这些各种前端。但使用内部 API,所有三个都可以与相同的底层数据库后端通信!

增长的网站也可以受益于创建外部 API,允许第三方开发人员构建自己的 iOS 或 Android 应用。当我在 2010 年在 Quizlet 工作时,我们没有资源开发自己的 iOS 或 Android 应用,但我们确实有一个可用的外部 API,超过 30 个开发人员使用它来创建由 Quizlet 数据库提供支持的自有闪卡应用。其中几个应用的下载量超过一百万次,同时丰富了开发人员并扩大了 Quizlet 的影响力。

API 优先方法的主要缺点是它比传统的 Django 应用需要更多配置。然而,正如我们将在本书中看到的,出色的 Django REST Framework 库为我们消除了许多复杂性。

Django REST Framework

有数千个第三方应用可用于为 Django 添加更多功能。您可以在 Django Packages 上看到完整的可搜索列表,以及 awesome-django 仓库中的精选列表。然而,在所有第三方应用中,Django REST Framework 可以说是 Django 的杀手级应用。它成熟、功能丰富、可定制、可测试且文档非常完善。它还故意模仿许多 Django 的传统约定,这使得学习速度更快。如果您已经了解 Django,那么学习 Django REST Framework 是合乎逻辑的下一步。

前置要求

如果您是 Django Web 开发的新手,我建议从我的书《Django for Beginners》开始。前几章可在线免费获取,涵盖了正确的设置、Hello World 应用、Pages 应用和 Message Board 应用。完整版更深入,涵盖了带有表单和用户帐户的博客网站,以及生产就绪的报纸网站,该网站具有自定义用户模型、完整的用户认证流程、电子邮件、权限、部署、环境变量等。

传统 Django 的这种背景很重要,因为 Django REST Framework 故意模仿许多 Django 约定。还建议读者对 Python 本身有基本了解。真正掌握 Python 需要多年时间,但只需一点知识,您就可以深入了解并开始构建东西。

为什么选择本书

我写这本书是因为缺乏为 Django REST Framework 新手开发人员提供的良好资源。假设似乎是每个人都已经了解所有关于 API、HTTP、REST 等的知识。我自己在学习如何构建 Web API 的过程中感到沮丧……而且我已经足够了解 Django 来写一本关于它的书!这本书是我在开始使用 Django REST Framework 时希望存在的指南。

第1章涵盖了安装 Python、Django、Git 和使用命令行的初始设置。第2章是 Web API 和支撑一切的 HTTP 协议的介绍。在第3-4章中,我们通过构建一个图书馆书籍网站,将其转换为 API,添加测试,然后将其部署上线,来回顾传统 Django 和 Django REST Framework 之间的差异。在第5章中,我们构建、测试并部署一个带有列表和详细 API 端点的 Todo API。它还包括跨源资源共享 (CORS)。

第6章是制作生产就绪的博客 API 的开始,该 API 使用自定义用户模型和完整的创建-读取-更新-删除 (CRUD) 功能。第7章重点介绍权限、如何适当地限制访问以及创建自定义权限类。在第8章中,重点转向用户认证和四种内置认证方法。然后我们为用户注册、注销、密码重置和密码重置确认添加端点。第9章转向视图集和路由器,它们是内置组件,可以大大减少标准 API 端点所需的编码量。第10章涵盖模式和文档,第11章逐步进行生产部署。

所有章节的完整源代码都可以在 Github 上在线找到。

结论

Django 和 Django REST Framework 是构建 Web API 的强大且易于访问的方法。到本书结束时,您将能够使用现代最佳实践将 API 添加到任何现有 Django 项目,或从头开始正确构建您自己的专用 Web API。让我们开始吧!