Ваш API – ваше лицо |
05.05.2017 08:10 |
Автор: Юлия Багрий Оригинальная публикация: http://quality-lab.ru/your-api-is-your-public-face/ Для начала нам нужно понять, что же такое API? Категории взаимодействия API Взаимодействия можно условно разделить на две категории: внутренние и внешние. Под внутренними взаимодействиями мы подразумеваем взаимодействия внутри вашей системы, например:
Основные риски, связанные с внутренним API, – это функциональные дефекты и проблемы производительности. Здесь пользователи могут лишь предполагать, из-за чего конкретно приложение работает «как-то не так». При внешнем взаимодействии связи с другими сервисами выходят за рамки вашей системы. В данном случае вы либо используете чей-то внешний API (почти в любом приложении есть доступ к сторонним сервисам – к социальным сетям, платежам, картам и т. д.), либо сами предоставляете свой API сторонним разработчикам. Подробно остановимся на втором варианте. Предоставление API является для некоторых главным бизнесом (те же социальные сети и платежи), для других же – приятным дополнением к основному сервису. Но в любом случае форма реализации и представления API, образно говоря, «приоткрывает дверь во внутреннюю кухню» разработки. И вот тут уже «спрятаться» за красивым дизайном и саппортом не получится. Действительно, если в публичный доступ выходит API с плохой документацией, путаницей в версионности и кучей функциональных проблем, то внешние разработчики могут (да просто обязаны!) предположить, что точно так же (а то и хуже) разработана вся система. Будут ли они строить сторонние сервисы вокруг такой системы, привлекая новых клиентов? Конечно, нет. Отговорят ли своих начальников и друзей от использования или покупки? Наверняка, да. И не нужно забывать, что для далеких от технических вопросов людей мнение разработчика будет решающим. А еще они обязательно пожалуются на ваш сервис в социалках или форумах, оттолкнув немало потенциальных пользователей. Следовательно, перед публикацией любого, пусть даже самого крохотного API необходимо позаботиться о его безупречности. 4 способа зафакапить внешний API Существуют разные подходы к оценке состояния API (например, пирамида потребностей). Можно выделить выделить четыре наиболее критические проблемы, возникающие при его использовании. 1. Нерабочая функциональность. Вам необходимо рассматривать доступные операции во взаимодействии друг с другом. Случаются такие казусы: в созданной операции импорта объекта А нужно обязательно указать идентификатор объекта Б, но при этом операция импорта объекта Б еще не реализована. В итоге добавленная операция становится невыполнимой. Другая проблема: учитываете ли вы при разработке сервиса основной регион, где его будут использовать? Понятно, что для австралийцев поддержка русских кодировок не так важна. Но уж если вы работаете со странами СНГ, то проверить все нюансы работы с кириллицей просто необходимо. По своему опыту скажу, что даже при всеобщем проникновении Unicode до сих пор можно встретить банальную ситуацию: пользователь загрузил файл с именем «Документ_1.pdf», а на выходе получил уже обрезанный «_1.pdf». Приведу еще один наглядный пример – дефект в реализации файлового обмена. В одном из проектов операция выгрузки файлов по частям «съедала» последний байт последнего блока. Учитывая, что загрузка-выгрузка файлов являлась ключевой операцией программы, и практически для каждого объекта в системе предусматривалась возможность указать файл-основание создания, степень критичности ситуации трудно было переоценить. 2. Ненадежность. Одним из важнейших показателей является производительность – способность сервиса справляться с ожидаемой нагрузкой (определению которой необходимо уделять особое внимание) и гибко реагировать на стрессовые ситуации. Так, в одном из проектов в новую версию API добавили операцию экспорта объектов, стабильно работающую при небольших нагрузках. Но как только этот экспорт запускала одна из крупнейших зарегистрированных организаций – сервера приложений падали. Возможность выполнять экспорт временно закрывали хотфиксом, проводили оптимизации, выпускали новую версию – ничего не помогало. При этом совсем отключить операцию не представлялось возможным: возможность экспорта уже была заявлена перед пользователями. Зададимся следующим вопросом: как именно разработчики узнают о проблемах в работе сервиса? Появляется ли специальное сообщение о временных неполадках или инфраструктурных работах? Даются ли примерные сроки завершения работ? Часто для таких случаев используются специальные страницы, на которых публикуется информация о глобальных проблемах и сроках их решения. Если вы поставляете пользователям несколько отдельных сервисов, то их доступность удобно представить в виде сводной таблицы по статусам. Нажмите на картинку, чтобы увеличить изображение При этом, как показала недавняя ситуация с Amazon, страница со статусом сервиса не должна быть жестко связана с самим сервисом. Она должна оставаться доступной и актуальной на тот случай, если что-то пойдет не так. 3. «Кривое» юзабилити. Говоря о юзабилити, мы почему-то сразу подсознательно ограничиваем понятие рамками пользовательского интерфейса – кнопочками и диалогами. Практика показывает, что это далеко не самый трудный случай, ведь даже в откровенно ущербном приложении пользователь может разобраться методом научного тыка. А вот при погрешностях в юзабилити API возникает целый ряд конфликтных ситуаций. Перечислим лишь основные из них:
"Поставьте разрабам Пунтосвич. На этот раз в схеме в элементе Centralized первая буква русская." "У ваших разрабов в кровь поступает слишком много алкоголя, и их внимательность резко падает. В схеме при написании элемента в его имени была допущена эпическая ошибка – Рressure было написано с первым символом русского языка и получилось: эрRessure."
"Ограничения они ввели еще задолго до того, как сообщили об этом: как работали в пьяном угаре – так и продолжают."
4. Дыры в безопасности. Нередко используются сразу несколько API: например, тестовый (для своих разработчиков и тестировщиков) и открытый публичный. Вы должны всеми возможными способами закрыть тестовый API, в противном случае злоумышленник найдет ключ к нему. Незащищенный доступ сможет найти даже робот поисковой системы (после чего он засветит ссылку на эндпоинт в поисковой выдаче). Вы даете доступ к тестовому API сторонним разработчикам? Не забудьте аккуратно, но жестко отслеживать их действия: разработчики любят задавать вопросы на форумах и stackoverflow и при этом не всегда удаляют из примеров кода информацию об авторизации (это особенно актуально, если вы используете Basic-авторизацию). Случается и такое: тестовый API закрыт и спрятан, но в нем реализовано несколько операций для команды разработки, не предназначенных для широкого круга пользователей. Обычно таким образом разработчики упрощают рутинные операции: подкрутить количество денег на счете, присвоить статус премиум подписчика и т. д. Нужно не забывать отключать такие операции перед релизом публичного API: их все равно найдут, даже если они не будут задокументированы! Заключение У впечатлительного читателя после всего вышесказанного может сложиться мнение, что внешний API – это что-то слишком сложное, рискованное, и затратное. Может быть, лучше вообще обойтись без него? В таких рассуждениях есть рациональное зерно, но нельзя забывать, что глобальная «связность» – это один из ключевых трендов. Стабильный и удобный API может стать вашим основным доходом: он может увеличить пользовательскую базу через сторонние приложения, наглядно продемонстрировать ваш профессионализм и привлечь новых сотрудников. Для достижения таких результатов вам предстоит немало потрудиться. Нужно тестировать, тестировать и еще раз тестировать, уделяя серьезное внимание аналитике и разработке API. Если у вас нет и не будет внешнего API – может быть, вам стоит задуматься о внутреннем? Любите ли вы своих родных разработчиков? Доступна ли им актуальная документация? Проверяется ли надежность связи между подсистемами? Тестируется ли интеграция вообще? Характеристики и примеры, приведенные в статье, применимы к созданию внутреннего API и принесут отличные результаты после реализации. |