Vale lembrar que as normas atuais (RFC 8259 e ECMA 404) definem que qualquer JSON Value é um JSON válido.
Ou seja, se eu tiver apenas 42
, "Fulano"
ou true
, todos esses são JSON's válidos (uma API Web que retorne somente isso é perfeitamente válido e tecnicamente correto).
Eu sei que hoje em dia a esmagadora maioria das API's Web retorna um objeto, mas isso não quer dizer que é a única possibilidade. Nada impede que eu retorne apenas um número, uma string, um booleano ou um array.
O exemplo clássico (que eu já vi por aí) é, por exemplo, uma API que tem a URL /users
retornando algo como:
{
"usuário 0": { "nome": "Fulano", "idade": 42 },
"usuário 1": { "nome": "Ciclano", "idade": 20 },
"usuário 2": { "nome": "Beltrano", "idade": 30 }
}
Só que as chaves "usuário X" não acrescentam nenhuma informação relevante - se a URL é /users
, eu já sei que ela retorna dados de usuários, então o retorno poderia muito bem ser um array:
[
{ "nome": "Fulano", "idade": 42 },
{ "nome": "Ciclano", "idade": 20 },
{ "nome": "Beltrano", "idade": 30 }
]
A própria API do TabNews faz isso: ao acessar https://www.tabnews.com.br/api/v1/contents
, o retorno é um array de objetos (repare que começa com [
).
Outro exemplo seria uma URL como /users/quantidade
que retorna a quantidade de usuários. Em vez de retornar { "quantidadeUsuarios": 42 }
, por que não retornar apenas 42
? Afinal, a URL já indica que é a quantidade de usuários, não tem porque trafegar informação redundante.