现有数据库驱动系统的自动化restapi
sandman的Python项目详细描述
桑德曼
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=================73616e646d616e2e706e673f6272616e63683d6465656c6f70"/> <<<<<<<<<<<<<<<<
<<<<<<<<<
主页
在网上访问sandman的主页: sandman.io
讨论
想找个地方问关于桑德曼的问题吗?查看 桑德曼-讨论和桑德曼-用户论坛!
文档
"让事情休息"。有一个您想要的现有数据库 通过rest api公开?通常,你得写很多 你正在使用的orm的样板代码,然后将其集成到一些 网络框架。
我不想写样板书。
下面是从现有的 使用Sandman数据库 啊!
就这样。 sandman 然后将执行以下操作:
- 连接到数据库并反思其内容
- 创建并启动rest api服务
- 创建HTML管理界面
- 打开浏览器,进入管理界面
支持的数据库
默认情况下,sandman支持到同一组 数据库如sqlalchemy。就此而言 写作,包括:
- mysql(mariadb)
- PostgreSQL
- sqlite
- 甲骨文
- Microsoft SQL Server
- 火鸟
- 小雨
- Sybase
- IBM DB2
- SAP Sybase SQL Anywhere
- 货币数据库
身份验证
从0.9.3版起, sandman 完全支持http basic 身份验证。有关详细信息,请参阅文档。
幕后
sandmanctl 实际上只是一个简单的包装器,它包含以下内容:
啊!你甚至不需要告诉"sandman"你的数据库有哪些表 包含。 只需指向您的数据库并让它完成所有操作 举重
让我们开始新的服务并提出请求。当我们在I的时候T,让 通过指定 过滤项:
> python runserver.py & * Running on http://127.0.0.1:5000/ > curl GET "http://localhost:5000/artists?Name=AC/DC"
...{"resources":[{"ArtistId":1,"Name":"AC/DC","links":[{"rel":"self","uri":"/artists/1"}]}]}
所有这些,包括过滤/搜索,都是自动可用的 从那五行代码中。
哦,这还不够吗?您还需要一个django风格的管理界面 自动生成?好的。你可能已经注意到当你跑 runserver.py 弹出一个浏览器窗口。现在该走了 看看这个。你会发现这是django风格的管理界面 你一直在烦我,看起来像这样:
< div >管理界面awesomesauce屏幕截图
(如果要禁用浏览器每次自动打开 sandman 开始,用 browser=false调用 activate )
如果您想指定 sandman 应该生成的特定表 有空,你是怎么做到的?用这首小曲:
fromsandman.modelimportregister,ModelclassArtist(Model):__tablename__='Artist'classAlbum(Model):__tablename__='Album'classPlaylist(Model):__tablename__='Playlist'register((Artist,Album,Playlist))
如果您想为端点添加自定义逻辑呢?或者改变 终结点名称?或者更改顶级json对象名?或添加 验证?全部支持。这里有一个"奇特"的类定义:
classStyle(Model):"""Model mapped to the "Genre" table Has a custom endpoint ("styles" rather than the default, "genres"). Only supports HTTP methods specified. Has a custom validator for the GET method. """__tablename__='Genre'__endpoint__='styles'__methods__=('GET','DELETE')__top_level_json_name__='Genres'@staticmethoddefvalidate_GET(resource=None):"""Return False if the request should not be processed. :param resource: resource related to current request :type resource: :class:`sandman.model.Model` or None """ifisinstance(resource,list):returnTrueelifresourceandresource.GenreId==1:returnFalsereturnTrue
对于sandman,需要零样板代码。实际上,使用 sandmanctl , 根本不需要代码。现有数据库 结构和模式被反省,数据库表神奇地 获取restful api和管理接口。对于每张桌子, sandman 创建:
- 正确的端点
-
支持一组可配置的http动词
- 发布
- 补丁
- 删除
放 - 自动链接的适当响应
- 表中的外键由link表示
- 只需在上定义 validate\lt;method>; 方法即可自定义验证 您的型号
- 通过设置 方法属性
- 通过设置 端点方法自定义模型端点
- 基本上是一个基于hateoas的服务,位于数据库前面
尚在积极开发中,但在任何 一个简单的事实造成的环境:
``sandman``除非添加或更改 记录你自己。它不会向现有数据库中添加额外的表,并且 不需要更改任何现有表。如果你开始 `` sandman``,使用它通过curl浏览数据库,然后停止 `` sandman``,你的数据库将处于与以前完全相同的状态 开始之前。
安装
pip安装sandman
示例应用程序
查看 sandman/test 目录。找到的应用程序 这里使用了chinook SQL数据库示例。