From 170bcc8f14f9300e641452b1f06cfcb3f2e71963 Mon Sep 17 00:00:00 2001 From: Sergey Konstantinov Date: Mon, 2 Oct 2023 22:27:48 +0300 Subject: [PATCH] fresh build --- docs/API.en.epub | Bin 3347741 -> 7523364 bytes docs/API.en.html | 2 +- docs/API.en.pdf | Bin 11950209 -> 11950206 bytes docs/API.ru.epub | Bin 3524570 -> 7700247 bytes docs/API.ru.html | 92 ++++++++++++++++++++++---------------------- docs/API.ru.pdf | Bin 12128000 -> 12128104 bytes src/cover_embed.jpg | Bin 0 -> 764304 bytes src/cover_embed.png | Bin 480728 -> 4668296 bytes 8 files changed, 47 insertions(+), 47 deletions(-) create mode 100644 src/cover_embed.jpg diff --git a/docs/API.en.epub b/docs/API.en.epub index a28f34658227706cb44df19308623551e30cf395..ce18d8adb6f709f928a6efc264d519814659e1f2 100644 GIT binary patch delta 4728595 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 -

NB: третий (и отчасти второй) варианты естественным образом приводят нас к схеме, характерной для клиентских устройств: push-уведомление само по себе не почти содержит полезной информации и только является сигналом для внеочередного поллинга.

+

NB: третий (и отчасти второй) варианты естественным образом приводят нас к схеме, характерной для клиентских устройств: push-уведомление само по себе почти не содержит полезной информации и только является сигналом для внеочередного поллинга.

Применение техник с отправкой только ограниченного набора данных помимо усложнения схемы взаимодействия и увеличения количества запросов имеет ещё один важный недостаток. Если в варианте 1 (сообщение содержит в себе все релевантные данные) мы можем рассчитывать на то, что возврат кода успеха подписчиком эквивалентен успешной обработке сообщения партнёром (что, вообще говоря, тоже не гарантировано, т.к. партнёр может использовать асинхронные схемы), то для вариантов 2 и 3 это заведомо не так: для обработки сообщений партнёр должен выполнить дополнительные действия, начиная с получения нужных данных о заказе. В этом случае нам необходимо иметь раздельные статусы — сообщение доставлено и сообщение обработано; в идеале, второе должно вытекать из логики работы API, т.е. сигналом о том, что сообщение обработано, является какое-то действие, совершаемое партнёром. В нашем кофейном примере это может быть перевод заказа партнёром из статуса "new" (заказ создан пользователем) в статус "accepted" или "rejected" (кофейня партнёра приняла или отклонила заказ). Тогда полный цикл обработки уведомления будет выглядеть так:

// Уведомляем партнёра о том,
 // что его реакции
@@ -3854,7 +3854,7 @@ X-Idempotency-Token: <токен>
 

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

NB: при декомпозиции эндпойнтов велик соблазн провести границу так, чтобы разделить изменяемые и неизменяемые данные. Тогда последние можно объявить кэшируемыми условно вечно и вообще не думать над проблемами пагинации и формата обновления. На бумаге план выглядит отлично, однако с ростом API неизменяемые данные частенько перестают быть таковыми, и тогда потребуется выпускать новые интерфейсы работы с данными. Мы скорее рекомендуем объявлять данные иммутабельными в одном из двух случаев: либо (1) они действительно не могут стать изменяемыми без слома обратной совместимости, либо (2) ссылка на ресурс (например, на изображение) поступает через API же, и вы обладаете возможностью сделать эти ссылки персистентными (т.е. при необходимости обновить изображение будете генерировать новую ссылку, а не перезаписывать контент по старой ссылке).

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

-

Идеи организации изменения состояния ресурса через независимые атомарные идемпотентные операции выглядит достаточно привлекательно и с точки зрения разрешения конфликтов доступа. Так как составляющие ресурса перезаписываются целиком, результатом записи будет именно то, что пользователь видел своими глазами на экране своего устройства, даже если при этом он смотрел на неактуальную версию. Однако этот подход очень мало помогает нам, если мы действительно обеспечить максимально гранулярное изменение данных, как, например, это сделано в онлайн-сервисах совместной работы с документами или системах контроля версий (поскольку для этого нам придётся сделать столь же гранулярные эндпойнты, т.е. буквально адресовать каждый символ документа по отдельности).

+

Идеи организации изменения состояния ресурса через независимые атомарные идемпотентные операции выглядит достаточно привлекательно и с точки зрения разрешения конфликтов доступа. Так как составляющие ресурса перезаписываются целиком, результатом записи будет именно то, что пользователь видел своими глазами на экране своего устройства, даже если при этом он смотрел на неактуальную версию. Однако этот подход очень мало помогает нам, если мы действительно хотим обеспечить максимально гранулярное изменение данных, как, например, это сделано в онлайн-сервисах совместной работы с документами или системах контроля версий (поскольку для этого нам придётся сделать столь же гранулярные эндпойнты, т.е. буквально адресовать каждый символ документа по отдельности).

Для «настоящего» совместного редактирования необходимо будет разработать отдельный формат описания изменений, который позволит:

  • иметь максимально возможную гранулярность (т.е. одна операция соответствует одному действию клиента);
  • @@ -4415,7 +4415,7 @@ X-Idempotency-Token: <токен>
  • для работы обычных кофеен нужно реализовать эндпойнт program_modify_endpoint, но не нужно реализовывать program_takeout_endpoint.

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

-

NB: в этом примере мы предполагаем, что наличие эндпойнта program_takeout_endpoint является триггером для приложения, которое должно показать кнопку «выдать заказ». Было бы лучше добавить что-то типа поля supported_flow в параметры вызова PUT /api-types/, чтобы этот флаг задавался явно, а не определялся из неочевидной конвенции. Однако в проблематике замусоривания интерфейсов опциональным методами это ничего не меняет, так что мы опустили эту тонкость ради лаконичности примеров.

+

