Опубликовано

Новинка: “Web API. Сборник рецептов”

Web API. Сборник рецептов

Книга посвящена разработке современных веб-приложений с использованием JavaScript и встроенных возможностей браузера на основе Web API. Приведены практические примеры реализации функций, которые ранее требовали сторонних плагинов: диалоговые окна, работа с геолокацией и другими возможностями, предоставляемыми браузером. Освещаются как устоявшиеся, так и находящиеся в стадии разработки API-интерфейсы, позволяющие создавать мощные и интерактивные веб-приложения, глубоко интегрированные с устройствами пользователей. Рассматривается, как браузеры реализуют модель разрешений для предоставления доступа к таким функциям, как геолокация и push-уведомления. Каждая задача в книге сопровождается готовыми рецептами, содержащими описание проблемы, решение с пояснениями и расширенное обсуждение. Книга ориентирована на программистов с опытом работы на JavaScript, знакомых с программным интерфейсом DOM (Document Object Model).

Для программистов

Повысьте уровень JavaScript-приложений

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

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

Это практическое руководство предлагает коллекцию прикладных примеров использования новейших возможностей браузерных API. Автор помогает разобраться, какие задачи можно решить с их помощью и как применять эти инструменты на практике. Поскольку речь идет о стандартизированных технологиях, вы всегда можете обратиться к надежной документации, например, на MDN Web Docs.

Полученные знания пригодятся вам в проектах любой сложности — от личных до корпоративных.

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

Книгу “Web API. Сборник рецептов: Повысьте уровень JavaScript-приложений” можно купить в нашем интенет-магазине.

Предисловие. 13

Возможности современных браузеров. 14

Недостатки сторонних библиотек. 14

Для кого предназначена эта книга. 14

Что содержится в этой книге. 15

Дополнительные ресурсы.. 15

Соглашения об используемых обозначениях. 16

Использование примеров кода. 17

Платформа онлайн-обучения O’Reilly. 18

Как с нами связаться. 18

Благодарности. 18

ГЛАВА 1. Асинхронные API. 21

1.0. Введение. 21

1.1. Работа с промисами. 22

1.2. Загрузка изображения с помощью использования резервного изображения (fallback) 24

1.3. Связывание промисов. 26

1.4. Использование ключевых слов  async и await 28

1.5. Параллельное использование промисов. 29

1.6. Анимация элемента с помощью  requestAnimationFrame. 30

1.7. Обертывание событий API в промис. 33

ГЛАВА 2. Простое сохранение данных с помощью Web Storage API. 36

2.0. Введение. 36

2.1. Проверка поддержки Web Storage. 38

2.2. Сохранение строковых данных. 39

2.3. Сохранение простых объектов. 40

2.4. Сохранение сложных объектов. 41

2.5. Отслеживание изменений в хранилище. 46

2.6. Поиск всех известных ключей. 47

2.7. Удаление данных. 49

ГЛАВА 3. URL-адреса и маршрутизация. 51

3.0. Введение. 51

3.1. Определение относительного URL-адреса. 52

3.2. Удаление параметров запроса из URL-адреса. 54

3.3. Добавление параметров запроса к URL-адресу. 56

3.4. Чтение параметров запроса. 58

3.5. Создание простого маршрутизатора  на стороне клиента. 60

3.6. Сопоставление URL-адресов с шаблонами. 62

ГЛАВА 4. Сетевые запросы.. 65

4.0. Введение. 65

4.1. Отправка запроса с помощью XMLHttpRequest 66

4.2. Отправка GET-запроса с помощью Fetch API 67

4.3. Отправка POST-запроса с помощью Fetch API 69

4.4. Загрузка файла с помощью Fetch API 70

4.5. Отправка Beacon. 71

4.6. Прослушивание удаленных событий  с помощью server-sent events. 72

4.7. Обмен данными с WebSockets  в режиме реального времени. 74

ГЛАВА 5. База данных IndexedDB.. 77

5.0. Введение. 77

5.1. Создание, чтение и удаление объектов  в базе данных. 79

5.2. Обновление существующей базы данных. 85

5.3. Выполнение запросов с использованием индексов. 87

5.4. Поиск строковых значений с помощью курсора. 90

5.5. Разбивка большого набора данных на страницы.. 92

5.6. Использование промисов  с IndexedDB API 94

ГЛАВА 6. Наблюдение за элементами DOM… 97

6.0. Введение. 97

6.1. Отложенная загрузка изображения при прокрутке. 99

6.2. Обертывание IntersectionObserver промисом.. 101

6.3. Автоматическая пауза при воспроизведении видео. 102

6.4. Анимация изменений высоты.. 103

6.5. Изменение содержимого элемента  в зависимости от размера. 105

6.6. Применение перехода  в момент появления элемента в поле зрения. 107

6.7. Использование режима бесконечной прокрутки. 108

ГЛАВА 7. Формы.. 110

7.0. Введение. 110

7.1. Заполнение поля формы из локального хранилища. 111

7.2. Отправка формы с помощью Fetch и FormData API 112

7.3. Отправка формы в формате JSON.. 114

7.4. Создание обязательного поля формы.. 116

7.5. Ограничения при вводе числа. 117

7.6. Определение шаблона валидации. 118

7.7. Валидация формы.. 119

7.8. Применение пользовательской логики валидации. 122

7.9. Проверка группы флажков. 124

7.10. Асинхронная проверка поля формы.. 127

ГЛАВА 8. API веб-анимации. 130

8.0. Введение. 130

8.1. Применение эффекта “пульсации”  при нажатии кнопки. 132

8.2. Запуск и остановка анимации. 135

8.3. Анимация вставки и удаления элементов DOM.. 136

8.4. Реверсирование анимации. 137

8.5. Отображение индикатора прокрутки. 141

8.6. Создание подпрыгивающего элемента. 143

8.7. Одновременный запуск нескольких анимаций. 144

8.8. Отображение анимации загрузки. 146

8.9. Соблюдение в анимации  предпочтений пользователя. 148

ГЛАВА 9. Web Speach API. 150

9.0. Введение. 150

9.1. Добавление продиктованного текста  в текстовое поле. 152

9.2. Создание Promise-помощника  для распознавания речи. 155

9.3. Получение доступных голосов. 156

9.4. Синтез речи. 157

9.5. Настройка параметров синтеза речи. 159

9.6. Автоматическая приостановка речи. 160

ГЛАВА 10. Работа с файлами. 161

10.0. Введение. 161

10.1. Загрузка текста из файла. 161

10.2. Загрузка изображения из URL-адреса данных. 164

10.3. Загрузка видео  в качестве URL-адреса объекта. 166

10.4. Загрузка изображения с помощью перетаскивания. 167

10.5. Проверка и запрос разрешений. 170

10.6. Экспорт данных API в файл. 171

10.7. Экспорт данных API со ссылкой  для скачивания. 173

10.8. Загрузка файла с помощью перетаскивания. 175

