0

我有以下 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"
        },
        ...
4

1 回答 1

0

所以基本上你是在返回假货,在你的数据库中确实不存在,期望客户端稍后存储它们?为什么要提供指向尚不存在的东西的链接?无论如何,文档链接上的以下 GET 将实现 404。

您可能应该使用这些数据预先填充您的数据库。on_fetch然后链接就会在那里,它们将是合法的(它们会起作用),并且您无需使用钩子来玩花样。

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

于 2014-02-22T07:01:25.837 回答