没有项目描述

ripozo-oasis的Python项目详细描述


#如何在不到10行代码的情况下将数据库转换为restful api

只需10行代码即可将数据库转换为restful api的包。

你自己。

根据
[sqlalchemy engine配置文档](http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html)传递数据库uri。
格式为"dialect+driver://username:password@host:port/database_name"。
该驱动程序是可选的,只有在您不希望时才需要使用默认值。如果出现导入错误
,则需要为数据库安装特定的驱动程序。例如,使用mysql,您需要
来运行``pip install mysql python``或者对于postgresql,您需要运行``pip install psycopg2``。

假设我们有两个表、组和用户。

``javascript
{
"_embedded":{},
"_links":{
"group":{
"ref":""/group/"
},
"user":{
"ref":"/user/"
},
"self":{
"ref":"http://localhost:5000/"
}
}
}
```



"类":[
"
],
"链接":[
{
"Href":"http://localhost:5000/",
"rel":[
"self"
]
},
{
"Href":"http://localhost:5000/group/",
"rel":[
"group\u list"
]
},
{
"ref":"http://localhost:5000/group/<;id>;/",
"rel":[
"group"
]
},
{
"ref":"http://localhost:5000/user/",
"rel":[
"user嫒list"
]
},
{
"ref":"http://localhost:5000/user/<;id>;/",
"rel":[
"user"
]
}
],
"actions":[
{
"fields":[],
"ref":"http://localhost:5000/",
"title":"所有选项",
"方法":"选项",
"名称":"所有选项"
}
],
"属性":{}
}
````

登录`/user/<;id>;/``
返回单个用户等。

【Flask Ripozo】(https://github.com/vertical knowledge/flask ripozo)
和【ripozo sqlalchemy】(https://github.com/vertical knowledge/ripozo sqlalchemy)。ripozo
独立于web框架,这意味着您可以在任何所需的web框架中使用它。
官方集成包括[flask ripozo](https://github.com/vertical knowledge/flask ripozo)
和[django ripozo](https://github.com/vertical-knowledge/django-ripozo)以及更多内容。
此外,还可以构建无缝的restfulapi的,ripozo可以公开[hypermedia/hateoas](http://roy.gbiv.com/untangled/2008/restapi必须是超文本驱动的)
驱动的api,不需要额外的努力*



第一步是设置我们的[烧瓶](https://github.com/mitsuhiko/flask)应用程序。
您可以使用[django ripozo](https://github.com/vertical-knowledge/django-ripozo)
与本教程的偏差最小。
很遗憾,启动Django项目需要10行以上的代码。

sqlalchemy

[sqlalchemy](http://www.sqlalchemy.org/)是我另一个最喜欢的工具。它提供了一个优秀的orm,允许我们从现有数据库生成orm,而无需额外的工作。我们只需按照预期的格式向sqlalchemy传递一个数据库uri。有关详细信息,请参见[引擎配置文档](http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html)
。铊;dr这是通用格式:
`'dialect+driver://username:password@host:port/database\u name`

``python
from sqlalchemy import create\u engine
from sqlalchemy.ext.automap import automap\u base

database\u uri='mysql://localhost:3306/mydatabase'
engine=create_engine(database_uri)
base=automap_base()
base.prepare(engine,reflect=true)
``````

这创建了一个orm,在这里我们可以将数据库中的表作为python对象访问。

需要将
[ripozo](https://github.com/vertical-knowledge/ripozo)绑定到烧瓶和sqlalchemy。

``bash
pip从烧瓶安装ripozo烧瓶ripozo ripozo sqlalchemy
`````
``python
ripozo戋sqlalchemy import scopedsessionhandler

在本例中,我们选择了hal和siren协议。
dispatcher.register_adapters(adapters.sirenadapter,adapters.haladapter)
创建一个会话处理程序来干净地处理数据库事务和清理
session\u handler=scopedsessionhandler(engine)
````

我们可以将数据库公开为一个restful api。

`` python
=[创建资源(模型、会话处理程序,append_slash=true)对于base.classes中的模型,
向适配器注册资源以在api中公开它们。
dispatcher.register_resources(*resources)

此外,您还可以使用一个非常灵活的声明性、基于类的实现。事实上,
"create_u resource"方法使用的是隐藏的声明性实现。

让我们把它们放在一个函数中。


``python
from flask import flask
from flask\ripozo import flaskdispatcher
from ripozo import adapters
from ripozo\u sqlalchemy import scopedsessionhandler,从sqlalchemy.ext.automap导入automap-base
从sqlalchemy导入创建引擎



def-create-app(database-uri):
app=flask(


engine=create-engine(database-uri)
base=automap-base()
base.prepare(engine,reflect=true)

dispatcher=flaskdispatcher(app)
dispatcher.register_adapter(adapters.haladapter,adapters.sirenadapter)
session handler=scopedsessionhandler(engine)

resources=[创建资源(model,session_handler,在base.classes]
dispatcher.register_resources(*resources)

```

>中为模型追加斜杠(true),就像我们将数据库公开为restful api一样。另外,
因为这是[ripozo](https://github.com/vertical knowledge/ripozo),如果一个表
与另一个表有关系,则会自动生成到相应行/资源的链接。例如,假设一个用户表与一个组表有多对一的关系。
当我们转到一个用户的端点时,我们将获得一个链接到关联组终结点的完全限定URL。




您可以包括身份验证和授权、其他端点等等。
[ripozo](https://github.com/vertical-knowledge/ripozo)的设计是灵活的,同时也是高效的。它提供快捷方式
,同时重视可扩展性。它比任何其他超媒体/hateoas restful框架释放出更多的灵活性和功能。里波佐:更少的努力,更好的API。
BR/>

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在java中模拟按键?   尽管元素存在,但HtmlUnit中的java ElementNotFoundException   在Java中,长双精度并发写入不是原子的吗?   java如何在另一个对象数组中打印对象的int值?   java在显示或更改视图后执行一些代码   java JFR:读取时发生OutOfMemoryError。jfr文件   java Android助手检查是否购买   java这种设计模式的好处是什么?   Weblogic 10.3中针对托管服务器的java部署问题   java如何获取字符串。在编译时投诉的格式   声明字符串数组时发生java错误   java JPA在多个并行线程中从表中删除时发生死锁   java Android:在按钮动画之后启动活动   java并发与JMS主题在春季   使用Lucene spatial search/DateRangePrefixTree进行java日期范围查询?   java可选接口问题   JavaDbUnit没有在每个方法之后清洗和插入数据库,所以测试不是独立的   java在IAIK PKCS11包装器中一对私钥和证书如何匹配?