Представление пропущенных значений как нулевых или нет вообще в JSON - PullRequest
6 голосов
/ 21 июля 2011

Я создаю API веб-службы, используя JSON в качестве языка данных.При проектировании структуры данных, возвращаемых из службы, у меня возникают некоторые проблемы с выбором способа устранения пропущенных значений.

Рассмотрим пример: в моем интернет-магазине есть продукт, цена которого пока неизвестна,возможно, потому что продукт еще не был выпущен.Включаю ли я price: null (как показано ниже) или просто опускаю свойство price для этого элемента?

{
    name: 'OSX 10.6.10',
    brand: 'Apple',
    price: null
}

Моя главная задача - сделать API максимально простым в использовании.Явное нулевое значение проясняет, что на продукте можно ожидать price, но с другой стороны это похоже на потерянные байты.Может существовать целый ряд свойств, которые совершенно не относятся к данному конкретному продукту, хотя они актуальны и для других продуктов - следует ли показывать их как явно null?

{
    name: 'OSX 10.6.10',
    price: 29.95,
    color: null,
    size: null
}

Существуют ли "лучшие практики""на дизайн веб-службы, предпочитая явные или неявные нулевые значения?Любой стандарт де-факто?Или это полностью зависит от варианта использования?

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

FWIW, мое личное мнение:

Я включаю price: null (как показано ниже) или я просто опускаю свойство price для этого элемента?

Я бы установил значения «стандартных» полей на null.Хотя JSON часто используется с JavaScript и там, пропущенные свойства могут обрабатываться так же, как и свойства, для которых установлено значение NULL, это не должно иметь место для других языков (например, Java).Необходимость сначала проверить, присутствует ли поле, кажется неудобной.Установка значений на null, но наличие полей будет более согласованным.

Может существовать целый ряд свойств, которые совершенно не относятся к данному конкретному продукту, хотя и актуальны для других продуктов - следуетЯ также показываю их как явно null?

Я бы включил только те поля, которые относятся к продукту (например, не pages для компакт-диска).Задача клиента - правильно обрабатывать эти «необязательные» поля.Если у вас нет значения для определенного поля, относящегося к продукту, также установите для него значение null.


Как уже было сказано, самое важное - быть последовательным и четко указывать, какоеполя можно ожидать.Вы можете уменьшить размер данных, используя сжатие gzip.

0 голосов
/ 21 июля 2011

я не знаю, что такое "лучшая практика".Но я обычно не отправляю поля, которые мне не нужны.Когда я читаю ответ, я проверяю, существует ли значение:

if (res.size) {
  // response has size
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...