solovyov.net

Server-driven apps

Апки на наших телефонах можна умовно розділити на дві категорії: в основному локальні і в основному зав'язані на сервер. Це спектр, типу гра може бути локальною, але якийсь там мінімум даних сінкати на сервер, але верхньорівнево воно ділиться так легко.

Мене тут цікавлять другі, тому що єкомерс локальним не зробиш: постійні оновлення стоку, цін, описів, додавання/прибирання товарів... Якщо вам здається, що я не думав, як би скласти все людям на телефони і ходити тільки за чекаутом і оновленнями товарів, то вам здається. 😁

Так от, коли ми починали глобальну перебудову всього (у 2016 році), то я зробив API, який віддає чесні дані — що база знає. Наприклад, що в замовлення отакі товари по такій ціні, стільки бонусів, стільки грошей заплачено (карткою, скажімо).

А всю бізнес-логіку по відображенню цих даних ми зробили на фронті — наприклад, скільки грошей залишилося доплатити за замовлення. Авжеж, спочатку це відбувалося на вебі, де розробка API і клієнта відбувалася дуже тісно, часто навіть одним розробником в рамках одної задачі.

А потім підтягувалися апки, для яких постановка задачі регулярно звучала "ну зроби як на вебі". І вони просто повторювали логіку веба, навіть трошки кложу навчилися читати. Але люди є люди, і іноді шось провтикувалося, іноді приймалися різні рішення... І апки регулярно відрізнялися у поведінці від веба, причому в різних місцях і не завжди на краще. 😁

Очевидно, це дратувало неймовірно. 🤣 І ми кілька років тому прийняли рішення, що жодних обчислень на клієнті бути не може. Якщо треба показати, скільки залишилося заплатити за замовлення, це в жодному разі не обчислюється в коді клієнта. Не можна взяти суму замовлення і відняти оплату — хтось забуде про бонуси, хтось про шмонуси. Кожну суму повинно повернути API. Навіть якщо там буде помилка, вона хоча б буде одна на всіх і виправлення буде одне на всіх

Так само з чекаутом. Колись в нас було API оформлення замовлення, куди треба було прислати вже всі зібрані дані, а клієнт сам ходив по різним урлам збирав які є способи доставки, які оплати, як вони поєднуються одне з одним — і отут була просто купа траблів! Складна логіка, яка ще й змінюється з часом... А хтось взяв і показав бонуси, які не повинні вже бути доступні...

Ну ми його переробили в щось типу візарда, де ти йдеш потроху і API повертає інфу про те, що треба запитати наступним, що включено, а що вимкнено (і будь ласка підказочку про те, чому вимкнено). Список доставок — через апі чекауту, доступні варіанти оплати — через апі чекауту. Щоб бізнес-логіка вся була на сервері.

Мораль: коли в тебе не відео-редактор і не гра, клієнти — про верстку, ергономіку та відображення. В жодному випадку про обчислення та хитрощі, бо сьогодні ти хитрий та розумний, а післязавтра це баг. 😁

(@ tg)