Запрос и ответ: разговор клиента с сервером
В прошлом уроке мы выяснили: API — это официант между клиентом и сервером. Теперь посмотрим, как именно происходит сам разговор. Хорошая новость: это буквально диалог из двух реплик. Клиент говорит одну фразу — это запрос. Сервер отвечает одной фразой — это ответ. Вот и всё.
В этом уроке мы разберём три простых понятия: что такое адрес (URL), что такое запрос и что такое ответ. Без статус-кодов, без методов, без заголовков — их детали будут позже, в модуле 02. Сейчас наша задача — увидеть форму разговора целиком.
Разговор из двух реплик
Вернёмся в ресторан. Когда вы общаетесь с официантом, разговор устроен предельно просто:
- Вы: “Принесите, пожалуйста, стейк”. (это запрос)
- Официант приносит тарелку со стейком. (это ответ)
Одна реплика туда, одна реплика обратно. В мире API всё точно так же. Клиент посылает запрос, сервер присылает ответ. Один запрос — один ответ. Это базовый ритм почти всего, что вы будете делать с API.
КЛИЕНТ СЕРВЕР
| |
| --- запрос: "дай мне прогноз на завтра" --> |
| | (думает, ищет данные)
| <-- ответ: "завтра +18, без осадков" ------ |
| |
Запомните эту картинку. Дальше мы лишь уточняем, что именно пишется в каждой реплике.
Адрес: куда мы вообще обращаемся (URL)
Чтобы сделать заказ, официанту надо подойти к вашему столику. А чтобы клиент мог обратиться к серверу, ему нужно знать адрес сервера. Этот адрес называется URL.
URL (Uniform Resource Locator) — это просто “адрес ресурса в интернете”. Вы видите URL каждый день в адресной строке браузера. Например:
https://api.github.com/users/torvalds
Разберём этот адрес как обычный почтовый. Представьте, что вы отправляете письмо:
https://— способ доставки. Пока считайте это просто пометкой “по интернету, защищённо”. (Подробно про https будет в модуле 02 и 03.)api.github.com— это как название здания, дом. Имя сервера, к которому мы обращаемся. Здесь живёт API GitHub./users/torvalds— это как номер квартиры внутри здания. Какой именно ресурс нам нужен. В данном случае — “пользователь по имени torvalds”.
То есть весь адрес читается так: “по интернету, обратись к серверу GitHub и попроси у него пользователя torvalds”. URL целиком отвечает на вопрос “куда и за чем мы идём”.
Слово “ресурс” будет встречаться часто. Ресурс — это просто “вещь, которую можно попросить у сервера”: пользователь, заказ, товар, прогноз погоды. Думайте о ресурсе как о блюде в меню — конкретная штука, которую можно заказать.
Запрос: что говорит клиент
Запрос (по-английски request) — это сообщение, которое клиент отправляет серверу. В самом простом виде запрос отвечает на два вопроса:
- Куда я обращаюсь? — это URL (адрес).
- Что я хочу сделать? — например, “получить данные” (по-английски это часто называют словом GET, “достать”). Пока достаточно понимать намерение: чаще всего вы будете просто просить данные — “покажи мне”.
В ресторанной аналогии запрос — это ваша фраза официанту целиком: “(куда: вот за этот столик) принесите (что: стейк)”. В мире API минимальный запрос — это “по адресу https://api.github.com/users/torvalds дай мне данные”.
Иногда запрос несёт с собой дополнительную информацию — например, когда вы не просите данные, а отправляете свои (регистрируетесь, создаёте заказ). Тогда к запросу прикладывается “тело” — содержимое, которое вы передаёте. Но в этом модуле мы остановимся на самом частом и простом случае: запрос “дай мне данные по этому адресу”.
Ответ: что говорит сервер
Ответ (по-английски response) — это сообщение, которое сервер присылает обратно клиенту. Ответ обычно содержит две вещи:
-
Получилось или нет. Сервер коротко сообщает, всё ли прошло хорошо: “вот, держи” или “извини, такого нет” или “у тебя нет прав”. Эти короткие сигналы называются статус-кодами — и им посвящён отдельный урок в модуле 02. Пока достаточно знать, что ответ всегда говорит, успешно ли выполнен запрос.
-
Данные. Если запрос успешен — в ответе лежат сами данные, которые вы просили: информация о пользователе, прогноз погоды, список товаров. Это “тарелка со стейком”, которую приносит официант.
В ресторанной аналогии ответ — это либо “вот ваш стейк” (успех + блюдо), либо “извините, стейк закончился” (неуспех + объяснение). Заметьте: даже отказ — это тоже полноценный ответ. Сервер всегда что-то отвечает, если он вообще жив и слышит вас.
КЛИЕНТ СЕРВЕР
| --- запрос: GET https://api.github.com/users/torvalds -->
| | (ищет пользователя)
| <-- ответ: "всё ок, вот данные про torvalds" ------ |
| (имя, число репозиториев, дата и т.д.) |
Собираем диалог целиком
Теперь у нас есть все три кусочка, и можно собрать полный разговор клиента с сервером:
- Клиент знает адрес (URL):
https://api.github.com/users/torvalds. - Клиент отправляет запрос: “по этому адресу дай мне данные”.
- Сервер выполняет работу и отправляет ответ: “всё ок, вот данные про этого пользователя”.
Это и есть фундамент всей работы с API. Какими бы сложными ни казались будущие темы — методы, статусы, заголовки, аутентификация — под ними всегда лежит эта простая тройка: адрес, запрос, ответ.
Каждый раз, когда вы открываете любой сайт в браузере, происходит ровно это: браузер (клиент) берёт адрес из строки, шлёт запрос на сервер, получает ответ и рисует страницу. Вы делали это тысячи раз — просто теперь знаете, как это называется.
Попробуй сам
Кода всё ещё нет — в следующем уроке мы наконец сделаем настоящий запрос руками. А пока разомнём понимание.
-
Откройте браузер и посмотрите на адрес в адресной строке любого сайта. Найдите в нём три части: способ доставки (
https), имя сервера (например,wikipedia.org) и путь к ресурсу (то, что после имени сервера). Какой ресурс вы сейчас “заказали”? -
Сформулируйте словами запрос и ответ для приложения погоды. Что клиент отправляет? Что сервер возвращает? Где здесь адрес?
-
Подумайте: что вернёт сервер, если вы попросите несуществующий ресурс — например, пользователя GitHub с выдуманным именем? Будет ли это вообще “ответ”? (Подсказка: да — сервер ответит “такого нет”. Отказ — тоже ответ.)