Flask restful_api服务器端

使用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/<uuid>

检索一个任务

POST

http://[hostname]/vhoneypot/v1/policy/<uuid>

创建一个新任务

PUT

http://[hostname]/vhoneypot/v1/policy/<uuid>

更新一个已存在的任务

DELETE

http://[hostname]/vhoneypot/v1/policy2/<id>

删除一个任务

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

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

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

1from flask import Flask 2from flask_restful import Api 3 4app = Flask(__name__) 5app.config.update(RESTFUL_JSON=dict(ensure_ascii=False)) 6api = Api(app) 7 8from IPolicy import IPolicyList, IPolicy, IPolicy2List, IPolicy2 9api.add_resource(IPolicyList, '/vhoneypot/v1/policy') 10api.add_resource(IPolicy, '/vhoneypot/v1/policy/<uuid>') 11api.add_resource(IPolicy2List, '/vhoneypot/v1/policy2') 12api.add_resource(IPolicy2, '/vhoneypot/v1/policy2/<id>') 13 14def main(argv): 15 16 app.run(host=, port=, debug=)

View Code

然后是接口函数

1 1 class IPolicyList(HIHTTP.Resource): 2 2 # 获取历史策略信息和详情数据或者满足条件的数据 3 3 def get(self): 4 4 pass 5 5 6 6 7 7 8 8 class IPolicy(HIHTTP.Resource): 9 9 def get(self, uuid): 1010 pass 1111 1212 1313 1414 class IPolicy2List(HIHTTP.Resource): 1515 def get(self): 1616 pass 1717 1818 def post(self): 1919 pass 2020 2121 2222 class IPolicy2(HIHTTP.Resource): 2323 2424 2525 def put(self, id): 2626 pass 2727 2828 2929 def delete(self, id): 3030 pass 3131

View Code

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

点赞
收藏

评论区

加载中...

相关推荐

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

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Flask restful_api服务器端 - HelloWorld