NB: в этом примере мы предполагаем, что наличие эндпойнта program_takeout_endpoint является триггером для приложения, которое должно показать кнопку «выдать заказ». Было бы лучше добавить что-то типа поля supported_flow в параметры вызова PUT /api-types/, чтобы этот флаг задавался явно, а не определялся из неочевидной конвенции. Однако в проблематике замусоривания интерфейсов опциональными методами это ничего не меняет, так что мы опустили эту тонкость ради лаконичности примеров.

Мы не знаем, правда ли в реальном мире API кофемашин возникнет проблема, подобная описанной. Но мы можем сказать со всей уверенностью, что всегда, когда речь идёт об интеграции «железного» уровня, происходят именно те процессы, которые мы описали: меняется нижележащая технология, и вроде бы понятный и ясный API превращается в свалку из legacy-методов, половина из которых не несёт в себе никакого практического смысла в рамках конкретной интеграции. Если мы добавим к проблеме ещё и технический прогресс — представим, например, что со временем все кофейни станут автоматическими — то мы быстро придём к ситуации, когда половина методов вообще не нужна, как метод запроса бесконтактной выдачи напитка.

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

Каким же образом мы можем решить эту проблему? Одним из двух способов: или досконально изучить предметную область и тренды её развития на несколько лет вперёд, или перейти от сильной связности к слабой. Как выглядит идеальное решение с точки зрения обеих взаимодействующих сторон? Как-то так:

