Nimex
@Nimex
Junior Frontend

Является ли нормальной практикой менять тип данных в хэндлере?

Хотелось бы для понимания знать как делают опытные разработчики, правильно ли изменять тип переменой (в данном случае id со string на uuid) в хэндлере, или это необходимо делать в сервисе? А хэндлер необходим только для получения, передачи и вывода данных?

func (h *Handler) GetItemByID(w http.ResponseWriter, r *http.Request) {
	id := chi.URLParam(r, "id")
	idUuid, err := uuid.FromString(id)
	if err != nil {
		responseApi.WriteError(w, r, http.StatusBadRequest, slogError.Err(err))
		return
	}

	item, err := h.Svc.GetByID(r.Context(), idUuid)
	if err != nil {
		responseApi.WriteError(w, r, http.StatusInternalServerError, slogError.Err(err))
		return
	}

	responseApi.WriteJson(w, r, http.StatusOK, item)
}
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 2
@calculator212
правильно ли изменять тип переменой (в данном случае id со string на uuid) в хэндлере, или это необходимо делать в сервисе?
Зависит от ситуации, если без этого никак и особых проблем от смены не будет, то можно сразу в хендлере поменять. Если от этого изменения будут ломаться внешние клиенты, то тут придется уже по другому обходить эту проблему, например добавлять v2/api.
Ответ написан
Комментировать
Я считаю, что десериализация данных должна делаться максимально близко ко входу в сервис, т.е. в http хендлере.

Мы сразу же сможем рано провалидировать этот UUID, и не будем передавать в слой бизнеса невалидные данные. Чем раньше происходит валидация, тем нам меньше работы. Валидация UUID - это обычная штука, она никак не связана с бизнес-логикой, так что абстракции не протекают, и есть смысл её делать в хендлере.

В хендлере вы должны принять строковое либо какое-то другое представление запроса и и преобразовать в данные, имеющие смысл для слоя бизнес-логики.

Думаю, для бизнес-логики имеет смысл оперировать уже UUID, а не строкой.

Теперь предположим, что нам нужно сделать дополнительно уже не http хендлер, а что-то, что будет получать на вход из другого пакета уже готовый UUID. Как-то нехорошо будет преобразовать этот UUID в строку и передавать в бизнес-логику эту строку только затем, чтобы там эта строка снова была преобразована в UUID.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы