2008-09-26 6 views
22

Obecnie planujemy nową aplikację API i debatujemy na temat różnych formatów danych, których powinniśmy użyć do wymiany. Prowadzi się dość intensywną dyskusję na temat względnych zalet CSV, JSON i XML.Jakie są relatywne zalety CSV, JSON i XML dla REST API?

zasadzie sedno argumentu jest to, czy powinniśmy wspierać CSV w ogóle ze względu na brak rekursji (czyli posiadające dokument, który ma multiple authors i multiple references wymagałoby multiple API calls uzyskanie wszystkich information).

W doświadczeniach, które można mieć podczas pracy z informacjami z Web APIs i rzeczy, które możemy zrobić, aby ułatwić życie programistom pracującym z naszym API.


Nasza decyzja:

Zdecydowaliśmy się dostarczyć XML i JSON ze względu na trudności w rekursji w CSV wymagające wielu połączeń dla pojedynczej operacji logicznej. JSON nie ma analizatora składni w Qt i Protocol Buffers nie wydaje się mieć implementacji non-alpha PHP, więc są one na razie zbyt, ale prawdopodobnie będą obsługiwane ostatecznie.

+0

Piękno CSV jest w swojej prostocie. – Ambo100

Odpowiedz

18

CSV jest już dostępny. JSON jest bardziej zwartą notacją obiektu niż XML, więc jeśli szukasz dużych wolumenów, ma tę zaletę. XML ma szerszą penetrację rynku (uwielbiam to zdanie) i jest obsługiwany przez wszystkie języki programowania i ich podstawowe ramy. JSON się tam dostanie (jeśli już tam nie jest).

Osobiście lubię klamry. Założę się, że więcej programistów jest wygodnych w pracy z danymi XML niż z jsonem.

2

CSV ma tak wiele problemów, jak złożony model danych, którego nie użyłbym. XML jest bardzo elastyczny i łatwy do zaprogramowania - klienci nie będą mieli problemu z kodowaniem generatorów XML i analizatorów składni, można nawet zapewnić parsery próbników za pomocą SAX.

Czy sprawdziłeś format danych sieci Google? Nazywa się bufory protokołów. Nie wiadomo, czy jest to przydatne dla usługi REST, ponieważ pomija również całą warstwę HTTP.

2

XML może czasami być trochę ciężki. JSON jest całkiem niezły, ale ma dobrą obsługę językową, a dane JSON mogą być tłumaczone bezpośrednio na rodzime obiekty na wielu formach.

23

Zalety:

  • XML - Wiele bibliotek, Devs są zaznajomieni z nim, XSLT można easiily zatwierdzeniu przez klienta i serwera (XSD, DTD), hierarchicznym dane
  • JSON - łatwo interpretować po stronie klienta, notacja kompaktowa, dane hierarchiczne
  • CSV - otwiera w Excelu (?)

Wady:

  • XML - nadęty, trudniej zinterpretować w JavaScripcie niż JSON
  • JSON - Jeśli niewłaściwie stosowany może stanowić lukę bezpieczeństwa (nie używać eval), nie wszystkie języki mieć biblioteki do interpretacji.
  • CSV - nie obsługuje danych hierarchicznych, tylko Ty to robisz, jest to znacznie trudniejsze niż większość programistów myśli o analizowaniu poprawnych plików CSV (wartości CSV mogą zawierać nowe wiersze, dopóki są między cytatami itp.).

Biorąc pod uwagę powyższe, nie chciałbym nawet obsługiwać CSV. Klient może wygenerować go z XML lub JSON, jeśli jest naprawdę potrzebny.

+0

Jeśli nie masz parsera JSON w wybranym języku, to CSV jest znacznie łatwiejsze do przeanalizowania niż JSON. –

+2

Dostępne są parsery JSON dla bardzo szerokiej gamy języków. Zobacz dno http://www.json.org/. – mpdaly

1

Nie mam żadnego doświadczenia z JSON, CSV działa aż do momentu, gdy twoje dane są bardzo tabelaryczne i mają równomierną strukturę. XML może szybko stać się nieporęczny, szczególnie jeśli nie masz narzędzia, które automatycznie tworzy powiązania z Twoimi obiektami.

Nie próbowałem tego również, ale Google's Protocol Buffers wygląda naprawdę dobrze, w prostym formacie, tworzy automatyczne wiązania z C++, Java i Python oraz implementuje serializację i deserializację tworzonych obiektów.

0

Poza wersją what Allain Lalonde already said, jedną dodatkową zaletą CSV jest to, że jest bardziej zwarta niż XML lub nawet JSON. Tak więc, jeśli twoje dane są zgodne z , z całkowicie płaską hyerarchią, CSV może być prawidłowym wyborem. Dodatkową wadą CSV jest to, że może używać różnych ograniczników i separatorów dziesiętnych, odsłaniając to, które narzędzie (a nawet kraj!) Wygenerowało.

Powiązane problemy