W czym generujecie odpowiedzi w API jsonowych?

Hej,

API ktore mam w obecnym projekcie zaczyna sie rozrastac do dosc duzych rozmiarow i odpowiedzi JSONonwe ktore zwracaja niektore akcje sa miejscami dosc rozbudowane. Obecnie do ich generacji wykorzystuje jBuilder’a ale jego wydajnosc miejscami jest “dyskusyjna”, szczegolnie kiedy korzystam z partial’i. Zastanawiam sie nad sprobowaniem innych rozwiazan typu RABL czy ActiveModel Serializers, ale nie chce na tym wyjsc jak Zablocki na mydle, wiec chcialbym sie spytac z czego korzystacie w waszych projektach ? Ma ktos jakies porownania, doswiadczenia warte podzielenia sie ? :smile:

Ja korzystam z ActiveModel Serializers i jestem zadowolony :slight_smile: (inna sprawa że nie robię z nim jakiś fikuśnych rzeczy)

ActiveModel::Serializers jeśli masz wpływ na to jak API będzie wyglądać. Jeśli API jest już zdefiniowane, i np. jest to rewrite API które było zrobione w PHP (jeden z naszych teamów właśnie z takim czymś walczy) to większą elastyczność kosztem gorszego kodu da Ci jbuilder albo budowanie własnych klas i ręczna serializacja do hasha / jsona.

1 Like

Zdecydowanie ActiveModel::Serializers.
Kilka argumentów:

  1. Spree (a więc średniej wielkości projekt) aktualnie korzysta z Rabla, mają dość, chcą przejść na AM::S, patrz Spree Roadmap.
  2. AMS promuje konwencje które stają się powoli standardem w json-owych API,
  3. …do poziomu w którym ember-data ma specjalizowany adapter dla serwisów z api na AMS
  4. Zrobiliśmy nietrywialny serwis na AMS, jestem zakochany. Nigdy wcześniej tak nie miałem z innymi narzędziami do budowy odpowiedzi (Rablem, Builderem itd.)

Ja tylko dodam, że w 2 projektach mam RABL i był to bardzo zły wybór.

AM::S mam w jednym projekcie i, owszem, działa, ale migracja z wersji 0.8 na późniejsze była już dziwnie problematyczna, mam mieszane uczucia.

Następnym razem chętnie spróbuję czegoś jeszcze innego.

Miałem podobnie, dopóki nie chciałem cachować przy sideloadingu i niespecjalnie chciało działać. Jest jakiś fork AMS który to naprawia, ale w końcu użyłem jbuildera i też nie ma problemu.

Dzieki Panowie za odpowiedzi i wskazowki - zapewne pobawie sie AM:S kiedy skoncze testy requestowe w RSpec’u - poki co jBuilder mi zostaje :wink:

Kontynuujac poniekad - czy ktos z Was spotkal sie dziwnym czasem renderowania partiali w jBuilderze ? Mam np tablice 100 elementow z ktorym kazdy jest generowany za pomoca partiali i przewaznie jeden z nich generuje sie dziwnie dlugo - kilkanascie razy dluzej niz pozostale. Czy ktos moze sie z tym spotkal ?

Jeśli sto razy renderujesz jednego partiala to obstawiam że w pewnym momencie włącza się garbage collector.
Masz to tylko w developmencie czy też na produkcji (a jeśli na produkcji to jaki serwer aplikacji)?

Tak zapewne moze byc. Poki co przygladalem sie temu tylko na developmencie - zobacze co sie bedzie dzialo na produkcji kiedy juz bedzie :smile:

Sprawdź przy okazji render :collection zamiast ręcznego iterowania z tym samym partialem:
http://rails-bestpractices.com/posts/38-use-render-collection-rails-3-when-possible

1 Like