Python-Eve:多个额外查找

时间:2015-12-06 22:02:38

标签: python eve

使用additional lookups我可以通过文档中所述的辅助端点访问所需端点的给定文档:

  

除了默认的标准项目端点   /<resource>/<ID_FIELD_value>,您可以选择定义辅助,   只读,端点如/<resource>/<person_name>。你是这样做的   定义由两个项字段和url组成的字典。前者   是用于查找的字段的名称。如果是字段类型(如   在资源模式中定义的)是一个字符串,然后你输入一个URL规则   在网址中。如果它是一个整数,那么你只需省略url   自动处理。有关用法示例,请参阅下面的代码段   这个功能。

所以回顾一下文档中给出的例子:

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': 'regex("[\w]+")',
        'field': 'lastname'
    },

    # We choose to override global cache-control directives for this resource.
    'cache_control': 'max-age=10,must-revalidate',
    'cache_expires': 10,

    # we only allow GET and POST at this resource endpoint.
    'resource_methods': ['GET', 'POST'],
}

由于lastname被设置为辅助端点,因此我可以通过文档ID(默认值)或存储文档的people键访问lastname端点

假设每个人都有唯一的lastname和唯一的nickname。是否有可能定义多个附加查询以便通过lastnamenickname进行访问?

然而,这个例子只是为了表明我在寻找什么。在我的实际用例中,我有一个包含不同产品信息的数据库,我希望能够通过英语和德语标题访问这些信息,这样我就能保证所有额外的查找都会产生唯一的文档密钥。

1 个答案:

答案 0 :(得分:3)

您不能向同一个端点添加多个附加查找。但是,您可以使用多个端点消耗相同的数据源。

  

多个API端点可以定位到同一个数据库集合。例如,您可以设置/admins/users来读取和写入数据库中的同一个人集合。

引用来自Advanced Datasource Patterns。所以你可以简单地拥有/books/english/<title>/books/german/<title>。两个端点仍将使用相同的数据库集合。

根据您的架构设计,您可能还会转到Sub Resources路径并设置/products/<language>/books/<title>之类的内容。