У меня есть приложение Eve, публикующее простой интерфейс только для чтения (GET). Он взаимодействует с коллекцией MongoDB под названием centroids
, в которой есть такие документы, как:
[
{
"name":"kachina chasmata",
"location":{
"type":"Point",
"coordinates":[-116.65,-32.6]
},
"body":"ariel"
},
{
"name":"hokusai",
"location":{
"type":"Point",
"coordinates":[16.65,57.84]
},
"body":"mercury"
},
{
"name":"cañas",
"location":{
"type":"Point",
"coordinates":[89.86,-31.188]
},
"body":"mars"
},
{
"name":"anseris cavus",
"location":{
"type":"Point",
"coordinates":[95.5,-29.708]
},
"body":"mars"
}
]
В настоящее время настройки (Eve) объявляют DOMAIN
следующим образом:
crater = {
'hateoas': False,
'item_title': 'crater centroid',
'url': 'centroid/<regex("[\w]+"):body>/<regex("[\w ]+"):name>',
'datasource': {
'projection': {'name': 1, 'body': 1, 'location.coordinates': 1}
}
}
DOMAIN = {
'centroids': crater,
}
Который будет успешно отвечать на запросы вида http://hostname/centroid/<body>/<name>
. Внутри MongoDB это представляет запрос типа: db.centroids.find({body:<body>, name:<name>})
.
Я также хотел бы предложить конечную точку для всех документов данного body
. То есть запрос к http://hostname/centroids/<body>
ответит на список всех документов body==<body>
: db.centroids.find({body:<body>})
.
Как это сделать?
Я попытался включить список правил в ключ DOMAIN
centroids
(имя коллекции базы данных), как показано ниже:
crater = {
...
}
body = {
'item_title': 'body craters',
'url': 'centroids/<regex("[\w]+"):body>'
}
DOMAIN = {
'centroids': [crater, body],
}
но не работал...
AttributeError: 'list' object has no attribute 'setdefault'
http://hostname/centroids?where={"body": <body>}
? - person gcw   schedule 17.07.2019DOMAIN = {'centroids': {}}
. В таком случае я мог бы использоватьhttp://hostname/centroids?where={"body":"mars","name":"cañas"}
. Ключевым моментом здесь является то, что я хочу предложить своему пользователю чистый интерфейс, созданный простыми конечными точками пути, не зависящими от базы данных. Например:http://hostname/centroids/mars
илиhttp://hostname/centroids/mars/cañas
. - person Brandt   schedule 18.07.2019