Безопасно ли переименовывать поле в Thrift IDL? - PullRequest
0 голосов
/ 18 октября 2018

Безопасно ли отказываться от поля в Thrift путем переименования, если оно больше не используется клиентами?Насколько я понимаю, это должно работать, пока мы не меняем тип.Например

С

struct FooResponse {
  1: optional i32 foo
}

К

struct FooResponse {
  1: optional i32 fooDeprecated
}

1 Ответ

0 голосов
/ 21 октября 2018

Да, это на 100% безопасно.Thrift имеет дело только с внутренними идентификаторами полей.Имена структуры, а также имена аргументов метода используются для генерации имен полей только в сгенерированном коде.Они даже не идут по проводам.

Кроме того, это рекомендуемый способ устаревания полей.Даже в случае, когда поле полностью удалено, его следует закомментировать, но оставить его в IDL, чтобы предотвратить случайное повторное использование числового идентификатора поля.

Единственное место, где имена используются какИмена с вызовами методов службы .Методы не имеют числовых идентификаторов, в этом случае используется имя.Изменение имени фактически объявляет новый метод.

TL; DR

С технической точки зрения

  • Все имена в Thrift IDL могут быть изменены по мере необходимости, кроме...
  • Имена методов не могут быть изменены (если вы не знаете, что делаете)

Что касается совместимости на уровне кода, любой потребитель вашего API будет высоко ценить его, если вы избегаете слишком частого изменения имен полей.

См. также

Хорошее прочтение по этой теме: "Отсутствующее руководство" Дивакера Гупты .В нем также подробно рассматриваются плюсы и минусы optional и required, которые также следует учитывать перед удалением полей - в противном случае вы можете столкнуться с нарушением совместимости IDL.

...