Что такое query-параметры (URL parameters) в HTTP?

Ответ

Query-параметры (или URL-параметры) — это пары ключ=значение, добавляемые в конец URL после знака ? для передачи дополнительных данных серверу. Несколько параметров разделяются символом &. Они используются для фильтрации, сортировки, пагинации и настройки запросов к API.

Структура URL: https://api.example.com/resource?param1=value1&param2=value2

Пример с пагинацией и фильтром:

https://api.example.com/users?role=admin&limit=10&page=2&sort=name

Параметры: role=admin, limit=10, page=2, sort=name.

Использование в коде (Python, requests):

import requests
params = {
    'q': 'search term',
    'page': 1,
    'sort': 'date',
    'is_active': 'true'
}
response = requests.get('https://api.example.com/search', params=params)
# Фактический URL: https://api.example.com/search?q=search+term&page=1&sort=date&is_active=true

Важные аспекты для тестирования API:

  • Валидация: Сервер должен корректно обрабатывать отсутствующие, необязательные и обязательные параметры.
  • Кодирование: Специальные символы (пробелы, &, =) должны быть правильно закодированы (например, пробел становится %20 или +).
  • Типы данных: Проверка обработки строковых, числовых и булевых значений.
  • Безопасность: Защита от инъекций через параметры (например, SQL-инъекция, если параметры используются в запросах к БД).

Ответ 18+ 🔞

Да ты посмотри, что эти ваши разработчики вытворяют! Взяли и прилепили к обычному URL какую-то хуйню после знака вопроса. Это, блядь, и есть query-параметры — парочки ключ=значение. Хочешь передать серверу какую-то доп.инфу, типа «дай мне только админов, да побольше, да отсортированных»? Вешай их на URL, как гирлянды на ёлку!

Как это выглядит, ёпта: https://api.example.com/resource?param1=value1&param2=value2 Видишь этот вопросительный знак? Всё, что после него — уже не просто адрес, а целая инструкция с пожеланиями. Несколько таких пожеланий разделяются амперсандом &. Просто, аж овердохуища!

Вот тебе пример из жизни, чтобы не быть голословным:

https://api.example.com/users?role=admin&limit=10&page=2&sort=name

Расшифровываю, как на духу: «Эй, сервер, дай-ка мне пользователей! Но только админов (role=admin), партийку в 10 штук (limit=10), вторую страницу такой партии (page=2), и чтоб по имени отсортировано было (sort=name)». Всё, пиздец, вопросов нет.

А вот как этим пользоваться в коде (Python, requests), если ты вдруг решил автоматизировать свою бурную деятельность:

import requests
params = {
    'q': 'search term',
    'page': 1,
    'sort': 'date',
    'is_active': 'true'
}
response = requests.get('https://api.example.com/search', params=params)
# А библиотека сама, хитрая жопа, склеит тебе итоговый URL: https://api.example.com/search?q=search+term&page=1&sort=date&is_active=true

Удобно, блядь! Не надо руками строки клепать.

Но тут, сука, есть подводные ебучие камни, о которые тестировщики лбы разбивают:

  • Валидация: А что будет, если я параметр не передам? Или передам пустой? Или передам ебаное page=ёпта вместо цифры? Сервер должен не сдохнуть, а красиво сказать «чувак, иди нахуй с такими данными» (в смысле, вернуть адекватную ошибку).
  • Кодирование: А если в значении параметра нужен пробел, или, не дай бог, сам знак &? Его надо закодировать, превратить в %20 или +. Иначе всё поломается, и получится пиздопроебибна вместо запроса.
  • Типы данных: Сервер должен понимать, что limit=10 — это число, а is_active=true — это булево значение, а не просто строки «10» и «true». А то потом удивление пиздец: почему сортировка не работает?
  • Безопасность: Вот это самый сок! Если сервер тупо берёт параметры и суёт их прямиком в SQL-запрос — это пиздец, кот сука собака. Любой школьник сделает SQL-инъекцию и вытащит все твои пароли. Надо экранировать, валидировать, и вообще, бздеть тут надо постоянно.

Вот так вот, коротко и без лишней воды. Параметры в URL — мощный инструмент, но, как и всё мощное, требует, чтобы мозги были включены. Иначе будет не API, а манда с ушами.