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

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

Добавить комментарий