drf
了解前后端分离和不分离
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:返回一个空文档