Go: Принять только полный ответ о последней статье — задача с проверкой
Практическая задача на Go по теме «Go-программа делает запрос к Article API». Условие содержит контракт функций, предоставленные типы и требования к результату. Используйте выданный шаблон и сохраняйте его публичные объявления. Перед проверкой разберите успешный путь, обработку ошибок и отмену операции, когда она предусмотрена контрактом. Здесь оценивается конкретный компонент сервиса; в полном курсе микросервисов на Go эти компоненты связываются с HTTP, PostgreSQL, gRPC и Kafka.
Принять только полный ответ о последней статье
Небольшой API статей дополнительно предоставляет фиксированный маршрут GET /articles/latest. При HTTP 200 он отдаёт один JSON-объект статьи, например {"id":"a-102","title":"Контекст запроса в Go"}. По контракту оба поля, id и title, обязательны и не могут быть пустыми строками. HTTP 200 с телом null, с отсутствующим полем или с пустым обязательным полем не даёт полноценной статьи, даже если JSON декодируется без ошибки.
Что уже дано
Проверяющая программа объявляет Article с полями ID и Title, передаёт ctx, настроенный *http.Client и базовый адрес baseURL без завершающего слеша. Публичный адаптер подставляет HTTP transport и вызывает вашу функцию без внешней сети. Вам не нужно создавать сервер, писать main, читать stdin или печатать результат.
Что нужно сделать
Реализуйте func LatestArticle(ctx context.Context, client *http.Client, baseURL string) (Article, error). Функция должна обратиться к GET <baseURL>/articles/latest переданным клиентом с переданным контекстом и вернуть статью только после HTTP 200 и корректного JSON-объекта статьи с непустыми id и title. Во всех остальных случаях верните ненулевую ошибку: это относится к невозможности составить или выполнить запрос, любому другому HTTP-статусу, ошибке чтения/декодирования, а также к пустым или отсутствующим обязательным полям. Для полученного ответа закрывайте тело при любом исходе. Текст ошибки произвольный, кроме полученного не-200 статуса: его числовой код должен присутствовать в ошибке. Параметров пути и query у маршрута нет.
Ввод и вывод
Публичный адаптер принимает служебные сценарии, вызывает вашу функцию и возвращает фактические наблюдения: результат или наличие ошибки, обращение к transport и закрытие тела ответа. Вашей функции не нужно разбирать сценарии или печатать результат. Ожидаемые наблюдения сравнивает сервер.
Запуск на Latorn: редактируйте реализацию в полном шаблоне, сохраняя предоставленные объявления и публичный адаптер RunScenarios. main не требуется. Адаптер принимает массив сценариев и возвращает наблюдения; ожидаемые результаты сравниваются отдельно на сервере. Для собственного запуска аргументы — JSON-массив с одним массивом сценариев: [[...]].
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- HTTP-клиент поиска на Go: обработка ответа и ошибок — задача
- Go: Декодирование артефакта из JSON — задача с проверкой
- Go: Обязательная и необязательная зависимость при отказе — задача с проверкой
- Go: HTTP-обработчик поиска задания через JobStore — задача с проверкой
- Go: HTTP-обработчик расчёта калорийности состава — задача с проверкой
- Go: Контрактный тест обработчика и клиента питания — задача с проверкой
