DRF一---前后端分离的价绍 和 后端接口使用规范

本文深入解析前后端分离的概念,对比前后端不分离模式,阐述其优势与挑战,包括降低耦合度、提升开发效率和多端适配能力。同时,介绍了RESTful API规范,涵盖域名、协议、版本控制、路径设计、HTTP方法、过滤信息、状态码及错误处理等方面。

了解前后端分离和不分离

drf是前后端分离的
在web开发模式中有前后端分离和前后端不分离,这两种开发模式。

什么是前后端不分离?

在这里插入图片描述
这种模式下,耦合度比较高,django就是前后端不分离的。
由于app的发展,他需要的只是一份单纯的数据,而不是一堆html的代码。有了这样一份数据之后,一份可以给app,一份呢,可以给pc端的前端使用,减少工作量。

什么是前后端分离?

后端主要是提供接口提供数据
前端和app就可以调用接口展示数据
注意,调用接口之后,返回的数据是json数据或者xml数据
前端想要什么样的页面,后端不管,只是给你展示数据。那这样的话,耦合度就比较低。

前后端分离

优势

耦合度比较低;
多端适用;(app、前端、公众号都可以共同使用这一份数据)
前后端开发职责模糊;
解决开发效率问题;
可以提高前端程序员的能力;
解决服务器压力;(前端的部署在前端服务器上,后端的部署在后端服务器上)

缺点

前端人员学习的东西增加(vue js 啊这些);
后端程序员需要给前端写文档,表示这些接口是干什么用的,以及返回的是什么样的数据等等;

前后端分离后,后端的使用规范

这个规范就叫RESTful API

一、域名

把域名变成一个接口
应该尽量将api (也就是接口)部署在专用域名之下,比如

https://api.example.com

如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。

https://example.com/api/
这样会解决跨域的问题

二、协议

推荐https

三、版本

app端需要更新,app不像网页,后台一更新,你访问的时候就是更新好的。
app端的更新,是需要兼容的。也许有的人就不想更新,那你也得保存不跟新的那部分人额数据4
也是通过接口来实现的,将API的版本号放入URL

http://www.example.com/app/1.0/ 这个就表示1.0的版本
http://www.example.com/app/1.1 这个表示1.1的版本
http://www.example.com/app/2.0/ 这个表示2.0的版本

四、路径

推荐使用名词加复数,什么意思呢,
就比如你想获取1.0版本下的所有的苹果,那么接口应该是

http://www.example.com/app/1.0/

五、http请求方法

利用的HTTP方法可以分离网址中的资源名称的操作。
这样会减少接口
GET-------获取资源
POST-------增加资源
DELETE------删除资源
PATCH-------部分更新资源
PUT------全部更新资源
比如:我们想删除资源

http://example.com/app/1.0/ students/1/
一般根据id进行唯一标识来删除,
我们在经行增删改查的时候,都可以使用这个接口,只是请求方法发生了改变

六、过滤信息

比如分页:
接口就可以写成

http://example.com/app/1.0/ students/1/?page=2

出来分页之外,还可以指定:

?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件

七、状态码

200 OK - [GET]:服务器成功返回用户请求的数据
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - []:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作
401 Unauthorized - []:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - []:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

八、错误处理:

{
error:“Invalid API key”
}

会返回这样一个字符串,但是对于移动端的返回错误格式一般是

在这里插入图片描述

九、返回结果

返回的数据都是json

GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档

前后端分离的项目中,Django作为后端框架主要用于提供RESTful风格的API接口,以便前端能够通过HTTP请求(如GET、POST、PUT、DELETE等)与后端进行数据交互。以下是编写后端接口的详细步骤注意事项。 ### 使用Django REST Framework编写API接口 Django REST Framework(DRF)是Django中用于快速开发REST API的强大工具。它提供了序列化、认证、权限控制、视图集等功能,极大地简化了API的开发流程。 #### 1. 安装Django REST Framework 确保已安装Django REST Framework: ```bash pip install djangorestframework ``` 并在 `settings.py` 中添加: ```python INSTALLED_APPS = [ ... 'rest_framework', ] ``` #### 2. 定义模型 假设有个简单的用户模型 `User`,定义在 `models.py` 中: ```python from django.db import models class User(models.Model): username = models.CharField(max_length=100) email = models.EmailField() def __str__(self): return self.username ``` #### 3. 创建序列化器 在 `serializers.py` 中定义模型的序列化器,用于数据的序列化与反序列化: ```python from rest_framework import serializers from .models import User class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['id', 'username', 'email'] ``` #### 4. 编写视图 在 `views.py` 中编写基于类的视图或使用视图集来处理请求: ```python from rest_framework import viewsets from .models import User from .serializers import UserSerializer class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer ``` #### 5. 配置URL路由 在 `urls.py` 中使用路由器注册视图集,自动生成URL配置: ```python from django.urls import path, include from rest_framework import routers from . import views router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) urlpatterns = [ path('', include(router.urls)), ] ``` #### 6. 设置CORS(跨域资源共享) 前后端分离项目中,前端后端通常运行在不同的端口上,因此需要配置跨域访问。推荐使用 `django-cors-headers` 包: ```bash pip install django-cors-headers ``` 在 `settings.py` 中配置: ```python INSTALLED_APPS = [ ... 'corsheaders', ] MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', ... ] CORS_ORIGIN_ALLOW_ALL = True # 或者指定具体域名 ``` ### 接口测试 可以通过浏览器访问 `/users/` 接口查看返回的JSON数据,也可以使用Postman或Axios进行测试。例如,使用Axios在前端发起请求: ```javascript import axios from 'axios'; axios.get('http://localhost:8000/users/') .then(response => { console.log(response.data); }) .catch(error => { console.error('Error fetching users:', error); }); ``` ### 接口安全性 为了确保接口的安全性,建议: - 启用身份验证(如TokenAuthentication或SessionAuthentication) - 设置权限控制(如IsAuthenticated、IsAdminUser等) - 使用HTTPS进行加密传输 例如,在视图中添加身份验证权限设置: ```python from rest_framework import permissions class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer permission_classes = [permissions.IsAuthenticated] ``` 同时在 `settings.py` 中启用默认身份验证方式: ```python REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.TokenAuthentication', ], 'DEFAULT_PERMISSION_CLASSES': [ 'rest_framework.permissions.IsAuthenticated', ] } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值