目录
Restful
概念
RESTful(Representational State Transfer)是一种用于设计网络应用程序的架构风格和原则,尤其适用于Web服务。它通过使用标准的HTTP方法(如GET、POST、PUT和DELETE)来结构化和与资源进行交互。
架构的主要原则
-
客户端-服务器架构:客户端和服务器是分离的实体,在网络上进行通信。客户端负责用户界面和用户体验,而服务器管理资源并处理请求。
-
无状态通信:客户端向服务器发出的每个请求都应包含服务器理解和处理请求所需的所有必要信息。服务器不会在请求之间保留任何特定于客户端的状态。
-
统一接口:RESTful服务应具有一致和标准化的接口。接口通常包括通过URI(统一资源标识符)识别资源,使用HTTP方法和状态码进行自我描述的消息,以及作为应用程序状态引擎(HATEOAS)的超媒体,以提供导航API的链接。
-
面向资源:REST将所有内容都视为资源,可以是物理实体(例如对象)或逻辑实体(例如对象集合)。资源通常通过URI进行标识,并可以使用HTTP方法进行操作。
-
无状态服务器:服务器不在请求之间存储任何客户端状态。每个请求都被视为独立的事务,并且服务器不维护客户端的上下文。
-
可缓存:来自RESTful服务的响应可以根据服务器提供的缓存控制头在客户端或中间服务器上进行缓存。
适用场景
一个系统的数据库数据,展现的平台有PC端、移动端、app端、ios端。
前端工程师:都遵循RESTful编程规范
后端工程师:都遵循RESTful编程规范
最终结果:开发效率高,便于管理
协议
用http或者https协议。
数据传输格式
数据传输的格式应该都用json格式。
url链接规则
url链接中,不能有动词,只能有名词。
并且对于一些名词,如果出现复数,那么应该在后面加s。
比如:获取新闻列表,应该使用/news/
,而不应该使用/get_news/
HTTP请求方式
GET:从服务器上获取资源。
POST:在服务器上新增或者修改一个资源。
PUT:在服务器上更新资源。(客户端提供所有改变后的数据)
PATCH:在服务器上更新资源。(客户端只提供需要改变的属性)
DELETE:从服务器上删除资源。
状态码
状态码 | 原因描述 | 描述 |
---|---|---|
200 | OK | 服务器成功响应客户端的请求。 |
400 | INVALID REQUEST | 用户发出的请求有错误,服务器没有进行新建或修改数据的操作 |
401 | Unauthorized | 用户没有权限访问这个请求 |
403 | Forbidden | 因为某些原因禁止访问这个请求 |
404 | NOT FOUND | 用户请求的url不存在 |
406 | NOT Acceptable | 用户请求不被服务器接收(比如服务器期望客户端发送某个字段,但是没有发送)。 |
500 | Internal server error | 服务器内部错误,比如遇到bug |
Restful的基本使用
介绍
优势
Flask-Restful是一个专门用来写restful api的一个插件。
使用它可以快速的集成restful api接口功能。
在系统的纯api的后台中,这个插件可以帮助我们节省很多时间。
缺点
如果在普通的网站中,这个插件就没有优势了,因为在普通的网站开发中,是需要去渲染HTML代码的,
而Flask-Restful在每个请求中都是返回json格式的数据。
安装
pip install flask-restful
基本使用
定义Restful的类视图:
1. 从flask_restful
中导入Api
,来创建一个api
对象。
2. 写一个类视图,让他继承自Resource
类,然后在这个里面,使用你想要的请求方式来定义相应的方法,比如你想要将这个类视图只能采用post
请求,那么就定义一个post
方法。
3. 使用api.add_resource
来添加类视图与url
。
from flask import Flask,url_for
# pip install flask-restful
from flask_restful import Resource,Api
app = Flask(__name__)
# 建立Api对象,并绑定应用APP
api = Api(app)
class LoginView(Resource):
def get(self):
return {"flag":True}
def post(self):
return {"flag":False}
# 建立路由映射
# api.add_resource(LoginView,'/login/')
api.add_resource(LoginView,'/login/','/login2/',endpoint='login')
with app.test_request_context():
# werkzeug.routing.BuildError: Could not build url for endpoint 'LoginView'.
# Did you mean 'loginview' instead?
# 默认没有写endpoint反向url_for函数通过小写函数名
# 如果有多个url,会返回第1个URL
# print(url_for('loginview'))
print(url_for('login'))
if __name__ == '__main__':
app.run(debug=True)
注意
- 如果你想返回json数据,那么就使用flask_restful,如果你是想渲染模版,那么还是采用之前的方式,就是
app.route
的方式。- url还是跟之前的一样,可以传递参数。也跟之前的不一样,可以指定多个url。
- endpoint是用来给url_for反转url的时候指定的。如果不写endpoint,那么将会使用视图的名字的小写来作为endpoint。
- add_resource的第二个参数是访问这个视图函数的url,这个url可以跟之前的route一样,可以传递参数,并且还有一点不同的是,这个方法可以传递多个url来指定这个视图函数