python flask高级编程之restful_使用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]/todo/api/v1.0/tasks

检索任务清单

GET

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

检索一个任务

POST

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

创建一个新任务

PUT

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

更新一个已存在的任务

DELETE

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

删除一个任务

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

id:唯一标识。整型。

title:简短的任务描述。字符串型。

description:完整的任务描述。文本型。

done:任务完成状态。布尔值型。

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

简单了解Flask框架

Flask好简单,但是又很强大的Python web 框架。这里有一系列教程Flask Mega-Tutorial series。(注:Django\Tornado\web.py感觉好多框:()

在我们深入实现web service之前,让我们来简单地看一个Flask web 应用的结构示例。

这里都是在Unix-like(Linux,Mac OS X)操作系统下面的演示,但是其它系统也可以跑,例如windows下的Cygwin。可能命令有些不同吧。(注:忽略Windows吧。)

先使用virtualenv安装一个Flask的虚拟环境。如果没有安装virtualenv,开发python必备,最好去下载安装。https://pypi.python.org/pypi/virtualenv

48304ba5e6f9fe08f3fa1abda7d326ab.png

$ mkdir todo-api

$ cd todo-api

$ virtualenv flask

New python executable in flask/bin/python

Installing setuptools............................done.

Installing pip...................done.

$ flask/bin/pip install flask

48304ba5e6f9fe08f3fa1abda7d326ab.png

这样做好了一个Flask的开发环境,开始创建一个简单的web应用,在当前目录里面创建一个app.py文件:

48304ba5e6f9fe08f3fa1abda7d326ab.png

#!flask/bin/python

from flask import Flask

app = Flask(__name__)

@app.route('/')

def index():

return "Hello, World!"

if __name__ == '__main__':

app.run(debug=True)

48304ba5e6f9fe08f3fa1abda7d326ab.png

去执行app.py:

$ chmod a+x app.py

$ ./app.py

* Running on http://127.0.0.1:5000/

* Restarting with reloader

现在可以打开浏览器,输入http://localhost:5000去看看这个Hello,World!

好吧,十分简单吧。我们开始转换到RESTful service!

使用Python 和 Flask实现RESTful services

使用Flask建立web services超级简单。

当然,也有很多Flask extensions可以帮助建立RESTful services,但是这个例实在太简单了,不需要使用任何扩展。

这个web service提供增加,删除、修改任务清单,所以我们需要将任务清单存储起来。最简单的做法就是使用小型的数据库,但是数据库并不是本文涉及太多的。可以参考原文作者的完整教程。Flask Mega-Tutorial series

在这里例子我们将任务清单存储在内存中,这样只能运行在单进程和单线程中,这

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值