ГЛАВА 11. Интернационализация. 177

11.0. Введение. 177

11.1. Форматирование даты.. 178

11.2. Получение частей отформатированной даты.. 178

11.3. Форматирование относительной даты.. 179

11.4. Форматирование чисел. 181

11.5. Округление знаков после точки. 182

11.6. Форматирование ценового диапазона. 183

11.7. Форматирование единиц измерения. 184

11.8. Применение правил плюрализации. 184

11.9. Подсчет символов, слов и предложений. 186

11.10. Форматирование списков. 187

11.11. Сортировка массива имен. 188

ГЛАВА 12. Веб-компоненты.. 190

12.0. Введение. 190

12.1. Создание компонента  для отображения сегодняшней даты.. 193

12.2. Создание компонента  для форматирования пользовательской даты.. 194

12.3. Создание компонента обратной связи. 196

12.4. Создание компонента профильной карточки. 200

12.5. Создание компонента изображения  с отложенной загрузкой. 202

12.6. Создание компонента раскрытия информации. 204

12.7. Создание стилизованного компонента кнопки. 207

ГЛАВА 13. Элементы интерфейса пользователя. 211

13.0. Введение. 211

13.1. Создание диалогового окна  предупреждения. 212

13.2. Создание диалогового окна подтверждения. 215

13.3. Создание веб-компонента  диалогового окна подтверждения. 218

13.4. Использование элемента раскрытия информации. 220

13.5. Отображение всплывающего окна. 222

13.6. Ручное управление всплывающим окном.. 223

13.7. Позиционирование всплывающего окна  относительно элемента. 224

13.8. Отображение всплывающей подсказки. 227

13.9. Отображение уведомления. 229

ГЛАВА 14. Интеграция устройств. 231

14.0. Введение. 231

14.1. Считывание состояния батареи. 231

14.2. Считывание состояния сети. 234

14.3. Определение местоположения устройства. 235

14.4. Отображение местоположения устройства  на карте. 237

14.5. Копирование и вставка текста. 238

14.6. Совместное использование контента  с помощью Web Share API 241

14.7. Создание вибрации устройства. 242

14.8. Настройка ориентации устройства. 243

ГЛАВА 15. Измерение производительности. 245

15.0. Введение. 245

15.1. Измерение производительности загрузки страниц. 246

15.2. Измерение эффективности  использования ресурсов. 247

15.3. Поиск самых медленных ресурсов. 247

15.4. Определение тайминга для конкретного ресурса. 248

15.5. Профилирование производительности  рендеринга. 249

15.6. Профилирование многоэтапных задач. 251

15.7. Прослушивание показателей производительности. 253

ГЛАВА 16. Работа с консолью… 255

16.0. Введение. 255

16.1. Стилизации вывода консоли. 255

16.2. Использование уровней в журналах сообщений. 256

16.3. Создание именованных регистраторов. 257

16.4. Отображение массива объектов  в таблице. 258

16.5. Использование консольных таймеров. 260

16.6. Использование консольных групп. 261

16.7. Использование счетчиков. 263

16.8. Регистрация переменной и ее значения. 264

16.9. Протоколирование трассировки стека. 265

16.10. Проверка ожидаемых значений. 266

16.11. Изучение свойств объекта. 267

ГЛАВА 17. CSS. 269

17.0. Введение. 269

17.1. Выделение текстовых областей. 269

17.2. Предотвращение появления текста  без стилизации. 272

17.3. Анимация переходов DOM.. 274

17.4. Изменение таблиц стилей во время выполнения. 276

17.5. Условная установка CSS-класса. 277

17.6. Соответствие медиазапросам.. 277

17.7. Получение вычисленного стиля элемента. 278

ГЛАВА 18. Медиа. 281

18.0. Введение. 281

18.1. Запись экрана. 281

18.2. Захват изображения с камеры пользователя. 284

18.3. Захват видео с камеры пользователя. 286

18.4. Определение возможностей  системной поддержки медиа. 288

18.5. Применение видеофильтров. 290

ГЛАВА 19. Заключительные замечания. 292

19.0. Введение. 292

19.1. В защиту сторонних библиотек. 292

19.2. Определяйте функции, а не версии браузера. 292

19.3. Полифилы.. 293

19.4. Заглядывая в будущее. 293

Предметный указатель. 296

Об авторе. 302

Об изображении на обложке. 303

Опубликовано

API как искусство: разработка, поддержка, интеграция

API как искусство: разработка, поддержка, интеграция

В книге подробно рассказано, как написать качественный API и интегрировать его в имеющуюся систему.  Рассмотрено, как готовить спецификации API, работать с запросами, обслуживать мобильные и серверные API для взаимодействия с базами данных и обмена сообщениями, реализовывать нетривиальную бизнес-логику и подбирать подходящую схему API даже для самых сложных и нечетких задач. Описано, как обеспечивать слабую связность между компонентами, организовывать операции CRUD, осуществлять синхронный и асинхронный обмен данными, в частности, выполнять операции push и poll. Рассказано, как реализовать аутентификацию и идентификацию пользователей. Весь материал базируется на парадигме HTTP REST и позволяет развивать ее в соответствии с современными реалиями и меняющимися требованиями.

Для специалистов по проектированию и поддержке API

API в современных приложениях подобны стыковочным узлам и разъемам. Подход «API-first» — одна из самых горячих современных тем в разработке программного обеспечения.
Многие компании постепенно приходят к пониманию, что уровень API (интерфейсов прикладного программирования) может многократно умножить возможности компании, если спроектировать его правильно. Однако некачественные или неудобные в поддержке API могут превратиться в источник хронических проблем, так что лучше сразу делать их правильно и предусматривать поддержку и расширяемость.

Эта книга написана с целью изложения лучших практик разработки API. Книга состоит из шести разделов, посвящённых:

  • проектированию API;
  • паттернам дизайна API;
  • поддержке обратной совместимости;
  • HTTP API и архитектурным принципам REST;
  • SDK и библиотекам для пользовательского интерфейса (UI);
  • управлению API как продуктом.

С книгой вы научитесь:

  • проектировать интерфейсы и писать их спецификации;
  • организовывать синхронный и асинхронный обмен данными
  • реализовывать модели push и poll
  • обеспечивать слабую связность между компонентами
  • выполнять операции CRUD
  • программировать бизнес-логику API
  • гарантировать надёжную идентификацию и аутентификацию пользователей.

 

Константинов Сергей Сергеевич

Константинов Сергей работает с API уже больше десяти лет. Начинал свою карьеру в подразделении по разработке API Яндекс-Карт и со временем стал руководителем всего сервиса, где отвечал за техническую составляющую Яндекс-Карт и за управление продуктом. Обладает уникальным опытом построения крупномасштабных API мирового уровня для сервисов, которыми ежедневно пользуются десятки миллионов человек. В течение полутора лет проработал в составе группы технической архитектуры W3C.

