Иллюстрация процесса WA Lookup к статье «Работа со значениями avatar_url, которые возвращает WA Lookup»
Наглядная схема процесса, рассматриваемого в этой статье WA Lookup.

Поле avatar_url — та часть ответа ws_avatar, которая чаще всего удивляет при интеграции: оно может быть пустой строкой, а хранить URL — совсем не то же самое, что хранить логическое значение.

WA Lookup возвращает поле avatar_url в каждом успешном ответе ws_avatar. Если URL недоступен, значение — пустая строка, поэтому интеграции следует хранить его отдельно от сопутствующего логического значения avatar и явно обрабатывать пустое значение.

Моделируйте логическое значение и URL по отдельности

Логическое значение avatar и строка avatar_url отвечают на разные вопросы: был ли обнаружен аватар и откуда его можно получить. Если объединить их в один столбец, допускающий null, первый ответ теряется всякий раз, когда отсутствует второй, а отсутствие — это обычный исход, а не пограничный случай. Два столбца сохраняют оба ответа читаемыми.

Решите, нужно ли вообще хранить URL

Некоторым интеграциям нужно только логическое значение — в этом случае отказ от хранения URL полностью снимает целый класс вопросов о сроках хранения. Если вы все же сохраняете его, храните рядом дату проверки: информация профиля меняется, и сохраненный URL — это снимок того, что было верно на момент проверки, а не постоянный адрес.

Рассматривайте получение изображения как отдельную задачу

Загрузка того, на что указывает URL, — это операция, отличная от выполнения проверки, со своими сценариями сбоев и своими сроками. Если разделять их, проблема с загрузкой никогда не будет выглядеть в логах как проблема с проверкой, а это важно, когда вы пытаетесь понять, почему пакет выглядит неправильно.

Обрабатывайте отсутствие значения без ветвлений повсюду

Нормализуйте ответ один раз на границе интеграции — превратите необязательное поле в явное представление, понятное вашему коду, — вместо того чтобы проверять наличие значения в каждой точке вызова. Отсутствующие значения встречаются достаточно часто, чтобы разрозненные проверки стали главным источником ошибок, которых можно было избежать.

Часто задаваемые вопросы

Нужно ли хранить avatar_url бессрочно?

Если вы его храните, делайте это вместе с датой проверки: информация профиля меняется, и значение является снимком, а не постоянным адресом.

Что означает отсутствие avatar_url?

То, что вышестоящий сервис не предоставил его для этого аккаунта на момент проверки. Логическое значение avatar по-прежнему сообщает, был ли обнаружен аватар.

Выполняется ли загрузка изображения в рамках проверки?

Нет. Проверка возвращает поля; загрузка того, на что указывает URL, — отдельная операция со своими сценариями сбоев.

Источники