chave nula vs ausente na resposta da API REST [fechada]

40

Digamos no meu aplicativo, alguns usuários nos dão seu sobrenome e outros não. Em uma resposta da API REST, qual corpo é preferido:

Com um valor "nulo":

{"firstName": "Bob",
 "lastName": null}

Ou apenas uma chave ausente:

{"firstName": "Bob"}
jtmarmon
fonte

Respostas:

31

Considere remover valores vazios ou nulos.

Se uma propriedade for opcional ou tiver um valor vazio ou nulo, considere retirar a propriedade do JSON, a menos que haja uma forte razão semântica para sua existência.

{
  "volume": 10,

  // Even though the "balance" property's value is zero, it should be left in,
  // since "0" signifies "even balance" (the value could be "-1" for left
  // balance and "+1" for right balance.
  "balance": 0,

  // The "currentlyPlaying" property can be left out since it is null.
  // "currentlyPlaying": null
}

Leitura adicional
Guia de estilo do Google - Valores de propriedade vazios ou nulos Os valores
nulos devem ser incluídos nas respostas JSON de uma API REST?

Robert Harvey
fonte
obrigado pelo link, Robert. mesmo securrentlyPlaying haja algumas respostas e não outras, é preferível que o cliente verifique se a chave está lá ou não, em vez de verificar se é nula?
Jtmarmon
nulle undefinedtêm quase o mesmo significado em Javascript, e você pode verificar os dois usandoif (myProperty == null)
Robert Harvey
bem, na verdade, no meu caso, o cliente pode ser java, objetivo-c ou javascript. o link dentro do segundo link (API-craft) indica para mim que nulo se encaixa em nosso caso de uso semântico, mas principalmente que devo tomar uma decisão e cumpri-lo: P, obrigado novamente
jtmarmon
Simples: se o aplicativo precisar distinguir entre valores diferentes, o servidor deverá fornecer valores diferentes, caso contrário, ele não precisa e não deve. Seu aplicativo precisa distinguir entre uma chave que não está presente, uma chave tem uma string vazia como valor e uma chave com um valor nulo?
gnasher729
3
A resposta nesta postagem aborda algumas boas razões para você não remover os campos nulos.
Dave New