Книгу “API как искусство: разработка, поддержка, интеграция” можно купить в нашем интенет-магазине.

Введение………………………………………………………………………………………………….. 9

О структуре этой книги……………………………………………………………………………………………………………….. 9

Определение API………………………………………………………………………………………………………………………… 10

Критерии качества API……………………………………………………………………………………………………………… 11

Выбор подхода к разработке API…………………………………………………………………………………………….. 13

Подход API-first………………………………………………………………………………………………………………………….. 13

Обратная совместимость…………………………………………………………………………………………………………… 14

О версионировании……………………………………………………………………………………………………………………. 15

Условные обозначения и терминология………………………………………………………………………………….. 15

Часть I. Проектирование API………………………………………………………. 19

Глава 1. Пирамида контекстов API. Определение области применения…. 21

Почему API?……………………………………………………………………………………………………………………………….. 23

Что и как?……………………………………………………………………………………………………………………………………. 23

Глава 2. Разделение уровней абстракции……………………………………………….. 24

Изоляция уровней абстракции………………………………………………………………………………………………….. 34

Потоки данных…………………………………………………………………………………………………………………………… 36

Глава 3. Разграничение областей ответственности…………………………………. 38

Сценарии использования………………………………………………………………………………………………………….. 39

Хелперы………………………………………………………………………………………………………………………………………. 42

Обработка ошибок…………………………………………………………………………………………………………………….. 43

Декомпозиция интерфейсов. Правило «7±2»…………………………………………………………………………… 44

Глава 4. Описание конечных интерфейсов…………………………………………….. 47

  1. Важное уточнение номер один: правила не должны применяться бездумно………………….. 47
  2. Явное лучше неявного…………………………………………………………………………………………………………… 48
  3. Указывайте использованные стандарты……………………………………………………………………………… 49
  4. Сущности должны именоваться конкретно…………………………………………………………………………. 50
  5. Не экономьте буквы……………………………………………………………………………………………………………….. 50
  6. Тип поля должен быть ясен из его названия………………………………………………………………………… 51
  7. Подобные сущности должны называться подобно и вести себя подобным образом……… 52
  8. Избегайте двойных отрицаний……………………………………………………………………………………………… 53
  9. Избегайте неявного приведения типов…………………………………………………………………………………. 53
  10. Декларируйте технические ограничения явно………………………………………………………………….. 55
  11. Любые запросы должны быть лимитированы………………………………………………………………….. 55
  12. Описывайте политику перезапросов………………………………………………………………………………….. 56
  13. Подсчитывайте трафик……………………………………………………………………………………………………….. 56
  14. Отсутствие результата — тоже результат………………………………………………………………………… 57
  15. Валидируйте ввод………………………………………………………………………………………………………………… 58
  16. Значения по умолчанию должны быть осмысленны……………………………………………………….. 60
  17. Ошибки должны быть информативными…………………………………………………………………………… 61
  18. Всегда показывайте неразрешимые ошибки прежде разрешимых…………………………………. 62
  19. Начинайте исправление ошибок с более глобальных……………………………………………………… 63
  20. Проанализируйте потенциальные взаимные блокировки……………………………………………….. 64
  21. Указывайте время жизни ресурсов и политики кеширования………………………………………….. 65
  22. Сохраняйте точность дробных чисел………………………………………………………………………………… 66
  23. Все операции должны быть идемпотентны………………………………………………………………………. 67
  24. Не изобретайте безопасность…………………………………………………………………………………………….. 69
  25. Помогайте партнерам не изобретать безопасность…………………………………………………………. 70
  26. Используйте глобально уникальные идентификаторы……………………………………………………. 71
  27. Предусмотрите ограничения доступа……………………………………………………………………………….. 72
  28. Не предоставляйте функциональность массового получения
    чувствительных данных………………………………………………………………………………………………………. 72
  29. Локализация и интернационализация……………………………………………………………………………….. 73

Часть II. Паттерны дизайна API…………………………………………………. 75

Глава 5. О паттернах проектирования в контексте API…………………………. 77

Принципы решения типовых проблем проектирования API………………………………………………….. 78

Глава 6. Аутентификация партнеров и авторизация вызовов API………….. 79

Глава 7. Стратегии синхронизации………………………………………………………… 81

Программные блокировки…………………………………………………………………………………………………………. 82

Оптимистичное управление параллелизмом………………………………………………………………………….. 83

Глава 8. Слабая консистентность…………………………………………………………… 84

Событийная консистентность…………………………………………………………………………………………………… 84

Риски перехода к событийной консистентности…………………………………………………………………….. 86

Глава 9. Асинхронность и управление временем……………………………………. 89

Глава 10. Списки и организация доступа к ним…………………………………….. 93

Иммутабельные списки……………………………………………………………………………………………………………… 97

Пополняемые списки, иммутабельные данные……………………………………………………………………….. 97

Общий сценарий………………………………………………………………………………………………………………………. 101

Глава 11. Двунаправленные потоки данных. Push- и poll-модели…………. 103

Доставка сообщений на клиентское устройство………………………………………………………………….. 104

  1. Дуплексные соединения………………………………………………………………………………………………. 104
  2. Раздельный канал обратного вызова и асинхронные потоки событий………………….. 105
  3. Сторонние сервисы отправки push-уведомлений……………………………………………………… 105

Использование push-технологий в публичном API………………………………………………………………. 106

Доставка сообщений backend-to-backend…………………………………………………………………………….. 107

Типичные проблемы интеграции через webhook………………………………………………………………….. 108

Очереди сообщений…………………………………………………………………………………………………………………. 110

Глава 12. Асинхронная обработка событий.
Атомарность массовых изменений……………………………………………………….. 111

Глава 13. Частичные обновления…………………………………………………………. 119

Варианты решения………………………………………………………………………………………………………………….. 120

Разрешение конфликтов совместного редактирования………………………………………………………… 124

Глава 14. Деградация и предсказуемость……………………………………………… 125

Часть III. Обратная совместимость……………………………………… 127

Глава 15. Постановка проблемы обратной совместимости…………………… 129

Фрагментация клиентских приложений………………………………………………………………………………… 130

Эволюция предметной области……………………………………………………………………………………………… 132

Дрифт платформ………………………………………………………………………………………………………………………. 132

Обратная совместимость на уровне спецификаций……………………………………………………………… 133

Политика обратной совместимости……………………………………………………………………………………….. 134

Глава 16. О ватерлинии айсберга…………………………………………………………. 136

  1. Предоставляйте минимальный объем функциональности………………………………………………. 136
  2. Избегайте «серых зон» и недосказанности………………………………………………………………………… 137
  3. Фиксируйте неявные договоренности………………………………………………………………………………… 137
  4. Продуктовая логика тоже должна быть обратно совместимой………………………………………. 140

Глава 17. Расширение через абстрагирование………………………………………. 141

Границы применимости………………………………………………………………………………………………………….. 144

