基于python的REST框架eve测试与mongodb的数据操作

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

Eve是一款Python的REST API框架,用于构建和部署高可定制的、全功能的RESTful的Web服务。Eve是一个开源项目,遵循BSD开源协议,已在Python 2.6、2.7以及Python 3.3版本下进行了非常全面的测试。

特色


  • 强调REST

  • 非常全面的CRUD操作

  • 可自定义的资源端点

  • 自定义多个项目端点

  • 筛选和排序

  • 分页

  • HATEOAS

  • JSON和XML渲染

  • 条件请求

  • 数据完整性和并发控制

  • 多个添加操作

  • 数据验证

  • 可扩展的数据验证

  • 资源级缓存控制

  • 版本

  • 验证

  • CORS跨地资源共享

  • 默认情况下只读

  • 默认值

  • 预定义的数据库过滤器

  • 预测

  • 事件关联

  • 速率限制

  • MongoDB支持



和别的框架一样,咱们需要安装eve的模块

113532639.jpg



直接yum安装吧,我自己选择mongodb的时候,都会用10gen的。

cat /etc/yum.repos.d/10gen.repo

1
2
3
4
[10gen]
name=10gen Repository
baseurl=http: //downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck= 0


开始安装吧~

113307581.jpg



好了,咱们现在就测试下吧:

启动server.py还需要做的就是配上一个数据库、配置文件(默认是settings.py)、启动脚本来让API可以在线使用。总之,你会发现,配置和调优API是一件非常简单的事情。


server端

115007669.jpg

客户端

115032430.jpg


官方还推荐了一个eve demo

https://github.com/nicolaiarocci/eve-demo


115802876.jpg


demo里面有几个实例 ~

返回是可以定义的:

xml

1
curl -H  "Accept: application/xml"  -i  "http://127.0.0.1:5000/"


json

1
curl  - "Accept: application/json"  - "http://127.0.0.1:5000/"


121116936.jpg

在这定义规则啥的 ~

Here is how the complete people definition looks in our updated settings.pyfile:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
people = {
     'title'  tag used  in  item links. Defaults to the resource title minus
     # the  final , plural  's'  (works fine  in  most cases but not  for  'people' )
     'item_title' 'person' ,
     # by  default  the standard item entry point  is  defined  as
     '/people/<ObjectId>' . We leave it untouched, and we also enable an
     # additional read-only entry point. This way consumers can also perform
     # GET requests at  '/people/<lastname>' .
     'additional_lookup' : {
         'url' '[\w]+' ,
         'field' 'lastname'
     },
     # We choose to  override  global cache-control directives  for  this  resource.
     'cache_control' 'max-age=10,must-revalidate' ,
     'cache_expires' 10 ,
     # most global settings can be overridden at resource level
     'resource_methods' : [ 'GET' 'POST' ],
     'schema' : schema
}


插入数据~

1
curl -d  '[{"firstname": "rui", "lastname": "fengyun"}, {"firstname": "li", "lastname": "liying"}]'  -H  'Content-Type: application/json'   http: //127.0.0.1:5000/people


查询数据~

1
curl  - i http: / / eve - demo.herokuapp.com / people?where = { "lastname" "liying" }



124028547.jpg


我们从mongo的cli中瞅瞅,看看数据

125358837.jpg



In the above response, a Last-Modified header is included. It can be used later to retrieve only the items that have changed since:


1
curl -H  "If-Modified-Since: Wed, 05 Dec 2012 09:53:07 UTC"  -i http: //127.0.0.1:5000/people/



eve 其实在一定程度上可以理解为mongodb的http接口 就是redis的webdis一样的


类似mysql的取出lastname字段为Doe的数据

$ curl -i http://eve-demo.herokuapp.com/people?where={"lastname": "Doe"}


and the native Python syntax:


$ curl -i http://eve-demo.herokuapp.com/people?where=lastname=="Doe"


排序的方式


$ curl -i http://eve-demo.herokuapp.com/people?sort=[("lastname", -1)]


可以做出mongodb limit 的效果


$ curl -i http://eve-demo.herokuapp.com/people/?where={"lastaname": "Doe"}&sort=[("firstname",1)]&page=5


多次插入数据


$ curl -d 'item1={"firstname": "barack", "lastname": "obama"}' -d 'item2={"firstname": "mitt", "lastname": "romney"}' http://127.0.0.1/people


