Web应用模式
- 在开发web应用中,有两种应用模式;
- 前后端不分离
- 该模式中,前端页面看到的效果由后端控制,有后端渲染页面或者进行重定向,也就是后端控制前端的展示,前后端的耦合度很高-------适用于纯网页应用
-
前后端分离
- 该模式中,后端仅返回前端需要的数据,不在进行渲染页面的操作,不再控制前端页面的显示效果.而前端用户看到什么效果,从后端请求的数据如何加载到前端中,由前端决定,后端仅需开发一套逻辑对外提供数据即可.
- 此应用模式中,前后端耦合度较低.此时我们通常将后端开发的每个视图视为一个接口,或者API,前段通过访问接口来对数据进行增删改查
RESTful设计方法
域名
-
应尽量将API部署在专用域名下
https://api.example.com
版本
-
将API的版本号放入URL中
http://www.example.com/app/1.0/foo http://www.example.com/app/1.1/foo http://www.example.com/app/2.0/foo
路径
-
表示API的具体网址,每个网址代表一种资源
-
资源作为网址,只能有名词,且所用名词往往与数据库的表明对应
GET /products :将返回所有产品清单 POST /products :将产品新建到集合 GET /products/4 :将获取产品 4 PATCH(或)PUT /products/4 :将更新产品 4
-
API中的名词应使用复数,无论子资源或者所有资源
获取单个产品:http://127.0.0.1:8080/AppName/rest/products/1 获取所有产品: http://127.0.0.1:8080/AppName/rest/products
HTTP动词
- GET----从服务器获取资源
- POST----在服务器中新建一个资源
- PUT----在服务器更新资源(客户端提供改变后的完整资源)
- DELETE----从服务器删除资源
- PATCH----在服务器更新资源(客户端提供改变的属性)
- HEAD----获取资源的元数据
- OPTIONS----获取信息,关于自愿的哪些属性是客服端可以改变的
过滤信息(Filtering)
-
参数设计允许存在冗余,即允许API路径和URL参数偶尔有重复
?limit=10:指定返回记录的数量 ?offset=10:指定返回记录的开始位置。 ?page=2&per_page=100:指定第几页,以及每页的记录数。 ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。 ?animal_type_id=1:指定筛选条件
状态码(Status Codes)
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 handling)
-
若状态码为以4开头,那么服务器就应该向用户返回出错信息,返回格式应该以键值对方式返回,error为键,出错信息为值
{ error: "Invalid API key" }
REST接口开发的核心任务
同源策略
- 相同的协议,相同的域名,相同的端口.ajax才能获取数据
Djando REST framework(DRF)
特点:
-
提供了定义序列化器Serializer的方法,可根据Django ORM或其他库自动序列化/反序列化
-
提供了丰富的类视图(CBV),Mixin扩展类,简化视图的编写
-
丰富的定制层级:函数视图(FBV),类视图(CBV),视图集合到自动生成API,满足各种需要
-
身份认证和权限认证的支持
-
内置了限流系统
-
直观的API web界面
-
可扩展性,插件丰富
DRF 工程搭建
-
安装DRF
pip install djangorestframework
-
添加rest_framework应用
INSTALLED_APPS=[ ... 'rest_framework' ]
pip install djangorestframework
-
添加rest_framework应用
INSTALLED_APPS=[ ... 'rest_framework' ]