Спецификация API - основа успешной разработки

На днях услышал о REST API для ПО, с которым работаю почти ежедневно. Обычно я использую SDK, но тут решил воспользоваться предложением на основе архитектуры REST. Это позволило бы быстро проводить POC (англ. proof of concept) в Postman и мгновенно проверять свои идеи.

Я большой фанат REST и проектирования API. Вот уже многие годы выступаю за разработку на приоритетной основе API (так называемый подход API-first). Вполне естественно, что первым делом я отправился на поиски соответствующей спецификации. Сначала немного поискал на GitHub, но безуспешно. Затем с этим вопросом обратился к специалисту по сопровождению ПО и получил в ответ одну единственную инструкцию curl:

curl -d SOMEBLOB https://{{baseurl}}/data/set/KEYNAME?token\=TOKENHERE

Само собой, я был немного разочарован. Она вызывала больше вопросов, чем давала ответов. Как будут выглядеть данные в ответе? Какой была схема тела запроса? А что насчет типа содержимого? Можно ли задействовать параметр запроса token в качестве заголовка Authorization? Есть ли другие конечные точки, которые можно использовать взамен? В общем, путь к знаниям оказался тернистым, а совсем не RESTful. 

Попробовал вызвать конечную точку, но возникла ошибка. При этом я не знал, как ее исправить. Инструкция curl не особо помогает, когда дело касается устранения неисправностей. 

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

Далее рассмотрим, что именно входит в спецификацию API и почему она так важна для долгосрочного успеха. 

Содержание спецификации API 

Спецификация API, такая как Open API, перечисляет конечные точки, схемы, ответы, параметры, безопасность и базовые URL для API. Она не оставляет места догадкам в процессе изучения набора функциональностей. Спецификации точно указывают, что требуется каждой конечной точке, какие ответы и почему вы получаете. 

Рассмотрим пример из игры Acorn Hunt, которую я создаю: 

/points:
post:
summary: Add or remove points from the caller in their active game
operationId: updatePoints
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- count
properties:
count:
type: integer
minimum: -10
maximum: 10
responses:
200:
description: The points were successfully added to the player score
content:
application/json:
schema:
type: object
required:
- score
properties:
score:
type: integer
409:
$ref: '#/components/responses/Conflict'
500:
$ref: '#/components/responses/UnknownError'

Данное определение конечной точки сообщает пользователям все, что им нужно знать для ее успешного вызова. В верхней части указаны path и метод http. Имеется краткая содержательная информация (summary) с точным описанием предоставляемой бизнес-функциональности. Как видим, схема тела запроса принимает только поле count в диапазоне от -10 до 10. Кроме того, предлагается список всех возможных ответов. В примере при успешном результате ожидается код состояния 200 со свойством score или 409/500 в случае ошибки.

При уменьшении уровня спецификация покажет все пути, поддерживаемые API. Пользователям, читающим спецификацию, не придется гадать, предоставляется ли конечная точка для выполнения конкретной задачи, поскольку все это в ней указано. Вы увидите не только пути, но и список серверов для каждой среды. 

Пользователи могут привязать URL сервера к нужному пути, и готово! Приложение обеспечивается понятным и кратким описанием всех доступных конечных точек. 

Примечание. На представленном выше изображении URL серверов вымышленные, так что использовать их не представляется возможным. 

Преимущества спецификации API 

Вернемся к ситуации, когда мне потребовалась информация об API, и пришлось обратиться к специалисту по сопровождению. Хорошо, если это разовая акция. Но что если обращаться с вопросами приходится по 20 раз на день? Или 50? И даже 1000? 

Информация, известная только определенной группе людей, не выходит за рамки этого круга. А хуже всего то, что внешние пользователи узнают об API с чьих-то слов и рассказывают о нем знакомым. Затем эти знакомые передают информацию друзьям, а те своим друзьям и т.д. Вы когда-нибудь играли в “глухой телефон”? Как правило, в этой игре конечное сообщение очень сильно отличается от первоначального варианта. Представьте, что то же самое случилось с вашим API. 

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

При наличии спецификации API у вас всегда есть фиксированный ресурс, постоянно доступный для ознакомления. При этом не имеет значения, сколько разработчиков ее просматривают: один или миллион. Статическое определение на веб-странице обычно справляется с таким объемом. Пропадает необходимость привлекать разработчиков к обучению пользователей работе с API. 

Помимо перечисленных внутренних преимуществ существуют и внешние. 

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

Думаете, что спецификация API слишком низкоуровневый продукт, чтобы предлагать пользователям? Существует множество инструментов, которые отображают ее в виде понятных веб-страниц прямо из конвейера CI.

Вы не только обзаводитесь документацией, но, в зависимости от стека технологий, получаете возможность развернуть реализацию бэкенда прямо из нее! 

При работе с AWS можно добавлять специальные расширения для создания валидации схемы и автоматического подключения напрямую к нисходящим сервисам. У нас с коллегами обсуждается вопрос об автоматизации всех процессов, начиная от генерации SDK, интеграции тестирования и заканчивая получением пользовательской документации непосредственно из спецификации. 

Заключение 

Спецификация API  —  ваш источник истины. Она определяет механизм разработки продукта. API является входной дверью приложения, предоставляя пользователям возможность использовать и расширять продукт в соответствии с их потребностями. Если вы оставляете своих пользователей с неотвеченными вопросами и недокументированными конечными точками, как они добьются успешных результатов? SDK зарекомендовали себя как отличные инструменты разработки, которые решают множество задач. Тем не менее они не охватывают всех проблем. 

Веб-API, будь то REST или GraphQL, выступает в качестве вспомогательного средства. Он снижает входной барьер для новых пользователей, не требуя от них написания кода. Они просто открывают такой инструмент, как Postman или Insomnia, вводят ключ API и начинают тестировать. 

Единый источник истины объединяет группу, ответственную за продукт, с командой разработки. Никаких “черных ящиков” или программирования вслепую. Контракт определен и реализован, и пользователи сразу открывают для себя новую функциональность. При определении соответствия продукта рынку ключевыми факторами успеха являются быстрая обратная связь и доработка. Спецификация API с подробным описанием доступных функциональностей  —  это самый быстрый способ рассказать о них пользователям и мотивировать на их использование. 

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

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Allen Helton: Why API Specs Are the Backbone of Successful Development

Предыдущая статья10 лайфхаков JavaScript, которые сделают из вас профессионала
Следующая статьяКак писать идеальные конспекты по науке о данных