@@ -4435,7 +4435,7 @@ X-Idempotency-Token: <токен> registerProgramRunHandler( apiType, (program) => { // Инициализация исполнения заказа - // на стороне партерна + // на стороне партнёра let execution = initExecution(…); // Подписка на изменения состояния // родительского контекста @@ -4464,7 +4464,7 @@ X-Idempotency-Token: <токен>

Внимательный читатель может возразить нам, что фактически, если мы посмотрим на номенклатуру возникающих сущностей, мы ничего не изменили в постановке задачи, и даже усложнили её:

  • вместо вызова метода takeout мы теперь генерируем пару событий takeout_requested / takeout_ready;
  • -
  • вместо длинного списка методов, которые необходимо реализовать для интеграции API партнёра, появляются длинные списки полей разных контекстов и событий, которые они генерирует;
  • +
  • вместо длинного списка методов, которые необходимо реализовать для интеграции API партнёра, появляются длинные списки полей разных контекстов и событий, которые они генерируют;
  • проблема устаревания технологии не меняется, вместо устаревших методов мы теперь имеем устаревшие поля и события.

Это замечание совершенно верно. Изменение формата API само по себе не решает проблем, связанных с эволюцией функциональности и нижележащей технологии. Формат API решает другую проблему: как оставить при этом партнерский код читаемым и поддерживаемым. Почему в примере с интеграцией через методы код становится нечитаемым? Потому что обе стороны вынуждены имплементировать функциональность, которая в их контексте бессмысленна. Код интеграции вендинговых автоматов должен ответить «принято» на запрос бесконтактной выдачи — и таким образом, со временем все имплементации будут состоять из множества методов, просто безусловно возвращающих true (или false).

@@ -4566,7 +4566,7 @@ X-Idempotency-Token: <токен>

Попробуем кратко суммировать написанное в трёх предыдущих главах.

  1. Расширение функциональности API производится через абстрагирование: необходимо так переосмыслить номенклатуру сущностей, чтобы существующие методы стали частным (желательно — самым частотным) упрощённым случаем реализации.
  2. -
  3. Вышестоящие сущности должны при этом оставаться информационными контекстами для нижестоящих, т.е. не предписывать конкретное поведение, а только сообщать о своём состоянии и предоставлять функциональность для его изменения (прямую через соответствующие методы либо косвенную через получение определённых событий).
  4. +
  5. Вышестоящие сущности должны при этом оставаться информационными контекстами для нижестоящих, т.е. не предписывать конкретное поведение, а только сообщать о своём состоянии и предоставлять функциональность для его изменения (напрямую через соответствующие методы либо косвенно через получение определённых событий).
  6. Конкретная функциональность, т.е. работа непосредственно с «железом», нижележащим API платформы, должна быть делегирована сущностям самого низкого уровня.

NB. В этих правилах нет ничего особенно нового: в них легко опознаются принципы архитектуры SOLID12 — что неудивительно, поскольку SOLID концентрируется на контрактно-ориентированном подходе к разработке, а API по определению и есть контракт. Мы лишь добавляем в эти принципы понятие уровней абстракции и информационных контекстов.

@@ -4664,7 +4664,7 @@ X-Idempotency-Token: <токен>
  • во-первых, люди не запоминают IP-адреса и предпочитают оперировать «говорящими» именами;
  • во-вторых, IP-адрес является технической сущностью, связанной с узлом сети, а разработчики хотели бы иметь возможность добавлять и изменять узлы, не нарушая работы своих приложений.
  • -

    Удобной (и опять же имеющей почти стопроцентное проникновение) абстракцией над IP-адресами оказалась система доменных имён, позволяющий назначить узлам сети человекочитаемые синонимы. Появление доменных имён потребовало разработки клиент-серверных протоколов более высокого, чем TCP/IP, уровня, и для передачи текстовых (гипертекстовых) данных таким протоколом стал HTTP 0.97, разработанный Тимом Бёрнерсом-Ли опубликованный в 1991 году. Помимо поддержки обращения к узлам сети по именам, HTTP также предоставил ещё одну очень удобную абстракцию, а именно назначение собственных адресов эндпойнтам, работающим на одном сетевом узле.

    +

    Удобной (и опять же имеющей почти стопроцентное проникновение) абстракцией над IP-адресами оказалась система доменных имён, позволяющая назначить узлам сети человекочитаемые синонимы. Появление доменных имён потребовало разработки клиент-серверных протоколов более высокого, чем TCP/IP, уровня, и для передачи текстовых (гипертекстовых) данных таким протоколом стал HTTP 0.97, разработанный Тимом Бёрнерсом-Ли и опубликованный в 1991 году. Помимо поддержки обращения к узлам сети по именам, HTTP также предоставил ещё одну очень удобную абстракцию, а именно назначение собственных адресов эндпойнтам, работающим на одном сетевом узле.

    Протокол был очень прост и всего лишь описывал способ получить документ, открыв TCP/IP соединение с сервером и передав строку вида GET адрес_документа. Позднее протокол был дополнен стандартом URL, позволяющим детализировать адрес документа, и далее протокол начал развиваться стремительно: появились новые глаголы помимо GET, статусы ответов, заголовки, типы данных и так далее.

    HTTP появился изначально для передачи размеченного гипертекста, что для программных интерфейсов подходит слабо. Однако HTML со временем эволюционировал в более строгий и машиночитаемый XML, который быстро стал одним из общепринятых форматов описания вызовов API. (Забегая вперёд, скажем, что в начале 2000-х XML был быстро вытеснен ещё более простым и интероперабельным JSON.)

    Поскольку, с одной стороны, HTTP был простым и понятным протоколом, позволяющим осуществлять произвольные запросы к удаленным серверам по их доменным именам, и, с другой стороны, быстро оброс почти бесконечным количеством разнообразных расширений над базовой функциональностью, он стал второй точкой, к которой сходятся сетевые технологии: практически все запросы к API внутри TCP/IP-сетей осуществляются по протоколу HTTP (и даже если используется альтернативный протокол, запросы в нём всё равно зачастую оформлены в виде HTTP-пакетов просто ради удобства). HTTP, однако, идеологически совершенно противоположен RPC, поскольку не предполагает ни нативной обвязки для функций удалённого вызова, ни тем более разделяемого доступа к памяти. Зато HTTP предложил несколько очень удобных концепций для наращивания производительности серверов, такие как управление кэшированием из коробки и концепцию прозрачных прокси.

    @@ -4687,15 +4687,15 @@ X-Idempotency-Token: <токен>

    Хотя новый подход оказался весьма удачным с точки зрения разработки высокопроизводительных сервисов, проблемы неудобства работы с декларативными API из императивных языков никуда не делось. К тому же изначально простой стандарт быстро превратился в монстра Франкенштейна, сшитого из десятков разных подстандартов. Не думаем, что сильно ошибёмся, если скажем, что стандарт HTTP целиком со всеми многочисленными дополнительными RFC не знает полностью ни один человек.

    Начиная с конца 2010-х годов мы наблюдаем расцвет RPC-технологий нового поколения — или, вернее было бы сказать, комбинированных технологий, которые одновременно и удобны в применении в императивных языках программирования (поставляются с обвязкой, позволяющей эффективно использовать кодогенерацию), и интероперабельны (работают поверх строго стандартизированных протоколов, которые не зависят от конкретного языка программирования), и масштабируемы (абстрагируют понятие ресурса и не предоставляют прямого доступа к памяти сервера).

    Фактически, на сегодня идеологически разница между современным API, следующим классическому архитектурному стилю REST, и современным RPC заключается лишь в разметке кэшируемых данных и принципах адресации: в первом случае единицей доступа является ресурс (а параметры операции передаются дополнительно), а во втором — имя операции (а адреса ресурсов, над которыми она выполняется, передаются дополнительно).

    -

    Мы рассмотрим конкретные технологии разработки таких API в следующей главе, но отметим здесь важный момент: почти все они (за исключением разве что MQTT) работают поверх протокола HTTP. Так что большинство современных RPC-протоколов одновременно является HTTP API.

    -

    Тем не менее, обычно словосочетание «HTTP API» используется не просто в значении «любой API, использующий протокол HTTP»; говоря «HTTP API» мы скорее подразумеваем, что он используется не как дополнительный третий протокол транспортного уровня, а именно как протокол уровня приложения, то есть составляющие протокола (такие как: URL, заголовки, HTTP-глаголы, статусы ответа, политики кэширования и т.д.) используются в соответствии с их семантикой, определённой в стандартах. Обычно также подразумевается, что в HTTP API использует какой-то из текстовых форматов передачи данных (JSON, XML) для описания вызовов.

    +

    Мы рассмотрим конкретные технологии разработки таких API в следующей главе, но отметим здесь важный момент: почти все они (за исключением разве что MQTT) работают поверх протокола HTTP. Так что большинство современных RPC-протоколов одновременно являются HTTP API.

    +

    Тем не менее, обычно словосочетание «HTTP API» используется не просто в значении «любой API, использующий протокол HTTP»; говоря «HTTP API» мы скорее подразумеваем, что он используется не как дополнительный третий протокол транспортного уровня, а именно как протокол уровня приложения, то есть составляющие протокола (такие как: URL, заголовки, HTTP-глаголы, статусы ответа, политики кэширования и т.д.) используются в соответствии с их семантикой, определённой в стандартах. Обычно также подразумевается, что в HTTP API используется какой-то из текстовых форматов передачи данных (JSON, XML) для описания вызовов.

    В рамках настоящего раздела мы поговорим о дизайне сетевых API, обладающих следующими характеристиками:

    • протоколом взаимодействия является HTTP версий 1.1 и выше;
    • форматом данных является JSON (за исключением эндпойнтов, специально предназначенных для передачи данных, как правило, файлов, в других форматах);
    • в качестве идентификаторов ресурсов используется URL в соответствии со стандартом;
    • семантика вызовов HTTP-эндпойнтов соответствует спецификации;
    • -
    • никакие из веб-стандартов нигде не нарушается специально.
    • +
    • никакие из веб-стандартов нигде не нарушаются специально.

    Такое API мы будем для краткости называть просто «HTTP API» или «JSON-over-HTTP API». Мы понимаем, что такое использование терминологически не полностью корректно, но писать каждый раз «JSON-over-HTTP эндпойнты, утилизирующие семантику, описанную в стандартах HTTP и URL» или «JSON-over-HTTP API, соответствующий архитектурным ограничениям REST» не представляется возможным. Что касается термина «REST API», то как мы покажем дальше, у него нет консистентного определения, поэтому его использования мы также стараемся избегать.

    Примечания

    • 1 RFC-5. DEL
      https://datatracker.ietf.org/doc/html/rfc5

    • 2 Nelson, B. J. (1981) Remote procedure call
      https://www.semanticscholar.org/paper/Remote-procedure-call-Nelson/c860de40a88090055948b72d04dd79b02195e06b

    • @@ -5018,7 +5018,7 @@ Content-Type: application/json

      NB: распространено мнение, что метод POST предназначен только для создания новых ресурсов. Это совершенно не так, создание ресурса только один из вариантов «обработки запроса согласно внутреннему устройству» эндпойнта.

      -

      Важное свойство модифицирующих идемпотентных глаголов — это то, что URL запроса является его ключом идемпотентности. PUT /url полностью перезаписывает ресурс, заданный своим URL (/url), и, таким образом, повтор запроса не изменяет ресурс. Аналогично, повторный вызов DELETE /url должен оставить систему в том же состоянии (ресурс /url удалён). Учитывая, что метод GET /url семантически должен вернуть представление целевого ресурса /url, то, если этот метод реализован, он должен возвращать консистентное предыдущим PUT / DELETE представление. Если ресурс был перезаписан через PUT /url, GET /url должен вернуть представление, соответствующее переданном в PUT /url телу (в случае JSON-over-HTTP API это, как правило, просто означает, что GET /url возвращает в точности тот же контент, чтобы передан в PUT /url, с точностью до значений полей по умолчанию). DELETE /url обязан удалить указанный ресурс — так, что GET /url должен вернуть 404 или 410.

      +

      Важное свойство модифицирующих идемпотентных глаголов — это то, что URL запроса является его ключом идемпотентности. PUT /url полностью перезаписывает ресурс, заданный своим URL (/url), и, таким образом, повтор запроса не изменяет ресурс. Аналогично, повторный вызов DELETE /url должен оставить систему в том же состоянии (ресурс /url удалён). Учитывая, что метод GET /url семантически должен вернуть представление целевого ресурса /url, то, если этот метод реализован, он должен возвращать консистентное предыдущим PUT / DELETE представление. Если ресурс был перезаписан через PUT /url, GET /url должен вернуть представление, соответствующее переданному в PUT /url телу (в случае JSON-over-HTTP API это, как правило, просто означает, что GET /url возвращает в точности тот же контент, что был передан в PUT /url, с точностью до значений полей по умолчанию). DELETE /url обязан удалить указанный ресурс — так, что GET /url должен вернуть 404 или 410.

      Идемпотентность и симметричность методов GET / PUT / DELETE влечёт за собой нежелательность для GET и DELETE запросов иметь тело (поскольку этому телу невозможно приписать никакой осмысленной роли). Однако (по-видимому в связи с тем, что многие разработчики попросту не знают семантику этих методов) распространённое ПО веб-серверов обычно разрешает этим методам иметь тело запроса и транслирует его дальше к коду обработки эндпойнта (использование этой практики мы решительно не рекомендуем).

      Достаточно очевидным образом ответы на модифицирующие запросы не кэшируются (хотя при определённых условиях закэшированный ответ метода POST может быть использован при последующем GET-запросе) и, таким образом, повторный POST / PUT / DELETE / PATCH запрос обязательно будет доставлен до конечного сервера (ни один промежуточный агент не имеет права ответить из кэша). В случае GET-запроса это, вообще говоря, неверно — гарантией может служить только наличие в ответе директив кэширования no-store или no-cache.

      Один из самых частых антипаттернов разработки HTTP API — это использование HTTP-глаголов в нарушение их семантики:

      @@ -5382,7 +5382,7 @@ X-OurCoffeeAPI-Version: 1

      Насколько строго должна выдерживаться буквальная интерпретация конструкции ГЛАГОЛ /ресурс? Если мы принимаем правило «части URL обязаны быть существительными» (и ведь странно применять глагол к глаголу!), то в примерах выше должно быть не prepare, а preparator или preparer (а вариант /action=prepare&coffee_machine_id=<id>&recipe=lungo вовсе недопустим, так как нет объекта действия), что, честно говоря, лишь добавляет визуального шума в виде суффиксов «ator», но никак не способствует большей лаконичности и однозначности понимания.

    • -

      Если сигнатура вызова по умолчанию модифицирующая или неидемпотентная, означает ли это, что операция обязана быть модифицирующей / идемпотентной? Двойственность смысловой нагрузки глаголов (семантика vs побочные действия) порождает неопределённость в вопросах организации API. Рассмотрим, например, ресурс /v1/search, осуществляющий поиск предложений кофе в нашем учебном API. С каким глаголом мы должны к нему обращаться?

      +

      Если сигнатура вызова по умолчанию модифицирующая или неидемпотентная, означает ли это, что операция обязана быть модифицирующей / неидемпотентной? Двойственность смысловой нагрузки глаголов (семантика vs побочные действия) порождает неопределённость в вопросах организации API. Рассмотрим, например, ресурс /v1/search, осуществляющий поиск предложений кофе в нашем учебном API. С каким глаголом мы должны к нему обращаться?

      • С одной стороны, GET /v1/search?query=<поисковый запрос> позволяет явно продекларировать, что никаких посторонних эффектов у этого запроса нет (никакие данные не перезаписываются) и результаты его можно кэшировать (при условии, что все значимые параметры передаются в URL).
      • С другой стороны, согласно семантике операции, GET /v1/search должен возвращать представление ресурса search. Но разве результаты поиска являются представлением ресурса-поисковика? Смысл операции «поиск» гораздо точнее описывается фразой «обработка запроса в соответствии с внутренней семантикой ресурса», т.е. соответствует методу POST. Кроме того, можем ли мы вообще говорить о кэшировании поисковых запросов? Страница результатов поиска формируется динамически из множества источников, и повторный запрос с той же поисковой фразой почти наверняка выдаст другой список результатов.
      • @@ -5508,7 +5508,7 @@ Location: /v1/orders/{id}
        4. Удаление

        С удалением ситуация проще всего: никакие данные в современных сервисах не удаляются моментально, а лишь архивируются или помечаются удалёнными. Таким образом, вместо DELETE /v1/orders/{id} необходимо разработать эндпойнт типа PUT /v1/orders/{id}/archive или PUT /v1/archive?order=<order_id>.

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

        -

        Изложенные выше соображения не следует считать критикой концепции CRUD как таковой. Мы лишь указываем, что что в сложных предметных областях «срезание углов» и следование мнемоническим правилам редко работает. Мы начали с двух URL и четырёх-пяти методов манипуляции ими:

        +

        Изложенные выше соображения не следует считать критикой концепции CRUD как таковой. Мы лишь указываем, что в сложных предметных областях «срезание углов» и следование мнемоническим правилам редко работает. Мы начали с двух URL и четырёх-пяти методов манипуляции ими:

        • /v1/orders/ для вызова с глаголом POST;
        • /v1/orders/{id} для вызова с глаголами GET / PUT / DELETE / опционально PATCH.
        • @@ -5531,7 +5531,7 @@ Location: /v1/orders/{id}
        • /v1/orders/search?user_id=<user_id> для поиска заказов через метод GET (простые случаи) или POST (если необходимы сложные фильтры);
        • PUT /v1/orders/{id}/archive для архивирования заказа.
        -

        плюс, вероятно, потребуются частные операции типа POST /v1/orders/{id}/cancel для проведения атомарных изменений. Именно это произойдёт в реальной жизни: идея CRUD как методологии описания типичных операций над ресурсом с помощью небольшого набора HTTP-глаголов быстро превратится в семейство эндпойнтов, каждый из которых покрывает какой-то аспект жизненного цикла сущности. Это всего лишь означает, что CRUD-мнемоника даёт только стартовый набор гипотез; любая конкретная предметная область требует вдумчивого подхода и дизайна подходящего API. Если же перед вами стоит задача разработать «универсальный» интерфейс, который подходит для работы с любыми сущностями, лучше сразу начинайте с номенклатуры в 10 методов типа описанной выше.

        Примечания

        • 1 The HTTP QUERY Method
          https://www.ietf.org/archive/id/draft-ietf-httpbis-safe-method-w-body-02.html

        • +

          плюс, вероятно, потребуются частные операции типа POST /v1/orders/{id}/cancel для проведения атомарных изменений. Именно это произойдёт в реальной жизни: идея CRUD как методологии описания типичных операций над ресурсом с помощью небольшого набора HTTP-глаголов быстро превратится в семейство эндпойнтов, каждый из которых покрывает какой-то аспект жизненного цикла сущности. Это всего лишь означает, что CRUD-мнемоника даёт только стартовый набор гипотез; любая конкретная предметная область требует вдумчивого подхода и дизайна подходящего API. Если же перед вами стоит задача разработать «универсальный» интерфейс, который подходит для работы с любыми сущностями, лучше сразу начинайте с номенклатуры в 10 методов, подобной описанной выше.

          Примечания

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

          Рассмотренные в предыдущих главах примеры организации API согласно стандарту HTTP и принципам REST покрывают т.н. «happy path», т.е. стандартный процесс работы с API в отсутствие ошибок. Конечно, нам не менее интересен и обратный кейс — каким образом HTTP API следует работать с ошибками, и чем стандарт и архитектурные принципы могут нам в этом помочь. Пусть какой-то агент в системе (неважно, клиент или гейтвей) пытается создать новый заказ:

          POST /v1/orders?user_id=<user_id> HTTP/1.1
          @@ -5741,7 +5741,7 @@ Retry-After: 5
           

          и заложите защиту от этих векторов атак на уровне вашего серверного ПО. Организация OWASP предоставляет хороший обзор лучших security-практик для HTTP API6.

          -

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

          Примечания

          • 1 Fetch Living Standard. CORS protocol
            https://fetch.spec.whatwg.org/#http-cors-protocol

          • +

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

            Примечания

            • 1 Fetch Living Standard. CORS protocol
              https://fetch.spec.whatwg.org/#http-cors-protocol

            • 2 Cross Site Request Forgery (CSRF)
              https://owasp.org/www-community/attacks/csrf

            • 3 Server Side Request Forgery
              https://owasp.org/www-community/attacks/Server_Side_Request_Forgery

            • 4 HTTP Response Splitting
              https://owasp.org/www-community/attacks/HTTP_Response_Splitting

            • @@ -5758,9 +5758,9 @@ Retry-After: 5

              Во избежание нагромождения подобных оборотов мы будем называть первый тип инструментов просто «SDK», а второй — «UI-библиотеки».

              NB: вообще говоря, UI-библиотека может как включать в себя обёртку над клиент-серверным API, так и предоставлять чистый API к графическому движку. В рамках этой книги мы будем говорить, в основном, о первом варианте как о более общем случае (и более сложном с точки зрения проектирования API). Многие паттерны дизайна SDK, которые мы опишем далее, применимы и к «чистым» библиотекам без клиент-серверной составляющей.

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

              -

              Поскольку UI — высокоуровневая абстракция над примитивами ОС, почти для всех платформ существуют специализированные фреймворки для разработки визуальных компонентов. Выбор такого фреймворка, увы, может быть непростым занятием. Например, в случае веб-платформы её низкоуровневость и популярность привели к тому, что на сегодня количество конкурирующих технологий, предоставляющих фреймворки для разработки SDK, превосходит всякое воображение. Можно упомянуть наиболее распространённые на сегодня React1, Angular2, Svelte3, Vue.js4 и не сдающие своих позиций Bootstrap5 и Ember6. Из перечисленных технологий наибольшее проникновение имеет React, но оно всё ещё измеряется в единицах процентов7. При этом компоненты на «чистом» JavaScript/CSS при этом часто критикуются как неудобные к использованию в перечисленных фреймворках, так как каждый из них реализует весьма строгие методологии. Примерно такая же ситуация наблюдается, например, с разработкой визуальных библиотек для Windows. Вопрос «на каком фреймворке разрабатывать UI-компоненты для этих платформ», увы, не имеет простого ответа — фактически, вам придётся измерять рынки и принимать решения по каждому фреймворку отдельно.

              +

              Поскольку UI — высокоуровневая абстракция над примитивами ОС, почти для всех платформ существуют специализированные фреймворки для разработки визуальных компонентов. Выбор такого фреймворка, увы, может быть непростым занятием. Например, в случае веб-платформы её низкоуровневость и популярность привели к тому, что на сегодня количество конкурирующих технологий, предоставляющих фреймворки для разработки SDK, превосходит всякое воображение. Можно упомянуть наиболее распространённые на сегодня React1, Angular2, Svelte3, Vue.js4 и не сдающие своих позиций Bootstrap5 и Ember6. Из перечисленных технологий наибольшее проникновение имеет React, но оно всё ещё измеряется в единицах процентов7. При этом компоненты на «чистом» JavaScript/CSS часто критикуются как неудобные к использованию в перечисленных фреймворках, так как каждый из них реализует весьма строгие методологии. Примерно такая же ситуация наблюдается, например, с разработкой визуальных библиотек для Windows. Вопрос «на каком фреймворке разрабатывать UI-компоненты для этих платформ», увы, не имеет простого ответа — фактически, вам придётся измерять рынки и принимать решения по каждому фреймворку отдельно.

              Лучше дела обстоят с актуальными мобильными платформами (а также MacOS), которые гораздо более гомогенны. Однако здесь возникает другая проблема — современные приложения, как правило, поддерживают сразу несколько таких платформ, что приводит к дублированию кода (и номенклатуры API).

              -

              Решением этой проблемы может быть использование кросс-платформенных мобильных (React Native8, Flutter9, Xamarin10) и десктопных (JavaFX11, QT12) фреймворков, а также узкоспециализированных решений для конкретных задач (например, Unity13 для разработки игр). Несомненным преимуществом таких технологий является скорость разработки и универсальность (как кода, так и программистов). Недостатки также достаточно очевидны — от таких приложений может быть сложно добиться оптимальной производительности, и к ним часто неприменимы многие стандартные инструменты, доступные для конкретной платформы; например, отладка и профайлинг могут быть затруднены. На сегодня скорее наблюдается паритет между двумя этими подходами (несколько фактически независимых приложений, написанных на поддерживаемых платформой языках vs. одно кросс-плафторменное приложение).

              Примечания

              • 1 React
                https://react.dev/

              • +

                Решением этой проблемы может быть использование кросс-платформенных мобильных (React Native8, Flutter9, Xamarin10) и десктопных (JavaFX11, Qt12) фреймворков, а также узкоспециализированных решений для конкретных задач (например, Unity13 для разработки игр). Несомненным преимуществом таких технологий является скорость разработки и универсальность (как кода, так и программистов). Недостатки также достаточно очевидны — от таких приложений может быть сложно добиться оптимальной производительности, и к ним часто неприменимы многие стандартные инструменты, доступные для конкретной платформы; например, отладка и профайлинг могут быть затруднены. На сегодня скорее наблюдается паритет между двумя этими подходами (несколько фактически независимых приложений, написанных на поддерживаемых платформой языках vs. одно кросс-плафторменное приложение).

                Примечания

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

                Первый вопрос об SDK (напомним, так мы будем называть нативную клиентскую библиотеку, предоставляющую доступ к technology-agnostic клиент-серверному API), который мы должны прояснить — почему вообще такое явление как SDK существует. Иными словами, почему использование обёртки для фронтенд-разработчика является более удобным, нежели работа с нижележащим API напрямую.

                Некоторые причины лежат на поверхности:

                @@ -5999,7 +5999,7 @@ api.subscribe(

                Предположим, что мы хотим разрешить разработчику подставить в наш SearchBox свой поисковый запрос — например, чтобы дать возможность разместить в приложении баннер «найти лунго рядом со мной», по нажатию на который происходит переход к нашему компоненту с введённым запросом «лунго». Для этого разработчику потребуется программно показать соответствующий экран и вызвать нужный метод SearchBox-а — допустим, не мудрствуя лукаво, мы назовём его просто search.

                Два наших метода search («чистый» клиент-серверный и компонентный SearchBox.search) принимают одни и те же параметры и выдают один и тот же результат. Но ведут себя эти методы совершенно по-разному:

                  -
                • если вызвать несколько раз SearchBox.search, не дожидаясь ответа сервера, то все запросы, кроме последнего во времени, должны быть проигнорированы; даже если ответы пришли вразнобой, только тот из них, который соответствует новейшему запросу, должен быть показан в UI; +
                • если вызвать несколько раз SearchBox.search, не дожидаясь ответа сервера, то все запросы, кроме последнего во времени, должны быть проигнорированы; даже если ответы пришли вразнобой, только тот из них, который соответствует последнему запросу, должен быть показан в UI;
                  • дополнительная задача — что должен вернуть вызов метода SearchBox.search, если он был прерван выполнением другого запроса? Если неуспех, то в чём состоит ошибка вызывающего? Если успех, то почему результат не был отражён в UI?
                  @@ -6548,7 +6548,7 @@ api.subscribe( } }
          -

          Кроме того, мы можем убрать Composer из цепочки подготовки данных так так, чтобы подчинённые компоненты напрямую получали нужные поля напрямую из SearchBox:

          +

          Кроме того, мы можем убрать Composer из цепочки подготовки данных так, чтобы подчинённые компоненты напрямую получали нужные поля напрямую из SearchBox:

          class OfferListComponent 
             implements IOfferListComponent {
             …
          @@ -6571,7 +6571,7 @@ api.subscribe(
             …
           }
           
          -

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

          +

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

          • субкомпоненты читают состояние SearchBox-а, но не модифицируют его;

            @@ -6620,7 +6620,7 @@ api.subscribe(
            Схема взаимодействия компонентов в MVP.
            Схема взаимодействия компонентов в MVP

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

            -

            NB: на всякий случай уточним, что автор этой книги не предлагает Composer как альтернативную MV*-методологию. Идея предыдущей главы состоит в том, что сложные сценарии декомпозиции UI-компонентов решаются только искусственным введением мостиков-уровней абстракции. Неважно, как мы этот мостик назовём и какие правила для него придумаем.

            Примечания

            • 1 MVC
              https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

            • +

              NB: на всякий случай уточним, что автор этой книги не предлагает Composer как альтернативную MV*-методологию. Идея предыдущей главы состоит в том, что сложные сценарии декомпозиции UI-компонентов решаются только искусственным введением дополнительных мостиков-уровней абстракции. Неважно, как мы этот мостик назовём и какие правила для него придумаем.

              Примечания

              Глава 46. Backend-Driven UI 

              @@ -6668,7 +6668,7 @@ api.subscribe(

              разработать серверный код управления UI ничуть не проще, нежели клиентский;

            • -

              современные клиентские устройства предоставляют широкий спектр функциональности, доступной только клиентскому разработчику, от кэшей до анимаций;

              +

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

              • гибридный код, который частично получает состояние с сервера, частично обогащает его на клиенте, писать гораздо сложнее, чем чистый клиентский (в силу того, что в Backend-Driven UI содержимое ответа сервера для клиента представляет собой «чёрный ящик», для взаимодействия с которым приходится изобретать дополнительные протоколы);

                @@ -6739,7 +6739,7 @@ api.subscribe(
              • этот код просто плохо читается: совершенно непонятно, почему события загрузки данных на одном компоненте влияют на пользовательскую функциональность в другом компоненте;
              • если при загрузке произойдёт какая-то ошибка, событие endDataLoad не произойдёт, и интерфейс останется заблокированным навсегда.
              -

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

              +

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

              • флаг такого доступа должен именоваться явно (например, offerFullViewLocked, а не isDataLoading);
              • флаг контролироваться Composer-ом, но никак не самой панелью предложения (ещё и потому, что подготовка данных для показа — также ответственность Composer-а).
              • @@ -6889,7 +6889,7 @@ api.subscribe( api.options.addRule( 'button.checkout.iconUrl', (data, options) => data.iconUrl -) +);

    Наиболее последовательная реализация этого подхода — CSS1. Мы не то чтобы рекомендуем использовать CSS-подобные правила в библиотеках компонентов (в силу потрясающей сложности их имплементации и, в большинстве случаев, избыточности), но осторожно замечаем, что поддержка какого-то простого подмножества подобного рода правил значительно облегчает кастомизацию визуальных компонент для разработчиков.

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

    @@ -6913,7 +6913,7 @@ button.view.compu

    API — это полноценный продукт, как и другое ПО. Вы «продаёте» его точно так же, и к нему полностью применимы принципы управления продуктом. Весьма сомнительно, что вы сможете качественно развивать API, не изучив потребности аудитории, спрос и предложение, рынок и конкурентов.

  • -

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

    +

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

  • Для того, чтобы успешно развивать API, необходимо уметь отвечать именно на этот вопрос: почему ваши потребители предпочтут выполнять те или иные действия программно. Вопрос этот не праздный, поскольку, по опыту автора настоящей книги, именно отсутствие у руководителей продукта и маркетологов экспертизы в области работы с API и есть самая большая проблема развития API.

    @@ -6945,7 +6945,7 @@ button.view.compu

    API может быть лицензирован под открытой лицензией с определёнными ограничениями, которые могут быть сняты путём покупки расширенной лицензии; это может быть как ограничение функциональности API (например, запрет публикации приложения в соответствующем магазине приложений или невозможность сборки приложения в продакшен-режиме без приобретения лицензии), так и ограничения на использование (например, открытая лицензия может быть «заразной», т.е. требовать распространения написанного поверх платформы кода под той же лицензией, или же использование бесплатного API может быть запрещено для определённых целей).

  • -

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

    +

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

  • Разработка API может спонсироваться явно или неявно владельцем платформы или операционной системы [в нашем кофейном примере — производителем «умных» кофе-машин], который заинтересован в том, чтобы разработчики имели как можно больше удобных инструментов для работы с платформой.

    @@ -6981,7 +6981,7 @@ button.view.compu
  • техническая поддержка внешних пользователей осуществляется по остаточному принципу.
  • -
  • Разработчики внутренних сервисов часто ломают обратную совместимость или выпускают новые мажорные версии, совершенно не заботясь о последствиях этих действий для внешних партнёрах.
  • +
  • Разработчики внутренних сервисов часто ломают обратную совместимость или выпускают новые мажорные версии, совершенно не заботясь о последствиях этих действий для внешних партнёров.
  • Всё это приводит к тому, что наличие внешнего API зачастую работает не в плюс компании, а в минус: фактически, вы предоставляете крайне критически и скептически настроенной аудитории очень плохой продукт. Если у вас нет ресурсов на грамотное развитие API как продукта для внешних пользователей — лучше за него не браться совсем.

    5. API = площадка для рекламы
    @@ -6992,7 +6992,7 @@ button.view.compu
    • вы можете работать на узнаваемость бренда среди конечных пользователей (размещением своих логотипов и ссылок на сайтах и в приложениях партнёров, использующих API), и даже строить сам бренд таким образом [например, если наш кофейный API будет предоставлять рейтинги кофеен, и мы будем работать на то, чтобы потребитель сам требовал от кофеен указывать рейтинг по версии нашего сервиса];
    • вы можете работать на распространение знания о себе среди бизнес-аудитории [например, чтобы партнёры, размещающие у себя виджет заказа кофе, заодно и изучили каталог ваших шин];
    • -
    • наконец, вы можете распространять API только и исключительно ради того, чтобы заработать себе репутацию среди разработчиков — ради информирования о других ваших продуктов или ради улучшения вашего имиджа как работодателя для ИТ-специалистов (эту деятельность иногда называют словом «технопиар»).
    • +
    • наконец, вы можете распространять API только и исключительно ради того, чтобы заработать себе репутацию среди разработчиков — ради информирования о других ваших продуктах или ради улучшения вашего имиджа как работодателя для ИТ-специалистов (эту деятельность иногда называют словом «технопиар»).

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

    7. API = инструмент получения обратной связи и UGC
    @@ -7032,9 +7032,9 @@ button.view.compu

    Ту же неопределённость следует иметь в виду и при проведении интервью и сборе обратной связи. Программисты будут, в основном, сообщать вам о своих проблемах, возникающих при разработке сервиса — редко о проблемах бизнеса; бизнесу, в свою очередь, мало дела до неудобств разработчиков. И те, и другие обладают при этом каким-то представлением о проблемах пользователя, но зачастую это представление сильно ограничено сегментом рынка, в котором оперирует партнёр.

    Если у вас есть доступ к инструментам отслеживания действий конечных пользователей (см. главу «Ключевые показатели эффективности API»), то вы можете попробовать через их логи восстановить типичное поведение пользователей и понять, как они взаимодействуют с приложениями партнёров. Но вам вновь придётся эти данные анализировать для каждого приложения по отдельности и попытаться кластеризовать общие кейсы и частотные сценарии.

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

    -

    Помимо общих сложностей с формированием продуктового видения API есть и более частные сложности с проверкой продуктовых гипотез. «Святой грааль» управления продуктом — создание максимально недорогого с точки зрения затраченных ресурсов minimal viable product (MVP) — обычно недоступен для менеджера API. Дело в том, что вы не можете так просто проверить MVP, даже если вам удалось его разработать: для проверки MVP API партнёры должны написать код (читай — вложить свои деньги); если по итогам этого эксперимента будет принято решение о бесперспективности продукта, эти деньги окажутся потрачены впустую. Разумеется, партнёры к подобного рода предложениям относятся с некоторым скептицизмом. Таким образом «дешёвый» MVP включает в себя либо компенсацию расходов партнёрам, либо затраты на разработку референсного приложения (т.е. в дополнение к MVP API разрабатывается сразу и MVP приложения, использующего этот API).

    +

    Помимо общих сложностей с формированием продуктового видения API есть и частные сложности с проверкой продуктовых гипотез. «Святой грааль» управления продуктом — создание максимально недорогого с точки зрения затраченных ресурсов minimal viable product (MVP) — обычно недоступен для менеджера API. Дело в том, что вы не можете так просто проверить MVP, даже если вам удалось его разработать: для проверки MVP API партнёры должны написать код (читай — вложить свои деньги); если по итогам этого эксперимента будет принято решение о бесперспективности продукта, эти деньги окажутся потрачены впустую. Разумеется, партнёры к подобного рода предложениям относятся с некоторым скептицизмом. Таким образом «дешёвый» MVP включает в себя либо компенсацию расходов партнёрам, либо затраты на разработку референсного приложения (т.е. в дополнение к MVP API разрабатывается сразу и MVP приложения, использующего этот API).

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

    -

    Другой вариант проверки гипотез — это собственный сервис (или сервисы) компании-разработчика API, если такие есть. Внутренние заказчики обычно более лояльно относятся к трате ресурсов на проверку гипотез, и с ними легче договориться о сворачивании или замораживании MVP. Однако таким образом можно проверить далеко не всякую функциональность — а только то, на которую имеется хоть в каком-то приближении внутренний заказ.

    +

    Другой вариант проверки гипотез — это собственный сервис (или сервисы) компании-разработчика API, если такие есть. Внутренние заказчики обычно более лояльно относятся к трате ресурсов на проверку гипотез, и с ними легче договориться о сворачивании или замораживании MVP. Однако таким образом можно проверить далеко не всякую функциональность — а только ту, на которую имеется хоть в каком-то приближении внутренний заказ.

    Вообще, концепция “eat your own dogfood” применительно к API означает, что у команды продукта есть какие-то свои тестовые приложения (т.н. “pet project”-ы) поверх API. Учитывая трудоёмкость разработки подобных приложений, имеет смысл поощрять их наличие, например, предоставлением бесплатных квот на API и вычислительные ресурсы членам команды.

    Подобные pet project-ы также дают уникальный опыт: каждый может попробовать себя в новой роли. Разработчик узнает о типичных проблемах менеджера продукта: недостаточно написать приложение хорошо, нужно ещё и изучить своего потребителя, понять его потребности, сформулировать привлекательное предложение и донести его. Менеджеры продукта же, соответственно, получат какое-то представление о том, насколько технически просто или сложно воплотить их продуктовое видение в жизнь, и какие проблемы возникнут при реализации. Наконец, и тем, и другим будет исключительно полезно взглянуть со стороны документацию API, на user story разработчика, который впервые услышал о продукте API и пытается в нём разобраться.

    Глава 53. Взаимодействие с разработчиками 

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

    @@ -7104,11 +7104,11 @@ button.view.compu

    Этот факт напрямую влияет на всё, что мы обсуждали выше (кроме, может быть, Open Source — разработчики-любители редко обращают на него внимание):

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

    Наконец, практически невозможно в рамках одного продукта создать такой API, который одинаково хорошо подходит и начинающим разработчикам, и профессионалам; первым необходима максимальная простота реализации базовых сценариев использования API, вторым — возможность адаптировать использование API под конкретный стек технологий и парадигму разработки, и стоящие перед ними задачи, как правило, требуют глубокой кастомизации. Мы обсудим этот вопрос более подробно в главе «Линейка сервисов API».

    Глава 54. Взаимодействие с бизнес-аудиторией 

    -

    Основные принципы работы с партнёрами несколько парадоксально полностью противоположны принципам взаимодействия с разработчиками:

    +

    Несколько парадоксально, но основные принципы работы с партнёрами полностью противоположны принципам взаимодействия с разработчиками: