Introduza o termo a pesquisar e clique Enter.

JSON/HTML/XML – Qual devolver?

Nov 10 16

Escrito por Luis Nabais @ 16/11/10 21:11 | 2 Comentários »

Bem este post vai servir não só como uma forma rápida de apanhar algumas opiniões como também para ficar com uma nota para mim próprio sobre esta ideia.

Para o meu TV Wall estou a tentar ir o mais longe possível no juntar da API da aplicação com o que efectivamente é visível para os utilizadores e parte disso passa por tentar ter praticamente o mesmo esquema de URLs tanto para o browser como para a API utilizada pelos mais diversos clientes (quer seja a própria aplicação web em javascript ou outra qualquer hipotética aplicação nativa). Isto faz com que os endereços se tornem por exemplo em algo como /show/house para aceder, neste caso, à pagina associada à série House.

Agora o desafio: como fazer o mesmo endereço devolver HTML para um browser mas JSON (ou XML ou qualquer outro formato de dados) para uma aplicação? A minha resposta passa pelos cabeçalhos HTTP, mais concretamente pelo cabeçalho ACCEPT que ao anunciar que aceita um determinado tipo de dados permite-me devolver-lhe esse tipo em particular deixando o HTML normal para fallback.

Claro que eu posso já começar a ver os problemas associados a esta abordagem: e se surgir um browser que manda um cabeçalho a dizer aceitar application/json quando o que o utilizador quer mesmo receber é a versão HTML? E se um cliente enviar no cabeçalho que aceita tanto JSON como XML? Qual dos dois devolver? Sim, isto são tudo questões muito validas e é por isso mesmo que coloquei esta entrada no meu blog. Opiniões?

pub:

2 Comentários

  1. Tiago Boldt Sousa

    17 de Novembro de 2010 ás 10:10

    a utilizar Google Chrome 7.0.517.44 em Linux

    Bom dia,

    Eu faria assim: A api retorna sempre json. Qualquer pessoa que use a API vai ficar contente com os resultados em json. O URL deveria ser algo como /API/show/house.

    Tens depois outro handler para a tua página que invoca internamente o handler de json para obter os dados e que depois constrói a página, HTML, com estes dados. Assim garantes que a APIestá correcta, uma vez que tu mesmo usas os resultados desta e tens a tua página a retornar sempre HTML onde é esperado e JSON na parte da API.

    Espero ter sido claro e que a minha opinião ajude.

    Cumprimentos.

    • Dextro

      17 de Novembro de 2010 ás 10:29

      a utilizar Mozilla Firefox 3.6.12 em Fedora Linux

      Pois, isso é a abordagem conservadora e provavelmente será o que vou efectivamente fazer quando for para produção mas o que eu gostava mesmo de saber era se esta ideia é minimamente fiável ou não. Eu bem sei que confiar nos headers enviados pelos browsers não é necessariamente boa ideia…