Измените запрос GET с? Где = перед его выполнением или сделайте двойное отношение - PullRequest
1 голос
/ 30 мая 2019

У меня есть 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"}

(оба запроса должны возвращать один и тот же результат)

...