Как вы представляете бесконечность в JSON API?
каков наилучший способ представления бесконечности в JSON API? например, бесплатно читать статьи за этот месяц (это будет конечное число на некоторых подписках и бесконечное на премиум-подписке).
Это лучшая идея, чтобы вернуться null
для этого случая использования или расширения JSON и используйте javascript Infinity
значение? Последнее кажется более подходящим, но я никогда не видел примера API, который делает это.
было бы круто, если бы у любого были примеры общедоступных веб-API, которые представляют бесконечность.
6 ответов
Я бы включил поле "limit", которое существует только тогда, когда действительно есть предел:
когда у пользователя осталось 40:
{
"yourdata":"",
"limit": 40
}
когда пользователь имеет неограниченный доступ, удалите его, то есть нет предела:
{
"yourdata":""
}
мое предложение-использовать числа для определенных значений и строки для теоретических значений. Я думаю, это самое ясное.
{"shoes": 89, "cars": "infinity", "myBankAccount", "negative-infinity"}
тем не менее, это не кажется популярным выбором. Я видел -1
,null
и undefined
(отсутствие имущества) означает неограниченное во многих случаях.
в VMware мы используем -1, чтобы указать, что нет ограничений (память, процессор, VMs), и у нас были проблемы с использованием null, потому что BlazeDS преобразовал null в 0, и 0 был допустимым значение.
вероятно, будет лучше представлять неограниченные подписки как совершенно другой тип подписки, поэтому у вас даже нет проблемы с тем, как представлять бесконечность. В будущем вы можете поэкспериментировать с подписками, основанными на времени, а не на количестве, например, неограниченный доступ в течение месяца, и тогда вам придется иметь дело с датой expriry.
тем не менее, не будет ли конечное, но достаточно большое число, такое как 1e100? Если у вас математика, 1e100 - 1 = 1e100 в ограниченной точности чисел с плавающей запятой.
вы не можете расширить JSON. Ну, вы можете продлить его, но тогда это больше не JSON. Невозможно представить бесконечность или NaN в JSON. Существует очень строгий синтаксис для чисел, и бесконечность или NaN не являются его частью.
вы можете сохранить очень большое значение (1e300), вы можете использовать строку " Inf " или " NaN " и убедиться, что все обрабатывают ее правильно, или, возможно, использовать {"value":" Inf"}, а затем вы можете быть уверены, что все либо правильно ее обрабатывают, либо крахи.
Итак,вы хотите, чтобы ваша ИТ-система представляла абстрактную концепцию для вашего реального случая использования? Не делай этого. Она вообще не соотносится с реальностью.
в реальности не существует бесконечного количества свободно читаемых статей, так зачем его моделировать?
даже если клиент платит премию, вы не сможете доставить бесконечные статьи! ;)
просто используйте большое число. Тогда у вас будет меньше сложности. Меньше путать следующего разработчика, меньше специальные случаи для обработки.
да, число, которое вы выберете, будет довольно произвольным, но что с того?
Я бы рекомендовал использовать значение Бесконечности JavaScripts, потому что оно согласовано.
например:
var x = 1;
var y = 0;
var z = x / y;
console.log(z);
// results in `Infinity`
Я бы сказал null
- также другой выбор, но это может быть ошибочно принято за никакой ценности где Infinity
на самом деле значение бесконечной возможности.
определенно не используйте NaN
. Это странный зверь, и Эс извинился за эту аномалию.
возьмите это, например:
var x = NaN;
if (x === x) {
console.log('Good');
} else {
console.log('What?');
}
в выше ответ приводит к " что?- что говорит нам о том, что Нэн-это некая ценность, а не число.
кроме того,typeof
это number
. Вы можете сказать, положительная это бесконечность или отрицательная. Если вы работаете с числами, используйте Infinity
. Он последовательно равен Infinity
и будет лучшим решением.
var x = Math.log(0);
console.log(x);
console.log(typeof(x));
if (x === x) {
console.log('yes');
}
обновление
С здесь - вы можете использовать:
{ a: { is_infinity: true, value: null}, b: { is_infinity: false, value: 10 } }