В Dwarf Fortress борода дварфа каждый день увеличивается на 1 единицу длины. Фронтенд запросом API получил JSON, увеличил поле beard на +1 и отправил его обратно. Но по правилам длина бороды не может превышать 1000 единиц. Где её контролировать?
Конечно, на сервере валидация обязательно нужна, но лучше всего, чтобы она была везде.
Что легче: добавить доп.проверку бороды на фронте, или дополнительно парсить ответ сервера на предмет ошибки, если с бородой пошло "что-то" (что?) не так? Понятно, что магические числа вроде 1000 это совсем плохо, поэтому можно добавить запрос по конфигурационным настройкам, и т.п.
Проблема в том, что если клиент написан не на JavaScript, а на другом языке, где нету нативной поддержки JSON (без "ручной" сериализации/десериализации) -- например, это мобильное приложение, то в случае, когда на сервере структура дварфа изменится (добавится новое поле), может поломаться и и фронтенд, и серверная логика игры (например, дополнительное поле, неизвестное клиенту, всегда будет уходить из фронтенда на сервер как null).
Поэтому обычно от сервера в таких случаях требуют не менять схему API-ответа вообще, а если что-то там изменилось, следует создать новую версию и предоставлять её отдельно по другому URI, например api/dwarf/v2/123.json. Клиенты переберутся на неё постепенно (как наивно полагает тимлид :).
Да, но если API активно развивается, то не успеем мы оглянуться, как окажемся на v256, и, скорее всего, многие (если не все) из этих версий будут нуждаться в поддержке!
Как легко и просто реализовывать подобные API на сотню разных версий, не ломая фронтенд и не требуя его переделки, скоро расскажу