#python #rest #flask #rate-limiting #connexion
Вопрос:
Я создаю REST API, используя Flask и connexion. (Python)
Я добавляю api в приложение connexion, используя файл swagger.yml, содержащий определения всех конечных точек, методов и т. Д…
Вопрос в том, как я могу добавить ограничение скорости для определенного ресурса/маршрута/вызова ?
Кажется, я не могу найти это в документации.
Спасибо.
Ответ №1:
Вы можете использовать заголовки HTTP X-Rate-Limit-* вместе с кодом состояния http 429.
Это практически выглядит как в openapi:
....
responses:
"200":
description: Success response
content:
application/json:
schema:
$ref: "#/components/schemas/YourResponseModel"
headers:
"X-Rate-Limit-Limit": {
"description": "The number of allowed requests in the current period",
"schema": {
"type": "integer"
}
} ,
"X-Rate-Limit-Remaining": {
"description": "The number of remaining requests in the current period",
"schema": {
"type": "integer"
}
},
"X-Rate-Limit-Reset": {
"description": "The number of seconds left in the current period",
"schema": {
"type": "integer"
}
}
"429":
description: Too many requests
content:
application/json:
schema:
$ref: "#/components/schemas/ErrorMessageResponse"
....
Комментарии:
1. Но где мне точно установить лимит запросов ? Потому что, если я правильно понял, то, что вы написали, только проиллюстрирует ограничение скорости в заголовках ответа.
2. Возможно, я неправильно понимаю, что вы ищете, но ограничение скорости в основном является инструментом для поставщика/сервера для защиты его базовой инфраструктуры. Это означает, что не потребитель, который звонит в службу, установит ограничение скорости, а сервер/провайдер укажет вызывающему абоненту, каков предел скорости в течение определенного периода времени (X-Предел скорости-Предел), после вызова, сколько осталось от лимита, выделенного для вызывающего абонента (X-Оставшийся предел скорости), и когда этот предел скорости будет сброшен (X-Предел скорости-Сброс) до потребляемого максимума. Надеюсь, это разъяснение поможет.
3. Кроме того, поставщик может предоставить конечную точку клиентам, чтобы получить текущее состояние ограничений скорости, аналогично, например. Это делает GitHub. Видишь docs.github.com/en/rest/reference/rate-limit конечная точка GET /rate_limit.
4. Спасибо за объяснение. Я уже знаю это. Я имел в виду, что я поставщик услуг, верно ? Я разрабатываю API и все конечные точки, используя модуль подключения python. Вопрос в том, как установить ограничения скорости для определенных конечных точек ? Поскольку api в основном определен в . Файл YAML.
5. Еще одна вещь с точки зрения инфраструктуры: обычно ограничение скорости не является обязанностью внутренней службы поставщика (которую вы хотели бы создать), но, например. шлюз API, который отвечает за функцию дроссельной заслонки для конечных точек. См., например, документ AWS для этого случая: docs.aws.amazon.com/apigateway/latest/developerguide/…