Глава 18. Сильная связность и сопутствующие проблемы…………………… 145

Правило контекстов…………………………………………………………………………………………………………………. 147

Глава 19. Слабая связность………………………………………………………………….. 151

Инверсия ответственности………………………………………………………………………………………………………. 156

Делегируй!………………………………………………………………………………………………………………………… 158

Интерфейсы как универсальный паттерн……………………………………………………………………………… 159

Глава 20. «Блокнот душевного покоя»…………………………………………………. 161

  1. Помните о подводной части айсберга……………………………………………………………………………….. 161
  2. Тестируйте формальные интерфейсы………………………………………………………………………………… 161
  3. Изолируйте зависимости…………………………………………………………………………………………………….. 162
  4. Реализуйте функциональность своего API поверх публичных интерфейсов…………………. 162
  5. Заведите блокнот…………………………………………………………………………………………………………………. 163

Часть IV. HTTP API и архитектурные принципы REST……….. 165

Глава 21. О концепции HTTP API. Парадигмы разработки
клиент-серверного взаимодействия………………………………………………………. 167

Глава 22. Преимущества и недостатки HTTP (REST) API в сравнении с альтернативными технологиями……………………………………………………………………………………….. 171

  1. Машиночитаемость метаданных……………………………………………………………………………………….. 173
  2. Качество решений……………………………………………………………………………………………………………….. 174
  3. Вопросы производительности……………………………………………………………………………………………. 175

Преимущества и недостатки формата JSON…………………………………………………………………………. 176

Выбор технологии разработки клиент-серверного API……………………………………………………….. 177

Технология gRPC……………………………………………………………………………………………………………… 178

Технология GraphQL……………………………………………………………………………………………………….. 178

Мифология REST……………………………………………………………………………………………………………………… 179

Глава 23. Составляющие HTTP-запросов и их семантика……………………. 182

  1. URL……………………………………………………………………………………………………………………………………….. 183
  2. Заголовки……………………………………………………………………………………………………………………………… 185
  3. HTTP-глаголы………………………………………………………………………………………………………………………. 186
  4. Статус-коды…………………………………………………………………………………………………………………………. 188

Важное замечание о кешировании………………………………………………………………………………………… 189

Важное замечание о консистентности…………………………………………………………………………………… 189

Глава 24. Организация HTTP API согласно принципам REST……………… 191

Пример построения HTTP API………………………………………………………………………………………………… 192

Авторизация stateless-запросов………………………………………………………………………………………………. 199

Глава 25. Разработка номенклатуры URL-ресурсов. CRUD-операции….. 200

  1. Где заканчиваются метаданные операции и начинаются «просто» данные
    и насколько допустимо дублировать поля и там и там?………………………………………………….. 201
  2. Каким образом организовывать эндпойнты, связывающие две сущности, междукоторыми нет явных отношений подчинения?………………………………………………………………………………………………………………………….. 202
  3. Насколько строго должна выдерживаться буквальная интерпретация
    конструкции ГЛАГОЛ /ресурс?……………………………………………………………………………………………. 202

CRUD-операции……………………………………………………………………………………………………………………….. 204

  1. Создание……………………………………………………………………………………………………………………….. 205
  2. Чтение……………………………………………………………………………………………………………………………. 206
  3. Редактирование……………………………………………………………………………………………………………. 207
  4. Удаление……………………………………………………………………………………………………………………….. 207

CRUD-операции в реальной жизни………………………………………………………………………………… 207

Глава 26. Работа с ошибками в HTTP API……………………………………………. 209

Клиентские ошибки…………………………………………………………………………………………………………………. 210

Серверные ошибки…………………………………………………………………………………………………………………… 213

Организация системы ошибок в HTTP API на практике………………………………………………………. 215

Глава 27. Заключительные положения и общие рекомендации……………. 215

Часть V. SDK- и UI-библиотеки………………………………………………….. 219

Глава 28. Терминология. Обзор технологий разработки SDK……………….. 221

Выбор фреймворка для разработки UI-компонентов…………………………………………………………… 222

Глава 29. SDK: проблемы и решения……………………………………………………. 223

Кодогенерация…………………………………………………………………………………………………………………………. 228

Другие инструменты……………………………………………………………………………………………………………….. 229

Глава 30. Проблемы встраивания UI-компонентов………………………………. 229

Проблемы…………………………………………………………………………………………………………………………………. 230

  1. Объединение в одном объекте разнородной функциональности…………………………….. 231
  2. Общее владение ресурсами…………………………………………………………………………………………. 231
  3. Множественная иерархия подчинения сущностей…………………………………………………… 232

Глава 31. Декомпозиция UI-компонентов…………………………………………….. 234

Глава 32. MV*-фреймворки………………………………………………………………….. 247

Паттерн «модель»…………………………………………………………………………………………………………………….. 249

Backend-Driven UI……………………………………………………………………………………………………………………. 251

Глава 33. Разделяемые ресурсы и асинхронные блокировки……………….. 254

Глава 34. Вычисляемые свойства…………………………………………………………. 258

Варианты подходов………………………………………………………………………………………………………………… 259

Вычисленные значения…………………………………………………………………………………………………………… 260

Глава 35. Заключение к части V………………………………………………………….. 260

Часть VI. API как продукт…………………………………………………………… 261

Глава 36. Продукт API. Бизнес-модели API………………………………………….. 263

Основные модели монетизации API……………………………………………………………………………………….. 265

  1. Разработчик = конечный пользователь……………………………………………………………………… 265
  2. API = основной и/или единственный способ доступа к сервису……………………………… 266
  3. API = партнерская программа…………………………………………………………………………………….. 266
  4. API = дополнительный доступ к сервису…………………………………………………………………… 267
  5. API = площадка для рекламы……………………………………………………………………………………… 268
  6. API = самореклама и самопиар…………………………………………………………………………………… 268
  7. API = инструмент получения обратной связи и UGC………………………………………………… 269
  8. Терраформирование…………………………………………………………………………………………………….. 269
  9. «Серая зона»…………………………………………………………………………………………………………………. 270

Подход API-first……………………………………………………………………………………………………………………….. 270

Глава 37. Формирование продуктового вдения………………………………….. 271

Продуктовое вдение API……………………………………………………………………………………………………….. 271

Проверка продуктовых гипотез……………………………………………………………………………………………… 272

Глава 38. Взаимодействие с разработчиками и бизнес-аудиторией………. 273

Open Source………………………………………………………………………………………………………………………………. 275

Фрагментация аудитории……………………………………………………………………………………………………….. 276

Взаимодействие с бизнес-аудиторией…………………………………………………………………………………… 277

Глава 39. Линейка сервисов API………………………………………………………….. 278

Горизонтальное разделение сервисов API……………………………………………………………………………. 278

Вертикальное разделение сервисов API………………………………………………………………………………… 279

Глава 40. Ключевые показатели эффективности API……………………………. 281

