При создании программного обеспечения вы, скорее всего, столкнетесь с ситуацией, когда вам необходимо взаимодействовать с каким-либо внешним API. Когда дело доходит до Javascript, первоначальный способ сделать это — использовать API с именем XMLHttpRequest, который, несмотря на его название, может использоваться для отправки и получения других типов данных, кроме XML. Когда дело доходит до NodeJS, нам предоставили аналогичную структуру http для естественной обработки HTTP-запросов.

Однако XMLHttpRequest и http являются довольно низкоуровневыми фреймворками и построены вокруг событий. Это делает их немного неуклюжими для использования в современном коде, где асинхронный код чаще всего обрабатывается с помощью обратных вызовов, обещаний или асинхронного/ожидания. Поэтому сообщество разработчиков открытого исходного кода создало множество различных библиотек, чтобы упростить разработчикам выполнение HTTP-запросов. Первой библиотекой для этого была jQuery с их модулем ajax. Другие библиотеки включают axios и request, которые также предоставляют лучший интерфейс для использования разработчиками.

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

Однако этот API был недоступен в NodeJS, где мы были вынуждены использовать сторонние библиотеки. Это означает, что если вы хотите работать с полным стеком NodeJS на бэкенде, вам нужно либо включить одну из этих библиотек для своего внешнего интерфейса, либо запомнить разные способы выполнения HTTP-запросов для вашего внешнего интерфейса и внутреннего интерфейса. Рост node-fetch, который имитирует API-интерфейс fetch для Node, показывает, насколько разработчики хотят работать с этим API во всем стеке.

Мы рады видеть, что начиная с NodeJS 17.5 у нас будет доступный API-интерфейс fetch для использования в нашем бэкэнд-коде без каких-либо дополнительных зависимостей. Он все еще экспериментальный, и для его включения вам нужно запустить узел с флагом --experimental-fetch, но мы рекомендуем вам включить его и попробовать. Новая реализация основана на Undici, которая обеспечивает значительные улучшения задержки и пропускной способности.