Response:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
     [
         "status" "OK" ,
         "updated" "Thu, 22 Nov 2012 15:22:27 UTC" ,
         "_id" "50ae43339fa12500024def5b" ,
         "_links" : { "self" : { "href" "eve-demo.herokuapp.com/people/50ae43339fa12500024def5b" "title" "person" }}
     ],
     [
         "status" "OK" ,
         "updated" "Thu, 22 Nov 2012 15:22:27 UTC" ,
         "_id" "50ae43339fa12500024def5c" ,
         "_links" : { "self" : { "href" "eve-demo.herokuapp.com/people/50ae43339fa12500024def5c" "title" "person" }}
     ]
}



总结: eve是个强大又可以扩展res框架,也可以把他用为mongodb的http接口 ~

我对他的理解还是有些片面,有时间再好好看看。




 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1325511 ,如需转载请自行联系原作者



相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
5天前
|
SQL 自然语言处理 数据库
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
|
2天前
|
人工智能 编解码 算法
如何在Python下实现摄像头|屏幕|AI视觉算法数据的RTMP直播推送
本文详细讲解了在Python环境下使用大牛直播SDK实现RTMP推流的过程。从技术背景到代码实现,涵盖Python生态优势、AI视觉算法应用、RTMP稳定性及跨平台支持等内容。通过丰富功能如音频编码、视频编码、实时预览等,结合实际代码示例,为开发者提供完整指南。同时探讨C接口转换Python时的注意事项,包括数据类型映射、内存管理、回调函数等关键点。最终总结Python在RTMP推流与AI视觉算法结合中的重要性与前景,为行业应用带来便利与革新。
|
7天前
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
21天前
|
数据采集 XML 存储
Python爬虫实战:一键采集电商数据,掌握市场动态!
这个爬虫还挺实用,不光能爬电商数据,改改解析规则,啥数据都能爬。写爬虫最重要的是要有耐心,遇到问题别着急,慢慢调试就成。代码写好了,运行起来那叫一个爽,分分钟几千条数据到手。
|
21天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
21天前
|
存储 JSON API
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。
|
1天前
|
Web App开发 数据采集 前端开发
Python + Chrome 爬虫:如何抓取 AJAX 动态加载数据?
Python + Chrome 爬虫:如何抓取 AJAX 动态加载数据?
|
6天前
|
存储 JSON NoSQL
微服务——MongoDB的数据模型
MongoDB采用文档(document)作为最小存储单位,类似关系型数据库中的行,使用BSON(Binary-JSON)格式存储数据。BSON是JSON的二进制扩展,支持内嵌文档和数组,新增了如Date、BinData等特殊数据类型,具有轻量、高效、可遍历的特点,适合非结构化与结构化数据存储。其灵活性高,但空间利用率略低。BSON数据类型包括string、integer、boolean等基本类型及date、object id等扩展类型。
18 0
|
6天前
|
存储 NoSQL MongoDB
微服务——MongoDB常用命令1——数据库操作
本节介绍了 MongoDB 中数据库的选择、创建与删除操作。使用 `use 数据库名称` 可选择或创建数据库,若数据库不存在则自动创建。通过 `show dbs` 或 `show databases` 查看所有可访问的数据库,用 `db` 命令查看当前数据库。注意,集合仅在插入数据后才会真正创建。数据库命名需遵循 UTF-8 格式,避免特殊字符,长度不超过 64 字节,且部分名称如 `admin`、`local` 和 `config` 为系统保留。删除数据库可通过 `db.dropDatabase()` 实现,主要用于移除已持久化的数据库。
32 0
|
6天前
|
存储 NoSQL MongoDB
从 MongoDB 到 时序数据库 TDengine,沃太能源实现 18 倍写入性能提升
沃太能源是国内领先储能设备生产厂商,数十万储能终端遍布世界各地。此前使用 MongoDB 存储时序数据,但随着设备测点增加,MongoDB 在存储效率、写入性能、查询性能等方面暴露出短板。经过对比,沃太能源选择了专业时序数据库 TDengine,生产效能显著提升:整体上,数据压缩率超 10 倍、写入性能提升 18 倍,查询在特定场景上也实现了数倍的提升。同时减少了技术架构复杂度,实现了零代码数据接入。本文将对 TDengine 在沃太能源的应用情况进行详解。
22 0