Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!

简介: Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!

Django Rest Framework(DRF)是构建强大且灵活的Web API的优秀工具。它基于Django,提供了一套用于构建Web API的组件和工具,简化了API开发过程,同时保留了Django的优雅和强大。


一、Web应用模式


在开发Web应用时,通常有两种开发模式。


1、前后端不分离


前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,前端与后端的耦合度很高。


这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发一套接口。


2、前后端分离


后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。


至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,App有App的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。

前后端分离模式优点:

  • 提升开发效率
  • 完美应对复杂多变的前端需求
  • 增强代码可维护性


二、什么是API 接口?


API(应用程序接口)是一组定义了软件组件如何互相交互的规范。


API 是一些功能、定义或者协议的集合,通过 API 接口实现计算机软件之间的相互通信。对外封装完善,调用时无需学习 API 内部源码,依据 API 文档功能说明书来使用即可。


API 同时也是一种中间件,为各种不同平台提供数据共享。


API接口的数据格式有哪些?


目前 API 接口支持 XLSX、JSON、XML、CSV、RDF 等数据格式,其中 JSON 和 XML 是主流的数据格式,几乎所有 API 接口都支持这两种数据格式。

RESTful API 是一种基于REST架构风格设计的API。它使用统一的接口和状态无关的通信方式来实现各种网络应用。这种设计风格使得RESTful API具有简单、灵活、可扩展和易于理解的特点,因此在Web开发中得到了广泛的应用。


Django Rest Framework 正是基于Rest架构风格设计的一款 后端API 框架。


三、RESTful API


RESTful 是一种定义 Web API 接口的设计风格,尤其适用于前后端分离的应用模式中。

这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。


事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。


1、数据安全


RESTful API 链接一般都采用https协议进行传输,以提高数据交互过程中的安全性。


2、接口特征


通常用api关键字标识接口url。

https://api.github.io/
https://github.io/api

3、多数据版本共存


在url链接中标识数据版本。

https://api.github.io/v1
https://github.io/api/v2

注:url链接中的v1、v2就是不同数据版本的体现(一种数据资源有多版本情况下,也适用于新旧版本间)


4、数据即是资源,均使用名词(可复数)


接口一般都是完成前后台数据的交互,交互的数据我们称之为资源。

https://api.github.io/v1/users

注:一般提倡用资源的复数形式,在url链接中千万不要出现操作资源的动词

错误示范:https://api.github.io/v1/delete-user

特殊的接口可以出现动词,因为这些接口一般没有一个明确的资源,或是动词就是接口的核心含义

https://api.github.io/login

5、资源操作由请求方式决定

操作资源一般都会涉及到增删改查,我们提供请求方式来标识增删改查动作。

https://api.github.io/users - get请求:获取所有用户
https://api.github.io/users/1 - get请求:获取ID为1的用户
https://api.github.io/users - post请求:新增一个用户
https://api.github.io/users/1 - put请求:整体修改ID为1的用户
https://api.github.io/users/1 - patch请求:局部修改ID为1的用户
https://api.github.io/users/1 - delete请求:删除ID为1的用户

6、通过在url上传参的形式传递搜索条件

https://api.github.io/v1/projects?page=5&per_page=10  指定第几页,以及每页的记录数

7、错误处理,应返回错误信息

{
    error: "服务器发生错误"
}

四、Django Rest Framework


1、DRF 简介


Django REST framework 是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发REST API接口应用。

DRF优点:

  • 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;
  • 提供了丰富的类视图、Mixin扩展类,简化视图的编写;
  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;
  • 多种身份认证和权限认证方式的支持 JWT;
  • 内置了限流系统;
  • 直观的 API web 界面;
  • 可扩展性,插件丰富


2、安装和设置


首先,确保你的项目已经安装了Django。然后,使用以下命令安装DRF:

pip install djangorestframework

接下来,在你的Django项目的settings.py中添加以下行:

INSTALLED_APPS = [
    # ...
    'rest_framework',
]

然后,配置你的URL以包含DRF的路由:

from django.urls import path, include
urlpatterns = [
    # ...
    path('api/', include('rest_framework.urls')),
]

3、创建一个简单的API视图


现在,我们来创建一个简单的API视图。首先,定义一个序列化器:

from rest_framework import serializers
class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = 'all'

然后,创建一个基于类的视图:

from rest_framework import generics
from .models import MyModel
from .serializers import MyModelSerializer
class MyModelListView(generics.ListCreateAPIView):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer

最后,在你的urls.py中添加这个视图:

from django.urls import path
from .views import MyModelListView
urlpatterns = [
    # ...
    path('mymodel/', MyModelListView.as_view(), name='mymodel-list'),
]

现在,你已经创建了一个简单的API视图,可以通过/api/mymodel/访问。


五、结语


本篇文章小圈只是做了一个简单的引入以及介绍,DRF有很多其他功能和选项,可以满足更复杂的API需求。比如:更丰富的类视图、身份认证与权限管理等,后续小圈会抽空根据案例为大家带来更精细化的DRF学习教程。现在我们可以通过深入研究DRF文档和示例,更好地利用这个强大的工具。


希望这篇博文能够帮助你开始使用Django Rest Framework,构建出强大且高效的Web API。祝大家编码愉快!

相关文章
|
13天前
|
C语言 Python
python 调用c接口
【10月更文挑战第12天】 ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数
37 0
|
15天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
31 4
|
17天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
75 3
|
1天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
7 2
|
3天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
11 1
|
11天前
|
监控 负载均衡 API
Web、RESTful API 在微服务中有哪些作用?
在微服务架构中,Web 和 RESTful API 扮演着至关重要的角色。它们帮助实现服务之间的通信、数据交换和系统的可扩展性。
30 2
|
11天前
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
30 1
|
14天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
16 4
|
15天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
25 1
|
16天前
|
前端开发 JavaScript UED
构建现代Web应用:使用React框架打造单页面应用
【10月更文挑战第9天】构建现代Web应用:使用React框架打造单页面应用