ПРО АНАЛИТИКА | СИСТЕМНЫЙ АНАЛИТИК | АЛЕКСАНДР НЕЗДЕМИНА
Образование · 17 июня 2026 г.
КОНТАКТЫ В API: КАК ПОМЕТИТЬ ПРЕДПОЧТИТЕЛЬНЫЙ СПОСОБ СВЯЗИ — 17 июня 2026 г. в 06:36:33.629
КОНТАКТЫ В API: КАК ПОМЕТИТЬ ПРЕДПОЧТИТЕЛЬНЫЙ СПОСОБ СВЯЗИ Представьте, что вам надо спроектировать экран с контактами человека и напротив одного из них поставить маркер - связываться сюда. У нас на курсе в уроке про JSON как раз есть такой кейс и многие указывают вариант вида: "preferredContactMethods": ["Телефон", "Почта"] В целом вариант рабочий, и логика понятна, но если присмотреться, в нём есть пара слабых мест, и всплывут они уже на интеграции. Давайте разбираться почему и как сделать лучше. ➖➖➖ Что не так с массивом строк? 1️⃣ "Телефон" и "Почта" - это просто подписи с экрана, а не коды. Если завтра придёт локализация на английский или дизайнер переименует "Почта" в "E-mail", то у нас на фронте может поехать вся логика. 2️⃣ И это главное, предпочтение тут висит в воздухе. Оно говорит "звоните на телефон", но не говорит на какой именно, а если у человека два телефона? Т.е. получается, что маркер есть, а к конкретному значению он не привязан. Поэтому давайте посмотрим, как передавать эти признаки по-другому. Сразу скажу, что вариант зависит от кейса 😉 ➖➖➖ Кейс 1️⃣. Массив контактов с флагом или приоритетом. Самый частый и гибкий случай - вы храните сами значения, и контактов у человека может быть несколько. "contacts": [ { "type": "PHONE", "value": "+79991234567", "isPreferred": true }, { "type": "EMAIL", "value": "ivan@mail.ru", "isPreferred": false } ] Тут у нас есть: type - это код (PHONE, EMAIL, TELEGRAM, и так далее), а не подпись с экрана, поэтому бэк его валидирует, а UI сам решает, как отрисовать. И флаг isPreferred привязан к конкретному контакту, а не к абстрактному телефону. Но может быть так, что предпочтений нужно несколько по порядку? Тогда мы можем поменять флаг например на priority со значениями 1, 2, 3 и получить список отсартированный по важности контктов. Кейс 2️⃣. Ссылка на предпочтительный контакт по id Часто нам нужно выбрать какой-то один конкретный контракт, тогда мы можем реализовать это через ссылку на конкретный идентификтаор или на название параметра, если у нас только по одному значению. "contacts": [ { "id": "c1", "type": "PHONE", "value": "+79991234567" }, { "id": "c2", "type": "PHONE", "value": "+79990000000" } ], "preferredContactId": "c1" Очень похож пример из начала поста, но тут есть нбанс. Вы показываете не просто, что предпочтение телефон, а на какой конкретно телефон надо звонить. Кейс 3️⃣. Отдельное поле с типом, когда предпочтение одно Если по бизнес-правилу предпочтительный канал ровно один и привязка к значению не нужна (например, "пишите в телеграм, а не звоните"), то можно сделать не очень гибкий вариант вида: "preferredContactType": "TELEGRAM" Но если вдруг у нас появятся два и больше предпочтиемых значения, то этот вариант не подойдет. ➖➖➖ Подытожу Жёстко правильного варианта нет, всё зависит от кейса с которым вы работаете. И чтобы было легче сделать выбор можно ответиь на три вопроса: • Контакт один или их несколько? • Нужен один предпочтительный или может быть больше одного? • Есть ли у контактов свои id? Зная ответы на эти вопросы - уже будет проще сформировать контракт 😉

