Чем в golang GIN отличаются методы ctx.AbortWithStatusJSON() от ctx.JSON()

Чем отличаются методы ctx.AbortWithStatusJSON() от ctx.JSON()  ? как я понял первый из них внутри себя вызывает ДВА метода - Abort() , который  прерывает обработку следующих в цепочке обработчиков и ВТОРОЙ ctx.JSON() который  возвращает ответ клиенту.

func (c *Context) AbortWithStatusJSON(code int, jsonObj any) {
    c.Abort()
    c.JSON(code, jsonObj)
}

Отсюда возникает вопрос - зачем во многих случаях вызывают  ctx.JSON() ?

  • чтобы вернуть ответ и ПРОДОЛЖИТЬ выполнять обработчики по цепочке ? а зачем нам выполнять следующие обработчики , если мы уже вернули ответ клиенту ?

  • или ctx.JSON() тоже прерывает как то цепочку запросов ?

  • то есть я хочу спросить если ctx.JSON() уже вернул ответ клиенту то какой СМЫСЛ дольше продолжать цепочку обработчиков


Ответы (1 шт):

Автор решения: Uranus

Отвечаю на вопрос "зачем продолжать выполнять следующие обработчики после ctx.JSON()".

Хотя JSON ответ уже сформирован и готов к отправке клиенту, в обычном случае все равно требуется выполнить все оставшиеся обработчики для того чтобы работало: логирование, сбор метрик, очистка ресурсов, пост-обработка.

Метод ctx.AbortWithStatusJSON применяется тогда, когда дальнейшая обработка запроса бессмысленна: ошибки авторизации, валидации и другие ошибки, после которых дальнейшая обработка невозможна или не имеет смысла.

→ Ссылка