Введение в HTTP-сервер в Go
Сервер в смысле HTTP это сторона, которая слушает порт, принимает запрос и пишет ответ в том же соединении. Клиент уже знаком: он сам открывает обращение к адресу и читает ответ. Здесь роли меняются: программа ждет входящие обращения и решает, что вернуть по пути и методу.
Запрос несет путь, метод, заголовки и иногда тело. Ответ собирают в объект, куда пишут байты и служебные поля. Типичный учебный адрес это локальный хост с портом, чтобы проверять сервер с той же машины, где он запущен.
В Go за прием соединений и разбор запросов
отвечает пакет net/http из стандартной
поставки. Тот же пакет уже служил клиенту:
там читали чужой ответ, здесь регистрируют
функции под пути и запускают прослушивание.
Формат JSON и контекст с отменой тоже
уже пройдены и пригодятся для тела
и аккуратной остановки.
В этом разделе пройдем регистрацию маршрута,
именованный кусок пути в шаблоне, параметры
после знака вопроса, чтение тела при отправке,
ответ текстом JSON и остановку без обрыва
уже идущих ответов. Файлы и первые предложения:
route/ru.html (маршрут связывает путь
с функцией, которая пишет текст ответа),
path/ru.html (кусок пути берут по имени
из шаблона маршрута), params/ru.html
(параметры после знака вопроса читают по имени),
post/ru.html (тело запроса читают,
когда метод отправки не пустой просмотр),
json-response/ru.html (ответ можно
собрать структурой и отдать с нужным заголовком
типа), shutdown/ru.html (сервер
останавливают через контекст, не обрывая уже
идущие ответы), practice/ru.html
(в этих задачах потренируем маршрут, кусок
пути и ответ).