Я разрабатываю API REST на основе спецификации HAL. API разрабатывается на PHP с помощью Symfony, и клиент строится в angularjs. API должен возвращать некоторые списки, и они будут показаны с использованием ngtables library, и потребуются параметры фильтрации, в идеале, в формате, который использует ngtables, например, в this sample.Передача массива с ключом и REST API после HAL
{ "name": "M", "age": "4" }
(Конечно будущие клиенты могут использовать одни и те же параметры.)
Моего фронтенда-напарник предлагает, чтобы я отправить JSON закодированные непосредственно в качестве параметра в URL, как это:
?filter=%7B%20%22name%22%3A%20%22M%22%2C%20%22age%22%3A%20%224%22%20%7D%20
Я не очень уверен в этом.
Я читал, как отправлять массивы по URL-адресу с параметром param[]=foo¶m[]=bar
, но это означает, что у него есть один ключ для нескольких значений. В моем случае мне нужно иметь возможность посылать разные значения ключей для массивов, как это делает объект Json.
Мне интересно, как должен быть URL-адрес запроса от клиента, чтобы иметь возможность включать все параметры фильтра внутри одного параметра, и если есть какой-либо стандартный способ сделать это.
EDITED: После @Ross_Turner Я хочу пояснить, что мое намерение передать массив значений ключа внутри параметра состоит в том, что у нас будет другой тип параметра. Например:
?filter=<my key-value array>&page=1&limit=50&anotherParam=whatever
Даже мы хотели бы использовать другой параметр, содержащий другой массив ключ-значение, как это:
?filter=<my key-value array>&sorting=<another key-value array>&page=1&limit=50
Где filter
и sorting
могут иметь одинаковые ключи.
Я только что отредактировал свой вопрос, пытаясь выяснить, почему я пытаюсь отправить массив значений ключа внутри параметра, имея возможность разрешать такие запросы, как этот '? Filter = & sorting = <другой ключ -value array> & page = 1 & limit = 50', где 'filter' и' sorting' могут иметь один и тот же ключ. –
А теперь я вижу, что в этом случае вам нужны только ключи и значения для параметров, которые вы хотите фильтровать, что должно означать, что только сортировка - это проблема, поскольку вам нужно указать ключи, независимо от того, являются ли они восходящими и нисходящими, а также какой порядок. Если вы должны поддерживать несколько значений сортировки, то вроде '? Name = M & age = 4 & sortBy = name + asc, age + desc'. Я настоятельно рекомендую вам использовать ключи фильтрации и значения как только параметры запроса в запросе GET, так как это довольно стандартный способ запроса ресурса RESTful. –
Спасибо @ RossTurner. Что делать, если использовать другие параметры, такие как '? Page = 1 & limit = 50'. Правильно ли иметь «имя» или «возраст» на том же уровне? –