У меня есть API, работающий в Python-Eve, и у меня есть настройка отношения от одного ключа в одной коллекции к объекту в другой коллекции (таким образом, тип ключа - отношение / ObjectID). Моя проблема в том, что в течение некоторого периода времени это отношение было создано на основе других ключей («имя» вместо «ObjectID»), и половина компании написала автоматизацию с учетом этого. Поэтому они используют
"?where={"region":"name_here"}
и другая половина
"?where={"region":"objectID_here"}
.
Меня спросили, возможно ли заставить их обоих работать.
Насколько я вижу - это невозможно сделать в определении схемы (чтобы иметь отношение к двум ключам), поэтому я попытался изменить запросы GET на лету (сделать что-то вроде "if {"region"}
это строка вместо ObjectID затем измените его на лету, чтобы он был ObjectID ". Я пытался перехватить событие app.on_pre_GET, но похоже, что он не может делать то, что я хочу. Я пытался использовать" lookup "в перехватчике GET, но он не работает при отправке? предложение (или когда где ничего не совпадает?), поэтому я попытался изменить сам URL, но похоже, что невозможно обновить список аргументов или URL (просто чтобы получить, но не сохранить обратно?)
'region':{
'type':'objectid',
'data_relation':{
'resource':'regions',
'field':'_id',
'embeddable': True
},
}
Я хотел бы иметь возможность использовать? предложение where с двумя возможными значениями для одного и того же ключа:
GET apiurl:/vms?where={"region":"some_region_name"}
GET apiurl:/vms?where={"region":"5ceeef108941633fc78cdef1"}
(оба запроса должны возвращать один и тот же результат)