Last updated
Last updated
基础知识介绍:
一. 文件中需要包含一个config.py
文件,该文件用于标注pecan程序的起点等配置信息:
modules
:其中包含的python包,是app.py
文件所在的包,即setup_app
方法所在的包
root
:即RootController
所在的路径,/
路径
debug
:是否开启调试,生产环境的话,将其置为False
二. pecan可以实现对象分发式的路由
当RootController继承pecan.rest.RestController
时,存在URL映射关系如下表所示,当然也可以另外自己定义新的方式:
在RootController类中,一般会写上如下的代码:
当存在以上代码时,使用以下命令调用就会有返回值:
返回值为:
也就是说,curl中的GET
对应了代码中的get()
方法,若要增加POST方法,可以在代码中添加如下:
当然,如果有的方法,需要既可以使用GET
,又可以使用POST
,且对不同的方法有不同的回应,则可以写成如下:
可以使用如下命令进行请求:
==下面重点介绍对象分发式路由:==
当存在以下代码的时候:
在RootController
类中,生成了一个v1Controller
对象,这个对象就是用来做分发式路由的,因此可以使用如下命令去调用它:
三. 使用WSME来规范API的响应值
wsme模块可以用来规范API的请求和响应值,并且可以和pecan模块很好的结合在一起,其支持的类型如下:
在下面这个例子中,可以看出:
@wsexpose(int, int)
中第一个int
表示返回值必须为int,第二个int
表示请求参数必须为int
在这个例子中,可以使用curl去测试:
若用以下的输入,则会错误:
当然,wsme还可以用来检测更为复杂的类型,如类对象,这个在下面再做介绍。
四. wsme检测类对象:
在openstack中,使用Rest API返回的响应值经常会是以下格式:
针对于这种情况,我们可以使用WSME的自定义类型,下面就定义一个user
类型和users
类型:
注意: 这里没有使用
__init__
是因为,父类的初始化方法参数为**kw
,因此没有特殊需求,这里可以不写
现在可以使用如下的方法去调用这两个类型:
现在使用curl命令会出现以下现象:
WSME还可以用于检测上传的参数是否为complex type类型(由于上传要用到POST
操作,所以此处就以POST作例子):
当使用curl访问时,程序的控制台会打印出访问的值:
这里需要注意的是,如果这里不写成body=User
,而是直接写成User
,那么curl中的data字段就也需要进行相应的修改,需要用以下命令来实现:==经测试,这种方法好像根本行不通????==
当类中的属性没有传入值的时候,那么这个类变量是wsme.types.UnsetType
对象:
结果会返回True,因为此处的age为wsme.types.UnsetType
类型。
五. 使用wsme设置status_code
使用wsme默认返回的状态码为200、400和500。
如果将之前的例子做略微的修改,可以让其返回的状态值不一样:
在现在这个例子中,使用如上一样的curl命令,会发现返回的状态码变成了201
但是在平时的使用中,我们肯定需要根据不同的判断,返回不同的status_code,那怎么办呢?我们可以使用如下的方式去实现:
使用wsme.api.Response
在返回值的同时指定status_code
抛出wsme.exc.ClientSideError
错误的同时,指定错误原因及status_code
抛出自定义错误
,并且在自定义错误中指定错误原因及status_code
后面两种方式,是遇到错误的时候返回的
下面就看看例子中究竟是如何使用的:
该项目实现了用户的查找,添加和删除等(没有真正的结合数据库实现,只是一个demo)
项目的架构图如下:
本项目实现了以下几个功能:
GET /v1/users 获取所有用户的列表
POST /v1/users 创建一个用户
GET /v1/users/ 获取一个指定用户的详细信息
PUT /v1/users/ 修改一个指定用户的详细信息
DELETE /v1/users/ 删除一个指定用户
POST /v1/users//kill 杀死一个指定用户
api/app.py:
api/config.py:
api/expose.py:
该函数用来让API返回JSON格式的数据
api/controllers/root.py:
当URL中未指定版本号时,
_route
函数将版本号默认置为v1
api/controllers/v1/controller.py:
api/controllers/v1/users.py:
cmd/api.py:
运行该文件,即可开始监听
str
String
unicode
String
int
Number
float
Number
bool
Boolean
Decimal
String
date
String (YYYY-MM-DD)
time
String (hh:mm:ss)
datetime
String (YYYY-MM-DDThh:mm:ss)
Arrays
Array
None
null
Complex types
Object
200
成功
400
客户端输入出错(参数错误等等)
500
服务器端错误
get_one
Display one record.
GET /books/1
get_all
Display all records in a resource.
GET /books/
get
A combo of get_one and get_all.
GET /books/ 或 GET /books/1
new
Display a page to create a new resource.
GET /books/new
edit
Display a page to edit an existing resource.
GET /books/1/edit
post
Create a new record.
POST /books/
put
Update an existing record.
POST /books/1?_method=put 或 PUT /books/1
get_delete
Display a delete confirmation page.
GET /books/1/delete
delete
Delete an existing record.
POST /books/1?_method=delete 或 DELETE /books/1