Редко попадаются хорошие статьи на русском — то конкретики нет, то уровень не выдержан, то вообще творчество копирайтера или "редактора блога", где все термины перепутаны, "волны перекатывались через мол и падали вниз стремительным домкратом". 80% статей я вообще не могу читать, такая там чушь. Читаю поэтому в основном стандарты, первоисточники и научные статьи.



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

про собственно идемпотентность

про возможные ошибки связи (сервер не отвечал, сервер тормозил и случился таймаут, из-за разрыва связи не пришел ответ сервера и т.п.)

про гонку параллельных запросов к БД

про коды ошибок http (для чего применять не только 200, 403 и 404, но и другие, например, 410)

про дубли (ошибка) и двойные заказы с одного адреса (нормальное поведение)

про проксирование в запросах (и как это связано с идемпотентностью)

про обработку таймаутов сервера и БД

про то, как сделать POST идемпотентным и при чем тут токены

про использование пользовательских сценариев для проектирования и проверки логики API

про подсматривание хороших решений в других API (насмотренность при проектировании API очень важна!)

про идемпотентность операций изменения и удаления

про взаимодействие с внешними сервисами

и даже немного про очереди сообщений и стратегии доставки ("как минимум один раз" или "как максимум один раз")



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