SLA……………………………………………………………………………………………………………………………………………. 283

Сравнение с конкурентами……………………………………………………………………………………………………… 284

Глава 41. Идентификация пользователей и борьба с фродом……………….. 285

Идентификация приложений и их владельцев………………………………………………………………………. 285

Идентификация конечных пользователей……………………………………………………………………………… 288

Глава 42. Технические способы борьбы с несанкционированным доступом к API          289

  1. Идентификация подозрительных пользователей……………………………………………………………… 289
  2. Запрос дополнительного фактора аутентификации………………………………………………………… 290
  3. Ограничение доступа………………………………………………………………………………………………………….. 290

Противодействие краже ключей…………………………………………………………………………………………….. 292

Глава 43. Поддержка пользователей API……………………………………………… 293

Документация…………………………………………………………………………………………………………………………… 295

Виды справочных материалов……………………………………………………………………………………………….. 296

  1. Спецификация/справочник/референс…………………………………………………………………………. 296
  2. Примеры кода……………………………………………………………………………………………………………….. 297
  3. Песочницы…………………………………………………………………………………………………………………….. 297
  4. Руководство (туториал)……………………………………………………………………………………………….. 298
  5. Часто задаваемые вопросы и база знаний…………………………………………………………………. 299
  6. Офлайн-документация…………………………………………………………………………………………………. 299

Проблемы дублирования контента………………………………………………………………………………………… 299

Качество документации………………………………………………………………………………………………………….. 300

Тестовая среда…………………………………………………………………………………………………………………………. 300

  1. API среды тестирования………………………………………………………………………………………………. 301
  2. Симулятор предопределенных сценариев…………………………………………………………………. 302

Автоматизация тестирования…………………………………………………………………………………………………. 302

Глава 44. Управление ожиданиями………………………………………………………. 303

Версионирование и жизненный цикл приложений……………………………………………………………….. 303

Поддержка платформ………………………………………………………………………………………………………………. 304

Движение вперед……………………………………………………………………………………………………………………… 304

Опубликовано

Вышла книга “Проектирование архитектуры API: Как правильно проектировать, развивать и эксплуатировать API”

Проектирование архитектуры API: Как правильно проектировать, развивать и эксплуатировать API

Фундаментальная книга о разработке и реализации API (программных интерфейсов приложений). Разобраны базовые вопросы обмена информацией в микросервисной архитектуре, обработка запросов на сайтах и в веб-приложениях (парадигма REST). Показано, как поступательно развивать имеющиеся API, не переписывая их, а также как создать API любой сложности с нуля с учётом возможностей и ограничений конкретной системы. Книга поможет реализовать на предприятии архитектуру сервисной сети и подготовить ресурсы компании к миграции в облако.

Для архитекторов программного обеспечения

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

Книга отлично написана, полна советов, подсказок и практических примеров
Стефания Чаплин, GitLab&DevStefOps

Как правильно проектировать, развивать и эксплуатировать API

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

• Изучите основы работы с API и архитектурные паттерны, позволяющие собрать API и платформу с нуля
• На практических примерах разберите, как проектировать, собирать и тестировать системы на основе API
• Развёртывайте, используйте, конфигурируйте ключевые компоненты API
• Пользуйтесь шлюзами API и сервисными сетями там, где они нужны
• Внедрите в компании ключевые практики обеспечения безопасности и научитесь находить в архитектуре API наиболее распространённые уязвимости
• Защитите данные и API при помощи моделирования угроз, задействовав такие технологии, как OAuth2 и TLS
• Научитесь развивать существующие системы, подготавливая их на уровне API к миграции в облако

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

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

Книгу “Проектирование архитектуры API: Как правильно проектировать, развивать и эксплуатировать API” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Вступительное слово………………………………………………………………………………. 15

Предисловие…………………………………………………………………………………………… 17

Для чего мы написали эту книгу?…………………………………………………………………………………………….. 17

Почему стоит прочитать эту книгу?………………………………………………………………………………………… 17

Для кого эта книга?……………………………………………………………………………………………………………………. 18

Разработчик…………………………………………………………………………………………………………………….. 18

Случайный архитектор………………………………………………………………………………………………….. 18

Архитектор решений, корпоративный архитектор……………………………………………………… 19

Чему вы научитесь?…………………………………………………………………………………………………………………… 19

О чем не расскажет эта книга?…………………………………………………………………………………………………. 20

Условные обозначения……………………………………………………………………………………………………………… 20

Использование примеров кода…………………………………………………………………………………………………. 21

Платформа онлайн-обучения O’Reilly……………………………………………………………………………………… 22

Как с нами связаться?………………………………………………………………………………………………………………… 22

Благодарности…………………………………………………………………………………………………………………………… 22

Благодарности Джеймса Гофа……………………………………………………………………………………… 23

Благодарности Дэниэла Брайанта……………………………………………………………………………….. 23

Благодарности Мэтью Оберна……………………………………………………………………………………… 23

Введение………………………………………………………………………………………………… 25

Путешествие по архитектуре……………………………………………………………………………………………………. 25

Что же такое API?………………………………………………………………………………………………………………………. 26

Практический пример конференц-системы: запуск………………………………………………………………… 27

Типы API в практическом примере конференции………………………………………………………… 29

Причины изменения конференц-системы……………………………………………………………………… 29

От многоуровневой архитектуры к моделированию API……………………………………………. 30

Практический пример: эволюционный этап………………………………………………………………… 30

Трафик север-юг……………………………………………………………………………………………………… 31

Трафик восток-запад……………………………………………………………………………………………… 32

API-инфраструктура и шаблоны трафика……………………………………………………………………. 32

Дорожная карта для практического примера конференции………………………………………. 32

Использование диаграмм C4…………………………………………………………………………………………………….. 33

Диаграмма контекста C4……………………………………………………………………………………………….. 33

Диаграмма контейнеров C4…………………………………………………………………………………………… 34

Диаграмма компонентов C4………………………………………………………………………………………….. 34

Использование записей архитектурных решений………………………………………………………………….. 34

ADR-запись эволюции участников……………………………………………………………………………….. 35

Осваиваем API: руководства ADR………………………………………………………………………………… 36

Заключение………………………………………………………………………………………………………………………………… 37

Часть I. Проектирование, создание и тестирование API… 39

Глава 1. Проектирование, создание и спецификация API………………………. 41

Практический пример: проектирование API Участник………………………………………………………….. 41

Знакомство с REST…………………………………………………………………………………………………………………….. 42

Знакомство с REST и HTTP на примере……………………………………………………………………….. 42

Модель зрелости Ричардсона……………………………………………………………………………………….. 43

Введение в API удаленного вызова процедур (RPC)………………………………………………………………. 44

Краткое упоминание о языке GraphQL……………………………………………………………………………………. 45

Стандарты и структура REST API…………………………………………………………………………………………… 47

Коллекции и пагинация………………………………………………………………………………………………….. 48

Фильтрация коллекций…………………………………………………………………………………………………… 49

Обработка ошибок…………………………………………………………………………………………………………. 49

Руководство ADR: выбор стандарта API……………………………………………………………………… 50

Определение REST API с помощью OpenAPI………………………………………………………………………….. 51

Практическое применение спецификаций OpenAPI……………………………………………………………….. 51

Генерация кода……………………………………………………………………………………………………………….. 52

Валидация OpenAPI……………………………………………………………………………………………………….. 52

Примеры и создание имитаций……………………………………………………………………………………… 53

Обнаружение изменений………………………………………………………………………………………………… 54

Версионирование API……………………………………………………………………………………………………………….. 54

Семантическое версионирование…………………………………………………………………………………. 55

Спецификация и версионирование OpenAPI………………………………………………………………… 55

Реализация RPC с помощью gRPC……………………………………………………………………………………………. 57

Моделирование обмена данными и выбор формата API………………………………………………………. 59

Сервисы с высоким уровнем трафика…………………………………………………………………………… 59

Большие полезные нагрузки при обмене данными……………………………………………………… 59

Преимущества производительности HTTP/2……………………………………………………………….. 60

Старые форматы…………………………………………………………………………………………………………….. 60

Рекомендация: моделирование обменов………………………………………………………………………………….. 61

Различные спецификации………………………………………………………………………………………………………….. 61

Существует ли «золотая спецификация»?……………………………………………………………………. 61

Проблемы комбинированных спецификаций………………………………………………………………. 63

Заключение………………………………………………………………………………………………………………………………… 63

Глава 2. Тестирование API…………………………………………………………………….. 65

Сценарий конференц-системы для этой главы……………………………………………………………………….. 66

Стратегии тестирования……………………………………………………………………………………………………………. 66

Тестовый квадрант…………………………………………………………………………………………………………. 67

Тестовая пирамида…………………………………………………………………………………………………………. 69

Руководство ADR по стратегиям тестирования…………………………………………………………… 71

Контрактное тестирование……………………………………………………………………………………………………….. 72

Почему часто предпочтительнее проводить контрактное тестирование?……………….. 72

Порядок реализации контракта…………………………………………………………………………………….. 73

Контракты производителя…………………………………………………………………………………….. 75

Контракты, ориентированные на потребителя…………………………………………………… 76

Наш пример: использование CDC………………………………………………………………………… 76

Обзор методологии контрактов…………………………………………………………………………….. 76

Фреймворки для контрактного тестирования……………………………………………………… 77

Хранение и публикация контрактов API……………………………………………………………… 77

Руководство ADR: контрактное тестирование…………………………………………………………….. 78

Тестирование компонентов API……………………………………………………………………………………………….. 79

Контрактное тестирование в сравнении с тестированием компонентов…………………… 80

Практический пример: тестирование компонентов для проверки поведения…………… 80

Интеграционное тестирование API………………………………………………………………………………………….. 82

Использование серверов-заглушек: почему и как?……………………………………………………… 82

Руководство ADR: интеграционное тестирование………………………………………………………. 84

Контейнеризация тестовых компонентов: Testcontainers…………………………………………… 85

Практический пример: применение Testcontainers для верификации интеграций……. 85

Сквозное тестирование……………………………………………………………………………………………………………… 87

Автоматизация сквозной валидации…………………………………………………………………………….. 87

Типы сквозных тестов…………………………………………………………………………………………………….. 88

Руководство ADR: сквозное тестирование…………………………………………………………………… 89

Заключение………………………………………………………………………………………………………………………………… 90

Часть II. Управление трафиком API………………………………………….. 91

Глава 3. API-шлюзы: управление входящим трафиком………………………….. 93

Является ли API-шлюз единственным решением?………………………………………………………………….. 93

Рекомендация: прокси, балансировщик нагрузки или API-шлюз………………………………………….. 94

Практический пример: открытие доступа к сервису Участник для потребителей……………… 95

Что такое API-шлюз?…………………………………………………………………………………………………………………. 96

Какие функциональные возможности предоставляет API-шлюз?………………………………………… 96

Где выполняется развертывание API-шлюза?………………………………………………………………………… 97

Как API-шлюз интегрируется с другими технологиями на периферии?……………………………….. 98

Зачем нужен API-шлюз?……………………………………………………………………………………………………………. 99

Снижение связанности: адаптер/фасад между фронтендами и бэкендами……………. 100

Упрощение использования: агрегирование/преобразование бэкенд-сервисов……… 101

Защита API от чрезмерного использования и злоупотреблений: обнаружение и устранение угроз     102

Понимание того, как используются API: наблюдаемость………………………………………… 104

Управление API как продуктами: менеджмент жизненного цикла API…………………… 104

Монетизация API: управление учетными записями, биллинг и оплата………………….. 106

Современная история API-шлюзов………………………………………………………………………………………… 106

1990-е годы и далее: аппаратные балансировщики нагрузки…………………………………. 107

Начало 2000-х годов и далее: программные балансировщики нагрузки……………….. 108

Середина 2000-х: контроллеры доставки приложений (ADC)…………………………………. 109

Начало 2010-х: API-шлюзы первого поколения……………………………………………………….. 109

2015 год и далее: API-шлюзы второго поколения…………………………………………………….. 111

Текущая таксономия API-шлюзов………………………………………………………………………………………….. 112

Традиционные корпоративные шлюзы………………………………………………………………………. 112

Микросервисы/микрошлюзы………………………………………………………………………………………. 113

Шлюзы сервисных сетей……………………………………………………………………………………………… 113

Сравнение типов API-шлюзов……………………………………………………………………………………… 113

Практический пример: развитие конференц-системы с помощью API-шлюза…………………… 115

Установка Ambassador Edge Stack в Kubernetes………………………………………………………… 116

Настройка сопоставления URL-путей с бэкенд-сервисами……………………………………… 116

Настройка сопоставлений с использованием маршрутизации на основе хостов….. 117

Развертывание API-шлюзов: понимание и управление отказами……………………………………….. 118

API-шлюз как единая точка отказа…………………………………………………………………………….. 118

Обнаружение и принадлежность проблем…………………………………………………………………. 119

Разрешение инцидентов и проблем…………………………………………………………………………….. 119

Снижение рисков………………………………………………………………………………………………………….. 120

Общие ошибки при внедрении API-шлюзов………………………………………………………………………….. 121

Loopback API-шлюза……………………………………………………………………………………………………. 121

Шлюз API в качестве корпоративной сервисной шины (ESB,
Enterprise Service Bus)…………………………………………………………………………………………………… 121

Черепахи (API-шлюзы) — и нет им конца………………………………………………………………….. 122

Выбор API-шлюза……………………………………………………………………………………………………………………. 122

Определение требований…………………………………………………………………………………………….. 122

Создание или покупка?………………………………………………………………………………………………… 123

Руководство ADR: выбор API-шлюза…………………………………………………………………………. 123

Заключение………………………………………………………………………………………………………………………………. 124

Глава 4. Сервисные сети: управление трафиком между сервисами………. 127

Сервисная сеть — это единственное решение?…………………………………………………………………….. 127

Рекомендация: стоит ли внедрять технологию сервисной сети?…………………………………………. 128

Практический пример: извлечение функциональности сессий в сервис…………………………….. 128

Что такое сервисная сеть?………………………………………………………………………………………………………. 130

Какие функциональные возможности предоставляет сервисная сеть?………………………………. 132

Где развертывается сервисная сеть?……………………………………………………………………………………… 133

Как сервисная сеть интегрируется с другими сетевыми технологиями?……………………………. 134

Зачем нужна сервисная сеть?…………………………………………………………………………………………………. 135

Тонкий контроль маршрутизации, надежности и управления трафиком……………….. 136

Прозрачная маршрутизация и нормализация имен сервисов………………………….. 136

Надежность…………………………………………………………………………………………………………… 137

Продвинутая маршрутизация трафика: придание формы, контроль, разделение и зеркалирование           138

Придание формы трафику…………………………………………………………………………… 138

Контроль трафика……………………………………………………………………………………….. 139

Обеспечение прозрачной наблюдаемости…………………………………………………………………. 139

Обеспечение безопасности: транспортная безопасность, аутентификация и авторизация      140

Поддержка кросс-функционального взаимодействия на разных языках………………… 140

Разделение управления входящим и межсервисным трафиком……………………………….. 141

Эволюция сервисных сетей…………………………………………………………………………………………………….. 142

Ранняя история и мотивация……………………………………………………………………………………….. 143

Шаблоны реализации………………………………………………………………………………………………….. 145

Библиотеки……………………………………………………………………………………………………………. 145

Sidecar……………………………………………………………………………………………………………………. 146

Библиотеки gRPC без прокси………………………………………………………………………………. 148

Без sidecar: реализации ядра операционной системы (eBPF)…………………………… 150

Таксономия сервисных сетей………………………………………………………………………………………………….. 151

Практический пример: использование сервисной сети для маршрутизации, наблюдаемости и безопасности              152

Маршрутизация с помощью Istio………………………………………………………………………………… 152

Наблюдение за трафиком с помощью Linkerd…………………………………………………………… 154

Сегментация сети с помощью Consul………………………………………………………………………….. 156

Развертывание сервисной сети: понимание и управление отказами………………………………….. 158

Сервисная сеть как единая точка отказа……………………………………………………………………. 159

Общие проблемы внедрения сервисной сети………………………………………………………………………… 159

Сервисная сеть в качестве ESB……………………………………………………………………………………. 159

Сервисная сеть в качестве шлюза……………………………………………………………………………….. 159

Слишком много сетевых уровней……………………………………………………………………………….. 160

Выбор сервисной сети…………………………………………………………………………………………………………….. 160

Определение требований…………………………………………………………………………………………….. 160

Создание или покупка?………………………………………………………………………………………………… 160

Руководство ADR: выбор сервисной сети………………………………………………………………….. 161

Заключение………………………………………………………………………………………………………………………………. 162

Часть III. Эксплуатация и безопасность API……………………… 165

Глава 5. Развертывание и релизы API………………………………………………….. 167

Отделение развертывания от релиза……………………………………………………………………………………… 167

Практический пример: установка флагов функций…………………………………………………… 168

Управление трафиком………………………………………………………………………………………………….. 170

Практический пример: моделирование релизов в конференц-системе……………………………….. 171

Жизненный цикл API……………………………………………………………………………………………………. 171

Сопоставление стратегий релизов с жизненным циклом………………………………………….. 172

Руководство ADR: отделение релиза от развертывания с помощью
управления трафиком и флагов функций……………………………………………………………………. 173

Стратегии релизов…………………………………………………………………………………………………………………… 173

Канареечный релиз………………………………………………………………………………………………………. 174

Зеркалирование трафика…………………………………………………………………………………………….. 176

Сине-зеленое развертывание………………………………………………………………………………………. 177

Практический пример: развертывание с помощью Argo Rollouts……………………………………….. 178

Мониторинг успешного выполнения и выявление отказов………………………………………………….. 181

Три столпа наблюдаемости………………………………………………………………………………………… 181

Важные метрики для API……………………………………………………………………………………………… 183

Считывание сигналов…………………………………………………………………………………………………… 184

Прикладные решения для эффективных релизов программного обеспечения…………………… 184

Кеширование ответов…………………………………………………………………………………………………… 185

Распространение заголовков на уровне приложений……………………………………………….. 185

Ведение журнала для помощи в отладке…………………………………………………………………… 185

Рассмотрение субъективной платформы……………………………………………………………………. 186

Руководство ADR: субъективные платформы……………………………………………………………. 186

Заключение………………………………………………………………………………………………………………………………. 187

Глава 6. Операционная безопасность: моделирование угроз для API…… 189

Практический пример: применение OWASP к API участников……………………………………………. 189

Риск при отсутствии защиты внешних API……………………………………………………………………………. 191

Моделирование угроз 101………………………………………………………………………………………………………. 192

Мыслите как злоумышленник………………………………………………………………………………………………… 193

Как построить модель угрозы?………………………………………………………………………………………………. 194

Этап 1: определение целей………………………………………………………………………………………….. 195

Этап 2: сбор нужной информации………………………………………………………………………………. 195

Этап 3: декомпозиция системы……………………………………………………………………………………. 195

Этап 4: выявление угроз и включение их в модель STRIDE…………………………………….. 196

Spoofing (Спуфинг)……………………………………………………………………………………………….. 199

Tampering (Подмена)……………………………………………………………………………………………. 199

Внедрение полезной нагрузки……………………………………………………………………. 199

Массовое переназначение………………………………………………………………………….. 200

Repudiation (Отрицание)……………………………………………………………………………………… 201

Information disclosure (Разглашение сведений)………………………………………………….. 202

Чрезмерное раскрытие данных………………………………………………………………….. 202

Некорректное управление активами…………………………………………………………. 203

Denial of Service (Отказ в обслуживании)…………………………………………………………… 204

Ограничение количества запросов и сброс нагрузки………………………………. 204

Elevation of privilege (Расширение полномочий)……………………………………………….. 206

Неправильная конфигурация безопасности………………………………………………………. 206

Терминирование TLS-соединений……………………………………………………………… 207

Совместное использование ресурсов разными источниками………………….. 207

Усиление директив безопасности………………………………………………………………. 208

Этап 5: Оценка рисков угроз……………………………………………………………………………………….. 208

Этап 6: Валидация……………………………………………………………………………………………………….. 210

Заключение………………………………………………………………………………………………………………………………. 211

Глава 7. Аутентификация и авторизация API………………………………………. 213

Аутентификация………………………………………………………………………………………………………………………. 213

