Прописать в схеме запросов/ответов актуальные default-значения
Пример ситуации в коде:
class GetUpdatesRequest(BaseModel):
allowed_updates: list[str] | None = Field(
default=None,
description=dedent("""\
Optional. Specify a list of the update types you want your bot
to receive. For example, specify
["message", "edited_channel_post", "callback_query"] to only
receive updates of these types.
See https://core.telegram.org/bots/api#update for a complete list
of available update types. Specify an empty list to receive all
update types except chat_member, message_reaction, and
message_reaction_count (default). If not specified, the previous
setting will be used. Please note that this parameter doesn't
affect updates created before the call to the getUpdates, so
unwanted updates may be received for a short period of time.
"""),
)
О значении default-значений приходится узнавать из description. Вместо этого можно было бы указать дефолтные настройки в default и попутно отказаться от None в поле. В теории, это может упростить прикладной код и сама схема запроса станет проще для понимания.
Ситуация встречается в этих схемах:
SetWebhookRequestGetUpdatesRequest
Другая типичная ситуация -- когда поле разрешает значения двух типов list[str] и None, а в прикладном коде было бы удобнее оставить только списки, заменив None на пустой список [].
Возможный минус такого значения -- это дополнительный набор дефолтных настроек, который живёт в коде библиотеки в дополнение к дефолтным настройкам на стороне сервера Telegram. В теории, это может привести к конфликту настроек. Также потеряется возможность отправлять в API запросы без поля allowed_updates.
Сложно сказать насколько эти ограничения приемлемы... Например, если использовать библиотеку Tg API внутри Tg Flood Limiter, то может оказаться важным сохранить данные пользователя без изменений в ходе процесса сериализации-десериализации. Пустые поля не должны по ходу дела заменяться на дефолтные значения.