如何在on_fetch挂钩期间添加数据并包含HATEOAS信息?

时间:2014-02-21 19:23:33

标签: python mongodb eve

我有以下on_fetch挂钩,它在第一次检索资源之前填充资源:

# bootstrap resources with default data if it's not already there
def before_returning_resource(resource, documents):
    if resource == 'vlans' or resource == 'switches':
        if not documents:
            r = app.data.driver.db[resource]
            filename = 'bootstrap_' + resource + '.json'
            with open(os.path.join(script_dir, filename), 'r') as f:
                to_insert = json.loads(f.read())
            r.insert(to_insert)
            documents.extend(to_insert)

在第一次尝试加载集合时,它返回的数据不包含额外的HATEOAS内容,如_links等,因为它在插入时添加,我现在必须返回一些东西。我重新加载后,东西就在那里。关于如何在第一次请求期间重新检索数据的任何想法,以便它包含正常请求中的所有内容?

第一个请求示例:

{
    "_items": [
        {
            "_id": "5307a7301f72fa82ae83474a",
            "ip_address": "10.50.159.196",
            "name": "RCG 1G Core Switch",
            "dns": "switch196",
            "transport": "telnet"
        },
        {
            "_id": "5307a7301f72fa82ae83474b",
            "ip_address": "10.47.152.2",
            "name": "Rack E1 sw1",
            "dns": "re1-sw1",
            "transport": "telnet"
        },
        ...

后续请求示例:

{
    "_items": [
        {
            "_updated": "Thu, 01 Jan 1970 00:00:00 GMT",
            "name": "RCG 1G Core Switch",
            "_links": {
                "self": {
                    "href": "127.0.0.1:5000/switches/5307a7301f72fa82ae83474a",
                    "title": "Switche"
                }
            },
            "dns": "switch196",
            "_created": "Thu, 01 Jan 1970 00:00:00 GMT",
            "_id": "5307a7301f72fa82ae83474a",
            "ip_address": "10.50.159.196",
            "_etag": "4359b74209189b0bbbbfd4b92e647d84d10ede47",
            "transport": "telnet"
        },
        ...

1 个答案:

答案 0 :(得分:0)

所以基本上你要归还假的物品,你的数据库中真的不存在,希望客户以后再存储它们?你为什么要提供一些不存在的东西的链接?无论如何,文档链接上的以下GET将达到404.

您可能应该使用此数据预先填充数据库。这些链接将在那里,它们将是合法的(它们可以工作),你不需要使用on_fetch钩子来玩弄。

此外,虽然您可以在钩子中伪造90%的文档链接,但是在存储新文档后,您无法知道新文档将被分配到的真实object_id

相关问题