python RESTful API框架:Eve 快速入门

Eve是一款Python的REST API框架,用于发布高可定制的、全功能的RESTful的Web服务,帮你轻松创建和部署API,本文翻译自Eve官方网站:

Eve 快速入门: 渴望开始吗?这个页面将提供Eve一个很好的介绍。在这之前假设: 你已经安装好了Eve。如果你还没有,可以点击到页面。 已经安装了MongoDB。 并且MongoDB 已经运行了。 一个最小的应用 一个最小的Eve应用,看起来是这样的:

from eve import Eveapp = Eve()if __name__ == ‘__main__’:app.run()

然后保存为run.py,接着创建一个新的文档包含已经内容:

DOMAIN = {‘people’: {}}

接着保存为settings.py,并且放在run.py相同的文件夹下。 这是Eve的配置文件,一个标准的python模块,这个文件告诉了Eve你的API包含了一个可访问的资源,people。

现在你已经准备好启动你的API了。

$ python run.py * Running on http://127.0.0.1:5000/

现在你已经可以使用这个API了:

$ curl -i http://127.0.0.1:5000HTTP/1.0 200 OKContent-Type: application/jsonContent-Length: 82Server: Eve/Werkzeug/: Wed, 27 Mar 2013 16:06:44 GMT

恭喜,你的GET请求已经得到了一个很好的响应返回,让我们看看这个有效负载:

{“_links”: {“child”: [{“href”: “people”,”title”: “people”}]}}

API接入点遵循着HATEOAS(超媒体即状态应用引擎)原则和规定API资源访问信息,在我们的例子中只提供了一个可用child的资源,这里是people。

现在尝试请求people:

$ curl http://127.0.0.1:5000/people{“_items”: [],”_links”: {“self”: {“href”: “people”,”title”: “people”},”parent”: {“href”: “/”,”title”: “home”}}}

这次我们也得到了一个_items 表,_links 相对于是被访问的资源,所以你得到了父资源链接(主页)和资源本身。

默认情况下Eve 的APIs是只读的:

$ curl -X DELETE :5000/people>Method Not Allowed</h1><p>The method DELETE is not allowed for the requested URL.</p>

这是因为我们还没有在settings.py中规定任何的数据库细节,所以Eve会在无法索引到任何people表实际的内容(甚至可能不存在)时无缝得提供一个空的资源,因为我们不想让API的使用者down(不知道译成什么好…)。 插入数据库 让我们通过增加下面几行到setting.py来连接数据库:

# 根据编辑需要,让我们使用本地mongod实例# 需要注意的是MONGO_HOST 和 MONGO_PORT很有可能会无效,因为默认存在本地系统的值。MONGO_HOST = ‘localhost’MONGO_PORT = 27017MONGO_USERNAME = ‘user’MONGO_PASSWORD = ‘user’MONGO_DBNAME = ‘apitest’

由于MongoDB便捷性,我们不需要真正得去创建数据表,实际上我们甚至不需要创建数据库:GET 请求空的或不存在的数据库是会返回正确(200 OK会得到一个空集合(表));DELETE/PATCH/PUT会得到适当的响应(404 Not Found),POST请求会创建所需的数据库或表。然而这样的自动管理的数据库会执行得非常差,因为缺少了索引和任何形式的优化。 一个更复杂的应用 到目前为止我们的API都是只读的,让我们能够全面得进行CRUD(增加(Create)、读取(Retrieve)(重新得到数据)、更新(Update)和删除(Delete))运作:

RESOURCE_METHODS = [‘GET’, ‘POST’, ‘DELETE’]# 允许 读 (GET), 编辑 (PATCH), 替换 (PUT) 和删除 个人项目 items (默认访问项目是只读).# ITEM 项目ITEM_METHODS = [‘GET’, ‘PATCH’, ‘PUT’, ‘DELETE’]

当ITEM_METHODS 列表中的方法授权给项目端点(/people/)时RESOURCE_METHODS表中的方法才授权资源端点(/people)。都设置则会有一个全局作用域并使所有的端点都有效。然而你也可以启用或者禁用单个端点的HTTP方法等级,我们很快就能看到。 由于我们允许了编辑了,我们也希望让数据可以进行合适验证。让我们为people资源定义一种模式。

schema = { # 模式定义, 基于 Cerberus 语法. 核实 Cerberus 项目细节在# (https://github.com/nicolaiarocci/cerberus)。’firstname’: {‘type’: ‘string’,’minlength’: 1,’maxlength’: 10,},’lastname’: {‘type’: ‘string’,’minlength’: 1,’maxlength’: 15,’required’: True,# 这个DEMO的目的是讨论硬约束# ‘lastname’ 是一个 API 条目标记, 所以我们需要它独一无二。’unique’: True,},# ‘role’ 是一张表,和只能是allowed中的值’role’: {‘type’: ‘list’,’allowed’: [“author”, “contributor”, “copy”],},# 一种嵌入式固定类型的字典。’location’: {‘type’: ‘dict’,’schema’: {‘address’: {‘type’: ‘string’},’city’: {‘type’: ‘string’}},},’born’: {‘type’: ‘datetime’,},}

更多的信息验证请看 。

现在让我们讨论下我们想进一步定制端点的people,我们想: 设置一项的标题为person 增加一个额外的在/people/ 覆盖默认 禁用people 端点的DELETE(设置全局变量)

接受失败等于回归真实的自我,

python RESTful API框架:Eve 快速入门

相关文章:

你感兴趣的文章:

标签云: