mirror of
https://github.com/twirl/The-API-Book.git
synced 2025-01-05 10:20:22 +02:00
Шаги проектирования API
This commit is contained in:
parent
aa43e042d9
commit
58da4edc13
52
API.ru.html
52
API.ru.html
@ -79,6 +79,58 @@
|
||||
|
||||
<h2>Проектирование API</h2>
|
||||
|
||||
<p>Подход, который мы используем для проектирования, состоит из четырёх шагов:</p>
|
||||
|
||||
<ul>
|
||||
<li>определение области применения;</li>
|
||||
<li>разделение уровней абстракции;</li>
|
||||
<li>разграничение областей ответственности;</li>
|
||||
<li>Описание конечных интерфейсов.</li>
|
||||
</ul>
|
||||
|
||||
<p>Этот алгоритм строит api сверху вниз, от общих требований и сценариев использования до конкретной номенклатуры сущностей; фактически, двигаясь этим путем, вы получите на выходе готовое api - за что мы и ценим этот подход.</p>
|
||||
|
||||
<p>Поскольку я являюсь убеждённым приверженцем практического подхода, здесь и далее я буду рассматривать проектирование api на конкретных примерах. В качестве такого примера я выбрал гипотетическое api некоей метеорологической службы. На всякий случай, предупрежу заранее, что пример является выдуманным от начала до конца; если бы мне предложили заниматься таким api в реальности - я бы прежде всего потратил время на детальное исследование предметной области, и наверняка пришёл бы совсем к другим решениям в итоге. Но для наших учебных целей такой умозрительный пример вполне допустим, поскольку я ставлю своей целью, прежде всего, объяснение того, как надо думать и не стремлюсь вложить в голову читателя какие-то конкретные решения и рецепты успеха.</p>
|
||||
|
||||
<h3>Определение области применения</h3>
|
||||
|
||||
<p>Первый вопрос, на который мы должны ответить, принимая решение о разработке api - "зачем?" Кто и как будет пользоваться нашей программной связью контекстов?</p>
|
||||
|
||||
<p>Рассмотрим следующий пример. Допустим, мы умеем предсказывать погоду и располагаем возможностью предоставлять данные о погоде в машиночитаемом виде. Стоит ли нам разрабатывать api? Давайте подумаем.</p>
|
||||
|
||||
<p>Во-первых, необходимо понять, какую такую функциональность мы можем предоставлять потребителям, что они воспользуются api, а не будут разрабатывать сами?</p>
|
||||
|
||||
<p>По возрастанию сложности самостоятельной реализации такого функционала это будут: получение информации о текущей погоде; получение информации о прогнозе; получение информации о климате какой-то местности; получение информации о "внутреннем устройстве" предметной области - зоны высокого и низкого давления, атмосферные фронты и их движение. </p>
|
||||
|
||||
<p>Зачем такого рода функциональность может понадобиться? Вот несколько очевидных ответов:</o>
|
||||
|
||||
<ul><li>конечным пользователям - чтобы понять, нужно ли сегодня брать зонтик и куда можно съездить отдохнуть в ноябре;</li>
|
||||
<li>компаниям, бизнес которых зависит от погоды - например, авиаперевозчикам.</li></ul>
|
||||
|
||||
<p>Для удовлетворения первой группы потребностей потребители будут сами приходить на ресурсы, принадлежащие нашим потенциальным клиентам - популярные локальные веб-сайты (например, на городские порталы за краткосрочным прогнозом погоды или на туристические агрегаторы за информацией о климате) или разного рода приложения для "умных" устройств (телефонов, часов, планшетов, телевизоров и даже домов) или специализированные новостные ресурсы. Вторую группу потребностей будут закрывать компании, производящие программное обеспечение для диспетчерских служб - либо, возможно, проприетарные решения самих транспортных компаний.</p>
|
||||
|
||||
<p>Допустим мы исследовали и рынок, и собственные технические ресурсы и пришли к выводу, что (а) мы готовы эту функциональность предоставлять, (б) пользователям она необходима и (в) мы способны извлечь для себя какую-то выгоду из предоставления такого api (подробнее обо всем этом я расскажу в третьем разделе). Тем самым мы обозначили пункт "что" - какую функциональность мы физически можем предоставить и зачем.</p>
|
||||
|
||||
<p>Следующий этап - описание пользовательских сценариев. Ответив на вопросы "что" и "зачем", нужно теперь описать ответ на вопрос "как" - как потребители api будут им пользоваться.</p>
|
||||
|
||||
<p>Очевидное решение, которое приходит в голову сразу - это выполнить наше api в виде веб-сервиса: разработчик обращается по сформированному определённым образом url и получает погодную информацию. В общем-то, всю имеющуюся у нас информацию можно через такой сервис предоставлять; он будет универсален - такое обращение можно реализовать на любой платформе, и, таким образом, оно покроет все кейсы. Разве нет?</p>
|
||||
|
||||
<p>Теперь давайте подойдём к вопросу с другой стороны. А как было бы удобно пользоваться нашим api, скажем, веб-мастеру-администратору небольшого локального форума? Скорее всего, ему требуется решение, которое не требует навыков разработки, чтобы было достаточно мышкой нащёлкать параметры информатора о прогнозе погоды. Нет, мы можем, конечно презрительно отмахнуться от таких непрофессионалов; но, тем самым, мы лишим сами себя значительной доли рынка.</p>
|
||||
|
||||
<p>Аналогично, если мы посмотрим на потребности крупных диспетчерских компаний, то мы, вероятно, выясним, что у них уже есть какое-то автоматизированной рабочее место диспетчера, и идеальным для них решением был бы набор компонентов, которые можно интегрировать в их программный комплекс. Аналогично, у новостных ресурсов также есть какое-то готовое решение для управления контентом, и они предпочтут не заказывать дорогостоящую разработку модуля визуализации погоды, а готовое решение.</p>
|
||||
|
||||
<p>Иными словами, в начале разработки api перед нами всегда стоит вопрос: насколько приближено оно должно быть к конечному пользователю? Чем более высок уровень вашего api, чем проще оно позволяет реализовать пользовательские сценарии - тем более интересно оно будет разработчикам, но тем дороже оно обойдётся вам самим. Понятно, что невозможно написать модули и компоненты для всех существующих cms и фреймворков, и вам придётся где-то остановиться - исходя из ваших представлений о массовости тех или иных кейсов. Вполне возможно, что в нашей гипотетической ситуации мы в итоге можем прийти к решению делать только http api, так как выясним, что получим от виджетов меньше дохода, чем потратим на разработку, а у каждого из крупных клиентов есть свой отдел разработки и они не доверяют в business-critical задачах разработкам сторонних компаний.</p>
|
||||
|
||||
<p>Однако, чтобы нам было, о чем говорить в дальнейших разделах, предположим, что мы решили закрывать следующие сценарии:</p>
|
||||
|
||||
<ul><li>общее http api для клиентов, готовых вести разработку самостоятельно;</li>
|
||||
<li>набор виджетов для мобильных и веб-приложений;</li>
|
||||
<li>набор компонентов для встраивания в АРМы диспетчерских компаний.</li></ul>
|
||||
|
||||
<p>Перейдём теперь непосредственно к проектированию api.</p>
|
||||
|
||||
<h3></h3>
|
||||
|
||||
<!--
|
||||
<h2>О проектировании API</h2>
|
||||
<h3>Архитектура против реализации</h3>
|
||||
|
Loading…
Reference in New Issue
Block a user