Flask restful_api服务器端

Stella981
• 阅读 625

使用python的Flask实现一个RESTful API服务器端

最近这些年,REST已经成为web services和APIs的标准架构,很多APP的架构基本上是使用RESTful的形式了。

本文将会使用python的Flask框架轻松实现一个RESTful的服务。

REST的六个特性:

  • Client-Server:服务器端与客户端分离。
  • Stateless(无状态):每次客户端请求必需包含完整的信息,换句话说,每一次请求都是独立的。
  • Cacheable(可缓存):服务器端必需指定哪些请求是可以缓存的。
  • Layered System(分层结构):服务器端与客户端通讯必需标准化,服务器的变更并不会影响客户端。
  • Uniform Interface(统一接口):客户端与服务器端的通讯方法必需是统一的。
  • Code on demand(按需执行代码?):服务器端可以在上下文中执行代码或者脚本?

Servers can provide executable code or scripts for clients to execute in their context. This constraint is the only one that is optional.(没看明白)

RESTful web service的样子

REST架构就是为了HTTP协议设计的。RESTful web services的核心概念是管理资源。资源是由URIs来表示,客户端使用HTTP当中的'POST, OPTIONS, GET, PUT, DELETE'等方法发送请求到服务器,改变相应的资源状态。

HTTP请求方法通常也十分合适去描述操作资源的动作:

HTTP方法

动作

例子

GET

获取资源信息

http://example.com/api/orders

(检索订单清单)

GET

获取资源信息

http://example.com/api/orders/123

(检索订单 #123)

POST

创建一个次的资源

http://example.com/api/orders

(使用带数据的请求,创建一个新的订单)

PUT

更新一个资源

http://example.com/api/orders/123

(使用带数据的请求,更新#123订单)

DELETE

删除一个资源

http://example.com/api/orders/123

删除订单#123

REST请求并不需要特定的数据格式,通常使用JSON作为请求体,或者URL的查询参数的一部份。

设计一个简单的web service

下面的任务将会练习设计以REST准则为指引,通过不同的请求方法操作资源,标识资源的例子。

我们将写一个To Do List 应用,并且设计一个web service。第一步,规划一个根URL,例如:

http://[hostname]/todo/api/v1.0/

上面的URL包括了应用程序的名称、API版本,这是十分有用的,既提供了命名空间的划分,同时又与其它系统区分开来。版本号在升级新特性时十分有用,当一个新功能特性增加在新版本下面时,并不影响旧版本。

第二步,规划资源的URL,这个例子十分简单,只有任务清单。

规划如下:

HTTP方法

URI

动作

GET

http://[hostname]/vhoneypot/v1/policy

检索任务清单

GET

http://[hostname]/vhoneypot/v1/policy/

检索一个任务

POST

http://[hostname]/vhoneypot/v1/policy/

创建一个新任务

PUT

http://[hostname]/vhoneypot/v1/policy/

更新一个已存在的任务

DELETE

http://[hostname]/vhoneypot/v1/policy2/

删除一个任务

我们定义任务清单有以下字段:

  • id:唯一标识。整型。
  • title:简短的任务描述。字符串型。
  • description:完整的任务描述。文本型。
  • done:任务完成状态。布尔值型。

以上基本完成了设计部份,接下来我们将会实现它!

Flask  restful_api服务器端 Flask  restful_api服务器端

from flask import Flask
from flask_restful import Api

app = Flask(__name__)
app.config.update(RESTFUL_JSON=dict(ensure_ascii=False))
api = Api(app)

from IPolicy import IPolicyList, IPolicy, IPolicy2List, IPolicy2
api.add_resource(IPolicyList, '/vhoneypot/v1/policy')
api.add_resource(IPolicy, '/vhoneypot/v1/policy/<uuid>')
api.add_resource(IPolicy2List, '/vhoneypot/v1/policy2')
api.add_resource(IPolicy2, '/vhoneypot/v1/policy2/<id>')

def main(argv):
   
    app.run(host=, port=, debug=)

View Code

然后是接口函数

Flask  restful_api服务器端 Flask  restful_api服务器端

 1 class IPolicyList(HIHTTP.Resource):
 2     # 获取历史策略信息和详情数据或者满足条件的数据
 3     def get(self):
 4         pass
 5   
 6 
 7 
 8 class IPolicy(HIHTTP.Resource):
 9     def get(self, uuid):
10         pass
11       
12 
13 
14 class IPolicy2List(HIHTTP.Resource):
15     def get(self):
16         pass
17    
18     def post(self):
19         pass
20       
21 
22 class IPolicy2(HIHTTP.Resource):
23 
24     
25     def put(self, id):
26         pass
27               
28 
29     def delete(self, id):
30         pass
31

View Code

大概就是这个样子。初学还求各位大神指点

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这