简介:

自从Roy Fielding博士在2000年他的博士论文中提出REST(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为Web API的标准了。

如果一个URL返回的不是HTML,而是机器能直接解析的数据,这个URL就可以看成是一个Web API。

REST就是一种设计API的模式。最常用的数据格式是JSON。

比方说下载最流行的AI技术,百度这个流氓还是开放了API接口,供我们有限度的免费调用。

这个使用的就是API。

学习RESTful API,对我们以后使用别人开放的API又很大的好处

我们一起来看看RESTFul API有哪些特点:

  1. 基于“资源”,数据也好、服务也好,在RESTFul设计里一切都是资源。
  2. 无状态。一次调用一般就会返回结果,不存在类似于“打开连接-访问数据-关闭连接”这种依赖于上一次调用的情况。
  3. URL中通常不出现动词,只有名词
  4. URL语义清晰、明确
  5. 使用HTTP的GET、POST、DELETE、PUT来表示对于资源的增删改查
  6. 使用JSON不使用XML

    我举个例子:
    网站:/get_user?id=3
    RESTFul: GET /user/3 (GET是HTTP类型)

作者:
链接:https://www.imooc.com/article/17650
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作

一:使用RESTful API的好处

1.返回的不是HTML,而是机器能直接解析的数据

随着ajax的流行,API返回数据,而不是HTML页面,数据交互量减少,用户体验会好。

前后台分离,后台更多的进行数据处理,前台对数据进行渲染。

2.直接使用api可以进行CRUD,增删改查

一个标准的API,会有4个接口,get,put,post,delete,对应你的请求类型。就是WEB获取页面,上传表单,上传文件…………

增删改查,结构清晰

3.使用token令牌来进行用户权限认证,比cookie更安全

虽然我还没明白这是什么意思,但是cookie确实是我爬网站时使用最多的伪造渠道。

4.越来越多的开放平台,开始使用api接口

我们学习了如果构建API,那么也就熟悉了解了如何使用,对以后使用开放API,又很大的帮助。

也许某天,我们自己写的程序,也会开放一些API接口给大家用,那也应该符合RESTful API标准。

二:快速入门

1.官网

其实这个不是官网,但是是中文文档。

http://www.pythondoc.com/Flask-RESTful/quickstart.html

2.安装

安装 Flask 和 Flask-RESTful。

本人测试环境如下:

Flask==1.0.2
Flask-HTTPAuth==3.2.4
Flask-RESTful==0.3.6
requests==2.19.1
python 3.6.3
windows 10 x64

3.无脑测试

快速入门当中的代码貌似和我现在的版本不太匹配了。

下面这个是我改好的。

from flask import Flask
from flask_restful import Api,Resource app = Flask(__name__)
api = Api(app) class HelloWorld(Resource):
def get(self):
return {'hello': 'world'} api.add_resource(HelloWorld, '/') if __name__ == '__main__':
app.run(debug=True)

这个代码跑起来看看访问:http://127.0.0.1:5000,返回值是

{
"hello": "world"
}

而且我们没有注册首页路由,用了api.add_resource.。

返回的是一个JSON格式字符串。

三:用requests库深入测试

1.get就是我们日常浏览器访问的方式

没错,就是爬虫用的requests库。

from requests import get,put,post,delete
#测试get
t1=get('http://127.0.0.1:5000')
print(t1)
#返回码
print(t1.text)
#内容4

返回值:

<Response []>
{
"hello": "world"
}

返回码200,返回的text是json数据

2.put

from requests import get,put,post,delete
#测试get
t1=put('http://127.0.0.1:5000')
print(t1)
#返回码
print(t1.text)
#内容

返回值:

<Response []>
{
"message": "The method is not allowed for the requested URL."
}

还没写这个方法

我们没写都会有正确的信息返回,还是用库吧,比自己写方便多了。

主要是更加标准化。

四:完整代码

1.官方文档的完整代码示例

from flask import Flask
from flask_restful import reqparse, abort, Api, Resource app = Flask(__name__)
api = Api(app) TODOS = {
'todo1': {'task': 'build an API'},
'todo2': {'task': '?????'},
'todo3': {'task': 'profit!'},
} def abort_if_todo_doesnt_exist(todo_id):
if todo_id not in TODOS:
abort(404, message="Todo {} doesn't exist".format(todo_id)) parser = reqparse.RequestParser()
parser.add_argument('task', type=str) # Todo
# show a single todo item and lets you delete them
class Todo(Resource):
def get(self, todo_id):
abort_if_todo_doesnt_exist(todo_id)
return TODOS[todo_id] def delete(self, todo_id):
abort_if_todo_doesnt_exist(todo_id)
del TODOS[todo_id]
return '', 204 def put(self, todo_id):
args = parser.parse_args()
task = {'task': args['task']}
TODOS[todo_id] = task
return task, 201 # TodoList
# shows a list of all todos, and lets you POST to add new tasks
class TodoList(Resource):
def get(self):
return TODOS def post(self):
args = parser.parse_args()
todo_id = int(max(TODOS.keys()).lstrip('todo')) + 1
todo_id = 'todo%i' % todo_id
TODOS[todo_id] = {'task': args['task']}
return TODOS[todo_id], 201 ##
## Actually setup the Api resource routing here
##
api.add_resource(TodoList, '/todos')
api.add_resource(Todo, '/todos/<todo_id>') if __name__ == '__main__':
app.run(debug=True)

2.深入测试

from requests import get,put,post,delete

t1=get('http://127.0.0.1:5000/todos')
#测试get 全部
print(t1)
#返回码
print(t1.text)
#内容 t2=get('http://127.0.0.1:5000/todos/todo1')
#测试获取一条
print(t2)
print(t2.text) t3=put('http://127.0.0.1:5000/todos/todo1',data={'task':'jack test'})
#测试修改一条,todo1
print(t3)
print(t3.text)
t4=get('http://127.0.0.1:5000/todos/todo1')
#重新获取todo1
print(t4)
print(t4.text) t5=delete('http://127.0.0.1:5000/todos/todo1')
#删除一个 todo1
print(t5)
print(t5.text)
t6=get('http://127.0.0.1:5000/todos')
#重新获取全部
print(t6)
print(t6.text) t7=post('http://127.0.0.1:5000/todos',data={'task':'new line'})
print(t7)
print(t7.text)
#测试创建一个
t8=get('http://127.0.0.1:5000/todos')
print(t8)
print(t8.text)

3.总结

测试代码中使用了嵌套字典来进行测试,换成数据库,应该会吧?

五:

1.

2.

3.

六:

1.

2.

3.

七:

1.

2.

3.

八:

1.

2.

3.

九:

1.

2.

3.

十:

1.

2.

3.

用flask Flask-RESTful,实现RESTful API的更多相关文章

  1. flask, SQLAlchemy, sqlite3 实现 RESTful API 的 todo list, 同时支持form操作

    flask, SQLAlchemy, sqlite3 实现 RESTful API, 同时支持form操作. 前端与后台的交互都采用json数据格式,原生javascript实现的ajax.其技术要点 ...

  2. Python Flask高级编程之RESTFul API前后端分离精讲 (网盘免费分享)

    Python Flask高级编程之RESTFul API前后端分离精讲 (免费分享)  点击链接或搜索QQ号直接加群获取其它资料: 链接:https://pan.baidu.com/s/12eKrJK ...

  3. PHP实现RESTful风格的API实例(三)

    接前一篇PHP实现RESTful风格的API实例(二) .htaccess :重写URL,使URL以 /restful/class/1 形式访问文件 Options +FollowSymlinks R ...

  4. PHP实现RESTful风格的API实例(二)

    接前一篇PHP实现RESTful风格的API实例(一) Response.php :包含一个Request类,即输出类.根据接收到的Content-Type,将Request类返回的数组拼接成对应的格 ...

  5. PHP实现RESTful风格的API实例(一)

    最近看了一些关于RESTful的资料,自己动手也写了一个RESTful实例,以下是源码 目录详情: restful/ Request.php 数据操作类 Response.php 输出类 index. ...

  6. PHP实现Restful风格的API

    Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...

  7. flask + Python3 实现的的API自动化测试平台---- IAPTest接口测试平台(总结感悟篇)

    前言: 在前进中去发现自己的不足,在学习中去丰富自己的能力,在放弃时想想自己最初的目的,在困难面前想想怎么踏过去.在不断成长中去磨炼自己. 正文: 时间轴 flask + Python3 实现的的AP ...

  8. restful风格的API

    在说restful风格的API之前,我们要先了解什么是rest.什么是restful.最后才是restful风格的API! PS(REST:是一组架构约束条件和原则,REST是Roy Thomes F ...

  9. [01] 浅谈RESTful风格的API

    1.什么是RESTful风格的API REST,即Representational State Transfer,可以理解为"(资源的)表现层状态转化". 在网络上,我们通过浏览器 ...

  10. Gin实战:Gin+Mysql简单的Restful风格的API(二)

    上一篇介绍了Gin+Mysql简单的Restful风格的API,但代码放在一个文件中,还不属于restful风格,接下来将进行进一步的封装. 目录结构 ☁ gin_restful2 tree . ├─ ...

随机推荐

  1. 约瑟夫环(Joseph)的高级版(面向事件及“伪链表””)

    约瑟夫环问题: 在一间房间总共有n个人(下标0-n-1),只能有最后一个人活命. 按照如下规则去杀人: 所有人围成一圈 顺时针报数,每次报到q的人将被杀掉 被杀掉的人将从房间内被移走 然后从被杀掉的下 ...

  2. cocos2dx spine之二 :spine变色

    cocos2dx版本为3.10 1.具体原理和代码可以参考博文<利用shader改变图片色相Hue>,下面的代码根据该博文进行整理优化. 基本原理就是将RGB值转换为HSL值后加上输入的H ...

  3. vue 上传单个图片自定义增加progress改良用户体验

    <el-tab-pane label="开发商logo" name="first" style="position: relative;&quo ...

  4. 如何知道我 的python是32位还是64位的?

    方法一: 打开IDLE,看第一行提示,例如: 32位系统是这样的 Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:38:48) [MSC v.19 ...

  5. Linux网桥配置

    CentOS:1.配置临时网桥,重启后风格配置丢失[root@CentOS ~]# yum -y install bridge-utils[root@CentOS ~]# brctl addbr br ...

  6. 通过ambari安装hadoop集群,ZT

    通过ambari安装hadoop集群,ZT http://www.cnblogs.com/cenyuhai/p/3295635.html http://www.cnblogs.com/cenyuhai ...

  7. Tensorflow手写数字识别---MNIST

    MNIST数据集:包含数字0-9的灰度图, 图片size为28x28.训练样本:55000,测试样本:10000,验证集:5000

  8. pyhon基础之约束和异常处理:

    约束和异常处理:内容梗概: 1. 类的约束 2. 异常处理 3. 自定义异常 4. 日志 1. 类的约束定义:约束是对类的约束常用方法:1. 提取父类.然后在父类中定义好方法.在这个方法中什么都不用干 ...

  9. loj#2020. 「AHOI / HNOI2017」礼物

    题意:给定xy数组求 \(\sum_{i=0}^{n-1}(x_i+y_{(i+k)\modn}+c)^2\) 题解:先化简可得 \(n*c^2+2*\sum_{i=0}^{n-1}x_i-y_i+\ ...

  10. Matlab-8:松弛迭代法(SOR)

    function [x,n,flag]=sor(A,b,eps,M,max1) %sor函数为用松弛迭代法求解线性方程组 %A为线性方程组的系数矩阵 %b为线性方程组的常数向量 %eps为精度要求 % ...