表现层 :representation把资源呈现出来的形式 , 叫做表现层 , 在HTTP请求的头信息中用Accept和Content-Type字段指定 , 是对“表现层”的描述
状态转化 :客户端想要操作服务器 , 必须通过某种手段 , 让服务器发生状态转化 , 有 GET 、 POST 、 PUT 、 DELETE 四种方式 , 其中 GET 是用来获取资源 , POST 是用来新建资源(也可以进行更新资源) , PUT 用来更新资源 , DELETE 用来删除资源
所以restful架构是:
1)每一个URI代表一个资源;
2)客户端和服务器之间 , 传递这种资源的某种表现层;
3)客户端通过四个HTTP动词 , 对服务器端资源进行操作 , 实现“表现层状态转化”;
误区:最常见的一种设计错误 , 就是URI中包含动词 。因为“资源”表示一种实体 , 所以应该是名词 , URI不应该有动词 , 动词应该放到HTTP协议中
2、Flask-RESTful基本请求
其中一个接口有两种请求方式 , 一个是get , 另一个是post 。
get返回USER_LIST这个json数据;
post需要传一个参数 , 然后返回整个USER_LIST , 请求一次post方法就会多添加一次数据 , 如果post请求中找不到name字段 , 则返回“400 Bad Request”错误;
由于类UserList没有定义put()和delete()函数 , 所以在”PUT”或”DELETE”请求时会返回”405 Method Not Allowed”错误 。
其中在postman中是这么进行传递的
GET请求
POST请求
另外 , 路由支持多个路径 , 比如:
访问userlist和users两个路径的效果完全一样
3、带参数的请求
上面的例子中我们都是针对USER_LIST这个列表的 , 如果我们需要针对具体的user进行操作呢 , 就需要传递具体的user_id了 , 这时候 , 我们就需要路由支持带参数 。
在User类的get() , post() , put()等成员函数中 , 记得加上参数user_id来获取传入的变量值
4、参数解析
在“POST”和“PUT”请求中 , 直接访问form表单并验证的工作有些麻烦 , Flask-RESTful提供了 reqparse库来简化 , 可以通过 parser.add_argument() 方法来定义form表单字段 , 并指定其类型 , 然后在put或者post函数中调用 parser.parse_args() 来获取表单内容 , 并返回一个字典 , 该字典就包含表单的内容 。parser.parse_args() 方法会自动验证数据类型 , 返回400错误 , 还可以添加strict参数 , 如 parser.parse_args(strict=True) , 此时出现为定义的参数 , 也会返回400错误
REST和RESTFULREST(Representational State Transfer),表述性状态转移 , 定义了互联网架构原则 , 是一种架构风格 , 具体原则如下:
1.互联网所有资源都可以被抽象为资源
2.每个资源都有唯一的资源标识符
3.同一个资源具有多个表现形式(可以是json,xml等等)
4.对资源的操作不会改变资源标识符
5.所有的操作都是无状态的
主要是就是说互联网上的资源可以用一种规则来表示 , 对资源的操作是无状态的 。
RESTFUL,是指遵守rest规则的web服务 , restful是一种ROA(Resource Oriented Architecture , 面向资源的架构) , restful的核心概念就是资源(Resource) 。
互联网中客户端和服务端的交互就是资源的表述 , 这种表述是无状态的 , 也就意味着服务端要报错资源的所有状态 , 客户端可以通过http协议按照规定的规则访问或者改变资源的状态 , 就是所谓的“表述性状态转移” 。
具体表现形式如下:
GET/users获取用户列表
GET/users/1获取id(主键)为1的用户
POST/users创建用户
PUT/users/1修改id为1的用户(整条数据替换)
PATCH/users/1修改id为1的用户(数据局部字段替换)
DELETE/users/1删除id为1的用户
简单来说就是通过请求方法名来表示行为 , url来表示操作的资源
更多例子:
GET/users/1/products获取id为1用户下的产品列表
GET/users/1/products/1获取id为1用户下的id为1的产品
GET/users/name/aaa/products获取name为aaa的用户下的产品列表
GET/users/name/aaa/products/name/ppp获取name为aaa的用户下的名为ppp的产品
秒懂生活扩展阅读
- 和平精英抽奖玛莎拉蒂在哪里抽
- 凸四边形和凹四边形的区别 凸四边形
- 蜱虫和阴虱的图片 寄生虫图片
- 李明朝 丰县 李明朝
- 问号的作用 句号的作用
- 空压机安装及验收规范是什么
- 通天大圣和齐天大圣 通天大圣
- 对于商品的营销和宣传有什么区别
- 市和县哪个级别高
- 鸣人和佐助封印大筒木是第几集