
В первой части мы разобрались, как данные бегают по сети, что такое IP-адрес, домен, хостинг. Это всё - про «нижние уровни»: сеть, сервера, соединения.
Но когда вы открываете сайт или работаете с API, чаще всего вы видите не IP-адрес, а строку вроде:
https://example.com/shop/orders?status=new&page=2
Или:
mailto:support@example.com
Или:
myapp://product/123?from=push
Все эти строки - идентификаторы ресурсов. В мире веба для них есть формальный термин: URI. А то, что мы в быту называем «адрес сайта» или «URL» - это частный случай URI.
Нам нужно разобраться:
URI (Uniform Resource Identifier) - это унифицированный идентификатор ресурса.
Если разобрать каждое слово в отдельности, то мы получим следующую картину.
Resource (ресурс) - что угодно, к чему мы хотим обратиться: веб-страница, картинка, API-эндпойнт, файл, почтовый ящик, запись в приложении, чат, документ в облаке. «Ресурс» - это не обязательно что-то в интернете, это может быть сущность внутри конкретной системы.
Identifier (идентификатор) - строка, по которой ресурс можно однозначно узнать в рамках какой-то системы. Как паспортный номер для человека или инвентарный номер для вещи.
Uniform (унифицированный) - формат идентификатора стандартизирован. То есть разные системы могут использовать URI, и все будут понимать, как этот идентификатор примерно устроен.
URI - это просто строка-идентификатор в стандартизованном формате.
Одни URI описывают, где ресурс лежит и как к нему обратиться (это как раз URL), другие могут описывать ресурс без привязки к конкретному месту.
URI в общем виде состоит из нескольких логических частей. Упрощённо:
<схема>:<что-то_дальше_по_правилам_этой_схемы>
Схема (scheme) - это первое слово до двоеточия. Оно говорит к какому миру относится этот идентификатор и как с ним обращаться. Например:
После схемы идёт то, что понимает уже конкретная схема.
Для https: это будет структура, похожая на привычный URL (домен, путь, query-параметры и т.п.), для mailto: - адрес электронной почты и дополнительные параметры, для tel: - номер телефона.
Например:
mailto:support@example.com
Здесь:
Другой пример:
myapp://product/123?from=push
Здесь уже схема myapp (кастомная). Остальное интерпретируется самим приложением:
URI - это не обязательно адрес в интернете и не обязательно что-то, что открывается в браузере. Это просто стандартный формат строк-идентификаторов.
Теперь перейдём к тому, с чем вы сталкиваетесь каждый день.
URL (Uniform Resource Locator) - это унифицированный указатель местоположения ресурса. Если проще, то это такой URI, который не только идентифицирует ресурс, но и говорит, где он находится и как до него добраться по сети.
Например:
https://shop.example.com:8080/orders/123?include=items&debug=true
Разберём по частям.
Здесь:
Query-параметры обычно используются для дополнительных опций: фильтры, сортировки, настройки. При этом сам путь (/orders/123) указывает на базовый ресурс, а параметры уточняют, в каком виде его нужно вернуть.
Формально параметры разделяются &, каждый параметр - имя=значение.
Сервер читает эти параметры и использует их в логике:
(Опционально) Фрагмент (fragment)
В URL может быть ещё и фрагмент - часть после #, например:
https://example.com/docs/page#chapter2
В итоге URL всегда отвечает минимум на два вопроса:
Теперь главный вопрос: если URL - это частный случай URI, а в реальной жизни все говорят почти только «URL», нужно ли вообще заморачиваться?
Теоретически (как в стандартах):
Примеры для интуиции:
На практике большинство разработчиков и пользователей говорят «URL» про любые веб-адреса, которые видят в браузере или документации API. Слово «URI» чаще всплывает в стандартах HTTP/REST, в архитектурных обсуждениях и в формулировках вроде «URI ресурса», «идентификатор ресурса».
Для работы и общения с командой полезно понимать следующее:
Чуть подробнее остановимся на кастомных схемах, потому что они часто всплывают в мобильных и десктопных приложениях.
Мы уже видели примеры вроде:
mailto:support@example.com
tel:+123456789
myapp://product/123?from=push
Здесь:
Кастомные схемы позволяют открывать мобильное приложение из браузера (deep linking), передавать ему параметры (ID товара, источник перехода и т.д.) или «подцеплять» одно приложение к другому через стандартный формат URI.
С точки зрения нашей картины мира это всё URI. URL - это в основном то, что начинается с http:// или https:// и указывает путь к ресурсу по HTTP.
При обсуждении API и архитектуры вы будете видеть фразы вроде «URI ресурса», «базовый URL сервиса», «endpoint URL». Важно понимать, что это не три разных существа, а просто разные уровни формальности одного и того же понятия: адреса ресурса.
Когда фронтенд и бэкенд обсуждают контракты, они будут говорить:
«У нас есть endpoint GET /api/v1/users/{id}».
За этим стоит конкретный URL, в который добавляется домен и схема, а внутри команды могут говорить и «URL», и «URI», и «путь».
При интеграциях с внешними системами вы часто будете видеть документацию в терминах: «Base URL: https://api.partner.com/v2» и «Resource URI: /orders/{id}».
Это просто разные куски одной строки:
https://api.partner.com/v2/orders/123.