Аутентификация конечных пользователей на основе токенов………………………………… 215

Аутентификация между системами…………………………………………………………………………….. 216

Почему не следует смешивать ключи и пользователей?………………………………………….. 216

OAuth2………………………………………………………………………………………………………………………………………. 217

Роль сервера авторизации при взаимодействии с API………………………………………………. 218

Веб-токены JSON (JWT)……………………………………………………………………………………………….. 218

Кодирование и верификация веб-токенов JSON………………………………………………… 220

Терминология и механизмы предоставления доступа OAuth2………………………………… 221

Руководство ADR: стоит ли рассматривать возможность
использования OAuth2?……………………………………………………………………………………………….. 222

Authorization Code Grant: предоставление доступа по коду авторизации……………… 223

Authorization Code Grant (+ PKCE)……………………………………………………………………… 225

Практический пример: доступ к API Участник с помощью Authorization Code Grant        226

Refresh-токены………………………………………………………………………………………………………………. 227

Client Credentials Grant: предоставление доступа к учетным данным клиента………. 227

Практический пример: доступ к API Участник из CFP-системы
при помощи Client Credentials Grant……………………………………………………………………. 228

Дополнительные варианты предоставления доступа OAuth2…………………………………. 228

Руководство ADR: какой из грантов OAuth2 стоит поддерживать………………………….. 229

Области видимости OAuth2…………………………………………………………………………………………. 229

Практический пример: применение областей видимости OAuth2
к API Участник……………………………………………………………………………………………………… 230

Обеспечение выполнения авторизации………………………………………………………………………. 231

Вкратце об OIDC……………………………………………………………………………………………………………………… 232

Протокол SAML 2.0…………………………………………………………………………………………………………………. 234

Заключение………………………………………………………………………………………………………………………………. 234

Часть IV. Эволюционная архитектура
с применением API………………………………………………………………………. 235

Глава 8. Перепроектирование приложений на архитектуру,
управляемую API…………………………………………………………………………………. 237

Зачем использовать API для развития системы?………………………………………………………………….. 237

Создание полезных абстракций: повышение связности…………………………………………… 238

Уточнение границ домена: продвижение слабой связанности………………………………… 239

Практический пример: установление границ домена сервиса Участник…………………………… 240

Варианты архитектуры конечного состояния………………………………………………………………………. 241

Монолит………………………………………………………………………………………………………………………… 241

Сервис-ориентированная архитектура (SOA)……………………………………………………………. 241

Микросервисы………………………………………………………………………………………………………………. 242

Функции…………………………………………………………………………………………………………………………. 243

Управление эволюционным процессом…………………………………………………………………………………. 243

Определите свои цели………………………………………………………………………………………………….. 243

Использование функций приспособленности……………………………………………………………. 244

Декомпозиция системы на модули……………………………………………………………………………… 245

Создание API как «швов» для расширения………………………………………………………………… 247

Определение точек приложения усилий в системе……………………………………………………. 248

Непрерывная поставка и верификация………………………………………………………………………. 249

Архитектурные паттерны для эволюционирующих систем с API………………………………………. 249

Паттерн «Душитель»……………………………………………………………………………………………………. 249

Паттерны «Фасад» и «Адаптер»………………………………………………………………………………….. 250

Паттерн «Слоеный пирог API»……………………………………………………………………………………. 251

Определение болевых точек и возможностей……………………………………………………………………….. 252

Вопросы модернизации и технического сопровождения…………………………………………. 252

Проблемы с производительностью…………………………………………………………………………….. 253

Разрушение зависимостей: API с сильной связанностью…………………………………………. 253

Заключение………………………………………………………………………………………………………………………………. 254

Глава 9. Использование инфраструктуры API для эволюции
в сторону облачных платформ……………………………………………………………… 255

Практический пример: перенос сервиса Участник в облако……………………………………………….. 255

Выбор стратегии миграции в облако…………………………………………………………………………………….. 256

Сохранение или пересмотр…………………………………………………………………………………………. 257

Перенос………………………………………………………………………………………………………………………….. 258

Смена платформы………………………………………………………………………………………………………… 258

Новая покупка………………………………………………………………………………………………………………. 259

Рефакторинг/смена архитектуры………………………………………………………………………………… 259

Отключение…………………………………………………………………………………………………………………… 260

Практический пример: смена платформы сервиса Участник для переноса его в облако… 260

Роль API-менеджмента……………………………………………………………………………………………………………. 260

Север-юг и восток-запад: размывание границ управления трафиком………………………………… 262

Начните с периферии и работайте вглубь…………………………………………………………………. 262

Пересекая границы: маршрутизация по сетям…………………………………………………………… 262

От зональной архитектуры к принципу нулевого доверия………………………………………………….. 263

Попадание в зону………………………………………………………………………………………………………….. 263

Никому не доверять и проверять…………………………………………………………………………………. 265

Роль сервисной сети в архитектурах с нулевым доверием………………………………………. 266

Дополнение сервисной сети сетевыми политиками………………………………………….. 267

Заключение………………………………………………………………………………………………………………………………. 269

Глава 10. Подведение итогов……………………………………………………………….. 271

Практический пример: оглянитесь на пройденный путь……………………………………………………… 271

API, Закон Конвея и ваша организация…………………………………………………………………………………. 277

Понимание типов решений……………………………………………………………………………………………………… 278

Подготовка к будущему………………………………………………………………………………………………………….. 278

Асинхронное взаимодействие……………………………………………………………………………………… 278

Протокол HTTP/3…………………………………………………………………………………………………………. 279

Сеть на основе платформы………………………………………………………………………………………….. 279

Что дальше: как продолжать изучать архитектуру API?…………………………………………………….. 279

Постоянное совершенствование базовых знаний……………………………………………………… 280

Следите за новостями в отрасли…………………………………………………………………………………. 280

Радары, квадранты и трендовые отчеты……………………………………………………………………. 281

Изучение лучших практик и примеров использования…………………………………………….. 281

Обучение на практике………………………………………………………………………………………………….. 282

Обучение через преподавание…………………………………………………………………………………….. 282

Предметный указатель…………………………………………………………………………. 283

Об авторах……………………………………………………………………………………………. 287

Об изображении на обложке………………………………………………………………… 287

Дэниэл Брайант

Дэниэл Брайант (Daniel Bryant) — глава отдела по взаимодействию с разработчиками в компании Ambassador Labs, Java-чемпион. Эксперт в инструментарии DevOps, облачных и контейнерных платформах, микросервисах.

 

 

Джеймс Гоф

Гоф Джеймс (James Gough) — заслуженный инженер в компании Morgan Stanley, Java-чемпион, соавтор книги «Optimizing Java».

 

 

Мэтью Оберн

Оберн Мэтью (Matthew Auburn) — вице-президент компании Morgan Stanley. Занимался разработкой финансовых систем, мобильных и веб-приложений, обеспечением безопасности API.