VladimirAndreev
@VladimirAndreev
php web dev

Как сделать необязательные параметры post-запроса?

Доброго вечера!
Есть веб-сервис, который на один из адресов принимает пост-запросы, которые предназначены для фильтрации данных.
Параметры фильтрации приходят в виде json.

сейчас работает как:

type ItemsFilters struct {
    ItemIds []int `json:"item_ids"`
    ParamA bool `json:"param_a"`
    ParamB bool `json:"param_b"`
    ParamC bool `json:"param_c"`
}

var filters ItemsFilters
context.bindJSON(&filters)


Фронт, разумеется, может использовать один сервис в куче разных мест и никто полный набор параметров присылать не будет, надо фильтровать по тому, что пришло и игнорировать все остальное.

Печаль в том, что если прислать только массив item_ids, то 3 остальных параметра == false и совершенно непонятно, как узнать, на самом деле они пришли false или это значение по-умолчанию.

Да, можно прислать еще массив filters, в котором перечислить активные фильтры и опираться на него, но это даже в мыслях выглядит полным отстоем..

Заранее спасибо :-)
  • Вопрос задан
  • 643 просмотра
Решения вопроса 2
VladimirAndreev
@VladimirAndreev Автор вопроса
php web dev
Вариант Даша Циклаури мне нравится больше, но это тоже рабочий вариант:

type FilterPost struct {
	StationIds interface{} `json:"station_ids"`
	Params     struct {
		L interface{} `json:"l"`
		X interface{} `json:"x"`
		Z interface{} `json:"z"`
	} `json:"params"`
}
Ответ написан
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
можно попробовать использовать указатели и вставлять проверки на nil, например
type FooOrBar struct {
    Name   string   `json:"foo"`
    Type   string   `json:"type"`
    Item   *string   `json:"item,omitempty"`
    List   []string `json:"list,omitempty"`
    FooInt *int     `json:"foo_int,omitempty"`
    BarInt *int     `json:"bar_int,omitempty"`
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы