В канун Python, как я могу отметить параметр запроса "размер" в качестве псевдонима для "max_results"
Я разрабатываю API с использованием Python-Eve и люблю его. До сих пор я мог делать все, используя различные доступные крючки. Однако теперь я хочу поддержать параметр запроса "size" в качестве псевдонима для "max_results" (из соображений обратной совместимости, если это имеет значение).
Я пытался создать ловушку on_pre_GET, но обнаружил, что request.args нельзя изменить
def pre_get_api_sugar(resource, request, lookup):
"""Event that adds syntactic sugar to the API calls.
"""
# Support "size" as alias for "max_results"
args = request.args
if 'max_results' not in args and 'size' in args:
args['max_results'] = args['size']
app.on_pre_GET += pre_get_api_sugar
Это дает TypeError: 'ImmutableMultiDict' objects are immutable
Кажется, что манипулирование параметрами запроса для настройки API должно быть чем-то выполнимым, если не простым. Пока что я не вижу способа сделать это. Есть ли для этого фляги, которые я должен использовать? Что мне не хватает?
Спасибо!
1 ответ
ОБНОВИТЬ
Настраиваемые параметры запроса были добавлены в Eve 0.5-dev, так что теперь вы можете установить
QUERY_MAX_RESULTS = 'size'
переопределить настройку по умолчанию (которая по-прежнему max_results
). Аналогичные настройки были добавлены для других параметров запроса, таких как where
, sort
, projection
, page
, embedded
,
ОРИГИНАЛЬНЫЙ ОТВЕТ Как вы говорите, Flask (и Eve) используют неизменяемый объект для хранения запроса args
, Тем не менее, вы можете использовать parameter_storage_class
чтобы изменить класс по умолчанию:
the class to use for args and form. The default is an ImmutableMultiDict which supports multiple
values per key. alternatively it makes sense to use an ImmutableOrderedMultiDict which preserves
order or a ImmutableDict which is the fastest but only remembers the last key. It is also possible
to use mutable structures, **but this is not recommended**.
Акцент на последнем предложении мой.
При этом, вероятно, хорошей идеей будет позволить разработчикам API настраивать диалект запросов своих API, поэтому я думаю, что собираюсь добавить новые настройки (что-то вроде QUERY_MAX_RESULTS
) которое по умолчанию соответствует текущим значениям, но может быть легко изменено. Я обновлю ответ, когда он будет готов (вы можете открыть тикет, чтобы он не потерялся).