首页 » Python » Python Flask Restful API

Python Flask Restful API

 

目前Web应用这块,restufl API用得非常普遍,因为,你手上的前端设备五花八门,各种系统的手机,pad等等,而且网站和手机APP经常会有需要资源共享的时候。

如果网站做个app,手机端再独立一个app,要保持2者同步,估计做开发的要做死了。

所以,RESTFUL API提出了一个概念,就是资源为上,通俗地讲:就是,我有一个资源A,可以作为接口来提供出来,那么,前端设备的B,C,D 都可以通过申请这个API接口的方式,来进行获取资源,而最后显示画面如何渲染,让客户看到是怎么样的一个样子,那是前端的事情了。

学习API之前,有两个前置技能需要去了解下,一个是JSON数据格式,另外一个是curl或者HTTPie这样的http调试工具,我这里用的是HTTPie

最简单的Web API

先来看看通过Python Flask做一个非常简单的Web API接口范例

如上面代码,当你请求 /todo/api/v1.0/tasks 的时候,通过路由get_tasks,就能返回当前所有的数据信息

他是通过jsonify来进行返回的,这里需要注意的是,有2种方法可以返回json数据,一个是jsonify,还有一个是json.dumps()

那么2者有什么区别呢?可以看下图

jsonify直接返回的是Content-type:application/json的响应对象(Response对象)

json.dumps返回的,则是Content-type:text/html,charset=utf-8的HTML格式

我们可以看下jsonfiy的官方解释

来看下效果图及两者的区别

返回单个数据

刚才是获取了所有的任务,那如果我需要其中某一个数据的话,如何做呢?

在URL里加入变量,通过检查tasks内部每个元素的id对应的值,是否有和输入的id匹配的,如果有匹配的,那就返回成一个list给task变量

比如下面,他就获取了id为2的这个数据的内容,当然,如果你在URL后面添加的是3,那他就会报错了,因为暂时还没有id为3的这个数据

上面的报错画面有些难看,而且,这样的报错格式,不太利于别人接口的使用。

一般像正规的接口,他都会以JSON格式返回error内容或者代码,所以,我们也要优化一下这样的错误信息。

这样,返回的格式,也是以JSON的格式,那样,如果别人调用你的接口,如果发生错误,别人就可以通过error信息,来进行渲染了。

POST方法添加信息

接下来,既然有数据,那肯定会涉及到添加数据,那我们就要用到POST方法了,就和上传FORM表单的性质是一样的

HTTPie的好处是,他默认的POST格式是JSON的,所以,你不必特意指定格式,只要写一个POST,就ok,如下

后面加入的信息,你写title=test或者title="test"都可以


PUT方法修改和DELETE方法删除

既然已经有了添加的功能,那么修改和删除的也必不可少,如下

优化接口

这样做接口系统,功能是达到了,但是你不见得让用户去背你的URL吧?这样不现实,像我们平时用的话,最好是可以自动生成URL

所以,这里我们需要写一个辅助函数,来返回一个完整的URL,这样可以就可以直接拿着URL用了

这样的话,你获取数据合集的路由,也需要修改了

也就是说,经过辅助函数处理,你就可以直接获取整体URI了,而不是单个id号

接口安全性

接口的应用功能上,已经做得差不多了,但是现在的接口外圈是对外开放的,如果有人恶意破坏,数据就有可能有危险

所以,这里引入了认证机制,其实简单来说就是要求客户端的用户有使用使用权限,比如有账号和密码。

这里引入HTTPBasicAuth

auth=HTTPBasicAuth()

通过客户端发送的用户名和密码,匹配get_password函数内部这个用户名和密码是否匹配

如果没有用户名密码,或者说是错误的,则返回401错误

于是,像查看资料啊这些的路由,都要给他挂一个login_required的装饰器了

如果你没有附带用户名密码,那么,就会禁止访问了

附带了用户名和密码的话,就可以有权限进行操作

原文链接:Python Flask Restful API,转载请注明来源!

0