Domanda

Attualmente stiamo pianificando una nuova API per un'applicazione e discutendo i vari formati di dati che dovremmo usare per lo scambio. C'è una discussione abbastanza intensa in corso sui meriti relativi di CSV , JSON e XML .

Fondamentalmente, il punto cruciale dell'argomento è se dovremmo supportare CSV a causa della mancanza di ricorsione ( ovvero avere un documento che ha autori multipli e più riferimenti richiederebbero più chiamate API per ottenere tutte le informazioni ).

Nelle esperienze che potresti aver avuto lavorando con informazioni provenienti da API Web e cose che possiamo fare per rendere la vita più facile agli sviluppatori che lavorano con la nostra API .


La nostra decisione:

  

Abbiamo deciso di fornire XML e JSON a causa della difficoltà di ricorsione in CSV che richiedono più chiamate per un'unica operazione logica. JSON non ha un parser in Qt e Protocol Buffers non sembra avere un PHP non alfa implementazione in modo che siano disponibili anche per il momento ma probabilmente saranno supportati alla fine.

È stato utile?

Soluzione

CSV è uscito subito. JSON è una notazione di oggetti più compatta rispetto a XML, quindi se stai cercando volumi elevati ha il vantaggio. XML ha una penetrazione più ampia nel mercato (adoro quella frase) ed è supportato da tutti i linguaggi di programmazione e dai loro quadri di base. JSON ci sta arrivando (se non già lì).

Personalmente, mi piacciono le parentesi. Scommetto che più sviluppatori si sentono a proprio agio nel lavorare con i dati XML che con JSON.

Altri suggerimenti

I vantaggi:

  • XML: molte librerie, gli sviluppatori ne hanno familiarità, XSLT, possono essere facilmente convalidati da client e server (XSD, DTD), dati gerarchici
  • JSON - facilmente interpretabile sul lato client, notazione compatta, dati gerarchici
  • CSV - Apre in Excel (?)

Svantaggi:

  • XML: gonfio, più difficile da interpretare in JavaScript rispetto a JSON
  • JSON - Se usato in modo improprio può rappresentare una falla nella sicurezza (non usare eval), non tutte le lingue hanno librerie per interpretarlo.
  • CSV - Non supporta i dati gerarchici, saresti l'unico a farlo, in realtà è molto più difficile di quanto la maggior parte degli sviluppatori pensi di analizzare file CSV validi (i valori CSV possono contenere nuove righe purché siano tra virgolette, ecc. ).

Dato quanto sopra, non mi preoccuperei nemmeno di supportare CSV. Il client può generarlo da XML o JSON se è veramente necessario.

CSV ha così tanti problemi come un modello dati complesso che non lo userei. XML è molto flessibile e facile da programmare: i client non avranno problemi a codificare generatori e parser XML, puoi persino fornire parser di esempio usando SAX.

Hai verificato il formato dei dati di rete di Google? Si chiama Protocol Buffers. Non so se sia utile per un servizio REST, tuttavia, poiché salta anche l'intero livello HTTP.

L'XML può essere un po 'pesante a volte. JSON è piuttosto carino, tuttavia, ha un buon supporto linguistico e i dati JSON possono essere tradotti direttamente in oggetti nativi su molte forme di gioco.

Non ho alcuna esperienza con JSON, CSV funziona fino al punto in cui i tuoi dati sono molto tabulari e strutturati in modo uniforme. L'XML può diventare ingombrante molto rapidamente, soprattutto se non si dispone di uno strumento che crea automaticamente i collegamenti ai propri oggetti.

Non ho provato neanche questo, ma Buffer di protocollo di Google sembrano davvero semplici, formato semplice , crea collegamenti automatici a C ++, Java e Python e implementa la serializzazione e la deserializzazione degli oggetti creati.

Oltre a quanto già detto da Allain Lalonde , un ulteriore vantaggio di CSV è che tende a essere più compatto di XML o addirittura JSON. Quindi, se i tuoi dati sono rigorosamente tabulari, con una gerarchia completamente piatta, CSV potrebbe essere una scelta corretta. Ulteriori svantaggi del CSV è che può usare diversi delimitatori e separatori decimali, a seconda dello strumento (e persino del paese!) Che l'ha generato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top