- PVSM.RU - https://www.pvsm.ru -
В прошлом посте [1] мы рассказывали о том, как и почему мы в Acronis делаем аннотации к микросервисам, и обещали поделиться своей практикой применения единого формата API для всей платформы Acronis Cyber Platform. Сегодня мы расскажем про свой опыт статических проверок аннотаций – aka первый шаг на пути внедрения аннотаций в компании.
[2]
Итак, предположим, что у вас уже есть аннотации ко всем или большинству API. Резонный вопрос, который нам также задавали коллеги: “А что можно делать с этими магическими объектами?”
На самом деле существует два типа проверок, которые можно проводить прямо по аннотации. Статические проверки проходят прямо по текстам аннотаций Swagger или RAML. Им больше ничего не нужно, и они по праву могут считаться первым плюсом использования формализованных контрактов микросервисов.
Динамические проверки могут быть запущены только в том случае, если у вас есть работающий сервис. Они несколько сложнее, так как позволяют нырнуть глубже и проверить, насколько вообще валидна аннотация, протестировать устойчивость сервиса, а также сделать многое другое. Но это тема следующего поста, а сегодня мы сосредоточимся на статике.
Чтобы не запутывать ни себя, ни других, стоит сразу же оговориться, что статические проверки аннотаций создаются для контроля соответствия аннотаций API (и, будем надеяться, самих API) корпоративным требованиям. Это могут быть или просто практики, принятые в компании, или полноценный API Guideline, который формализует правила подготовки API для ваших сервисов.

Когда мы говорим о пестром мире микросервисов, это очень важно, потому что у каждой команды может быть свой фреймворк, свой язык программирования, уникальный стек или какие-то особенные библиотеки. Под влиянием практик, специфичных для микросервиса, меняется и представление API для внешнего наблюдателя. Это создает излишнее разнообразие. Для эффективного взаимодействия элементов экосистемы (или платформы), необходимо “выровнять” API, насколько возможно.
Приведем пример: в API одного компонента возвращают код 404, только если ресурс не существует. А другая команда привязывают эту ошибку к логике приложения и API вернет 404, когда пользователь хочет купить товар, который закончился на складе. Наглядно подобные проблемы очень хорошо описал atygaev [3] здесь [4]. Эта неконсистентность в понимании 404 кода будет тормозить разработку и приводить к ошибкам, а значит – к лишним обращения в поддержку или лишним часам дебага, но в любом случае к проблемам, измеряемым в денежном эквиваленте.
Специфика синтаксиса и нейминга, принятых в компании, дополняются различными аспектами, характерными непосредственно для REST. Разработчик должен ответить на такие вопросы, как:
А теперь представьте, что каждая команда должна в отдельности ломать голову над этими ответами.
Формат поискового запроса также может быть совершенно разным. Например, существует с десяток способов сформировать выборку, в которой будут приведены только те пользователи, у которых МacBookPro и частые вирусные атаки. При работе над крупным проектом, состоящим из десятков микросервисов, необходимо, чтобы синтаксис поискового запроса был общим для всех версий и продуктов компании. И если человек привык обращаться к одному из продуктов/сервисов вашей разработки, он ожидает встретить такую же структуру запроса и ответа в другом. Иначе изумления (и огорчения) будет не избежать.
У многих компаний, особенно у гигантов, таких как Microsoft [5], PayPal [6], Google [7], имеются свои гайдлайны, и они очень хорошо продуманы. Но использовать чужие гайдлайны не всегда оказывается возможным, потому что они во многом привязаны к специфике работы компании. К тому же у всех устроено по-разному, и правила могут отличаться просто потому, что людям удобнее работать так, а не иначе.
Понимание того, что Acronis нуждается в собственном API Guideline пришла не сразу, а с ростом количества разработчиков, микросервисов и собственно внешних клиентов и интеграций. В какой-то момент команде архитекторов пришлось установить единые правила декларирования API приняв во внимание как опыт упомянутых выше IT гигантов, так и уже устоявшихся де-факто практик в командах разработки.
Одной из проблем, при таком позднем внедрении API Guideline являются уже существующие опубликованные API, не соответствующие требованиям, что в свою очередь приводит к дополнительным затратам на переработку интерфейсов и на поддержание обратной совместимости. Поэтому если ваша бизнес модель предполагает будущую интеграцию и публикацию API, то думать о единых правилах нужно как можно раньше.

Конечно, принятие API Guideline не сделало все API конститентными автоматически. Каждый API должен был быть проанализирован, каждый девлид должен был понимать новые требования. Поэтому мы сделали автоматизацию проверок RAML против разработанного нами API Guideline.
Статический анализ
Сначала необходимо определиться, что мы будем статически анализировать. Далеко не все пункты API Guideline поддаются формализации, так что сначала необходимо выделить набор правил, которые можно легко понимать из аннотации API.
В первой версии мы выделили следующие правила:

Когда нет описаний

Когда есть описания
Статический анализ аннотаций нужен для того, чтобы проверить (нет, не качество сервиса), но качество API. Этот этап позволяет выровнять программные интерфейсы относительно друг друга, чтобы люди работали в четкой и понятной среде, где все достаточно предсказуемо.
Конечно, заниматься подобным формализмом нужно только в достаточно больших компаниях, когда проверка всех соответствий “вручную” оказывается очень долгой, дорогой и ненадежной. Небольшому стартапу это попросту не нужно. По крайней мере, до поры, до времени. Но если в вашем будущем есть планы стать единорогом, как и Акронис, то статические проверки и API Guideline вам в помощь.
Автор: vlapat
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/rest/332750
Ссылки в тексте:
[1] посте: https://habr.com/ru/company/acronis/blog/466691/
[2] Image: https://habr.com/ru/company/acronis/blog/470910/
[3] atygaev: https://habr.com/ru/users/atygaev/
[4] здесь: https://habr.com/ru/post/440382/
[5] Microsoft: https://github.com/Microsoft/api-guidelines/blob/vNext/Guidelines.md
[6] PayPal: https://github.com/paypal/api-standards/blob/master/api-style-guide.md
[7] Google: https://cloud.google.com/apis/design/
[8] мышление: http://www.braintools.ru
[9] Источник: https://habr.com/ru/post/470910/?utm_source=habrahabr&utm_medium=rss&utm_campaign=470910
Нажмите здесь для печати.