URI и query-параметры
URI — строка, однозначно указывающая на ресурс, а query-параметры — её часть после знака вопроса, которой запросу задают фильтры и опции.
Что такое URI
URI (Uniform Resource Identifier, унифицированный идентификатор ресурса) — строка, однозначно указывающая на ресурс. Ресурсом может быть страница, файл, эндпоинт API или что-то вовсе не сетевое — например, книга по ISBN.
Разница с соседними аббревиатурами:
- URI — общее понятие: идентификатор.
- URL (Locator) — URI, который говорит где ресурс лежит и как его достать:
https://example.com/page. Все URL — это URI. - URN (Name) — URI, который называет ресурс, не указывая местоположение:
urn:isbn:9785990944169.
На практике почти всё, с чем работают в вебе, — это URL. Слово «URI» чаще встречается в спецификациях и документации API, где важна точность формулировки.
Из чего состоит URI
https://user:pass@api.example.com:8443/v1/orders?status=paid&limit=50#top
└─┬─┘ └───┬───┘ └──────┬───────┘ └┬─┘└───┬───┘ └────────┬─────────┘└┬┘
scheme userinfo host port path query fragment
| Часть | Назначение | Замечание |
|---|---|---|
| scheme | протокол | https, ftp, postgresql, ssh |
| host | домен или IP | резолвится через DNS |
| port | порт | по умолчанию 80 для http, 443 для https |
| path | путь к ресурсу | регистрозависим на Linux-серверах |
| query | параметры запроса | всё после ? |
| fragment | якорь | на сервер не отправляется |
Фрагмент после # обрабатывает только браузер — в логах Nginx его не будет, и в API он бесполезен.
Query-параметры
Query (строка запроса) — часть URI после ?, набор пар ключ=значение, разделённых &. Ими не выбирают ресурс, а уточняют, каким он должен быть: фильтры, сортировка, пагинация, формат ответа.
# Фильтр, сортировка и постраничная выдача
curl -G https://api.example.com/v1/orders \
--data-urlencode "status=paid" \
--data-urlencode "created_after=2026-01-01" \
--data-urlencode "sort=-created_at" \
--data-urlencode "limit=50"
Слово «query» многозначно: в вебе это строка запроса в URL, в базах данных — SQL-запрос. Общий смысл один — «запрос», а конкретика определяется контекстом.
Что стоит помнить о query-параметрах:
- Единого стандарта для массивов нет.
?id=1&id=2,?id[]=1&id[]=2и?id=1,2— все три варианта живые, и парсит их каждый фреймворк по-своему. Смотрите документацию сервиса. - Кодирование обязательно. Пробел, кириллица,
&,+и#внутри значения ломают разбор, если их не закодировать: пробел →%20,&→%26. В curl за это отвечает--data-urlencode. - Query-строка светится везде. Она попадает в логи сервера, историю браузера и заголовок
Referer— поэтому API-ключи и токены передают заголовком, а не параметром. - Длина ограничена. Жёсткого лимита в стандарте нет, но у браузеров и веб-серверов есть свои пределы на размер строки запроса. Огромные списки фильтров передают телом через
POST.
Что такое GET
GET — HTTP-метод чтения: «отдай мне ресурс по этому URI». Всё, что нужно передать, идёт в пути и query-параметрах, тела у GET-запроса, как правило, нет.
Отсюда свойства метода: GET-запрос можно кешировать, повторять и класть в закладки, и он не должен ничего менять на сервере. Ссылка GET /orders/42/delete — классическая ошибка: любой краулер или префетч браузера пройдёт по ней и удалит заказ. Изменения делают через POST, PATCH, DELETE.
| GET | POST | |
|---|---|---|
| Где данные | в URI и query | в теле запроса |
| Меняет состояние | не должен | да |
| Кешируется | да | нет |
| Виден в логах и истории | целиком | только путь |
URI и Web UI
Похожие на слух, но не связанные вещи. URI — адрес ресурса. Web UI (Web User Interface) — веб-интерфейс: панель управления в браузере вместо командной строки. Так называют, например, веб-панель Portainer или интерфейс роутера. Общее у них только то, что у любого Web UI есть свой URL.
Связанные термины
- API endpoint — адрес конкретной операции API
- HTTP — где применяются методы GET и POST
- Домен — часть host в URI
- Пагинация — самый частый случай query-параметров
- API-ключи — то, что нельзя класть в query
Готовы запустить GPU-задачу?
Запустить GPU-сервер