Jak utworzyć REST API używając Rails 3.0?

Nie mogę znaleźć zbyt wielu informacji na temat różnych podejść do budowania REST API w Rails; więc mam dwa pytania:

  1. Czy ktoś może wskazać mi jakieś artykuły, które pokazują plusy / minusy różnych podejść?
  2. czy mógłbyś podzielić się swoimi przemyśleniami na temat zalet / wad następujących podejść?

 

Proponowane Podejścia

 

  1. Użyj standardowych kontrolerów aby zwrócić XML, gdy użytkownik dodaje .xml do końca of the URL

    plusy:

    • jest to wbudowane w Rails i bardzo łatwe w użyciu
    • stosuje to samo podejście oparte na zasobach, które ma Rails, więc będzie to łatwe dla istniejących użytkowników, aby zrozumieć/zapamiętać

    wady:

    • API nie jest czysto oddzielone od głównej strony, trudniejsze do utrzymania
    • ludzie mogą zakładać, że dodanie .xml będzie praca w miejscach, których nie

  2. Użyj trasowania w przestrzeni nazw, aby utworzyć osobne Kontrolery API, które obsługują tylko API funkcje, ale nadal mają dostęp do tych samych modeli, z których korzysta strona internetowa

    plusy:

    • API jest w większości oddzielone
    • nadal używa kontrolerów resource-full

    wady:

    • adresy URL mają postać site.com/api/resource.xml które mogą spraw, by ludzie zakładali wszystkie zasoby są dostępne
    • [5]}API jest nadal częścią kodu/projektu strony internetowej; w związku z tym trudniejsze do utrzymania
  3. Użyj przekierowania trasy i ograniczeń, aby przesłać wszystkie wywołania API do Szafy Rack zastosowanie

    plusy:

    • API jest w pełni oddzielone
    • nie jest wymagane używanie stylu Resource-full jeśli nie chcemy
    • adresy URL wyraźnie pokazują, że jest to API i powinieneś sprawdzić dokumenty, aby zobaczyć co jest dostępne (przynajmniej mój umysł działa w ten sposób; zakładam, że umysły innych dev też tak robią)

    wady:

    • trudniejsze w użyciu modele z kodu strony
    • łatwiej utrzymać jako oddzielny projekt, ale to oznacza trudniejsze do integracji z existing site
    • musi synchronizować bazy kodowe, ponieważ modele mogą się zmienić dla funkcji witryny / poprawek błędów

Author: Topher Fangio, 2010-08-26

2 answers

Proponuję, aby API znajdujące się w tym samym projekcie co Twoja strona internetowa nie było złe, dopóki kod jest suchy*. Jak zauważyłeś, posiadanie osobnych baz kodowych jest wyzwaniem, ponieważ musisz je synchronizować z każdą funkcją / poprawką błędów. Łatwiej jest je utrzymać, jeśli znajdują się w tym samym miejscu. Tak długo, jak utrzymujesz swój kod suchy, ta metoda jest wyraźnym zwycięzcą.

Oferowałbym XML i JSON ze sterowników z subdomeną obsługiwaną przez silnik routingu Rails. Kiedy ktoś wychwycił wzorzec api.site.com/resource.xml i próbuje uzyskać dostęp do zasobu, którego nie ma, to naprawdę nic wielkiego. Tak długo, jak Twój API jest wyraźnie udokumentowane i nie / błąd wdzięcznie, gdy próbują uzyskać dostęp do zasobu nie w API, powinno być dobrze. Chciałbym spróbować zwrócić wiadomość, że zasób nie jest dostępny i adres url do dokumentacji api. Nie powinno to być problemem dla użytkowników API, ponieważ powinno to być częścią odkrywania twojego API.

Tylko moje $0.02.



*suchy = nie powtarzaj się. Suchy kod oznacza, że nie kopiujesz-wklejasz ani nie przepisujesz tego samego dla swojej witryny i api; wyodrębniasz i dzwonisz z wielu miejsc.

 17
Author: Andy_Vulhop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-31 13:58:46

Myślę, że najlepszym rozwiązaniem dla Ciebie jest połączenie dwóch pierwszych punktów.

Sugeruję użycie JSON zamiast XML: jedynym punktem na korzyść XML jest XPath, który jest bezużyteczny w zwracanych danych. JSON prowadzi do lepszego czasu reakcji (i bardziej czytelne dane dla lepszego debugowania ! : p). Ponadto większość języków potrafi czytać JSON. Na przykład, PHP może natywnie parsować JSON do tablicy / obiektu za pomocą json_decode, więc jest to miły punkt. ;)

Dla kontrolerów, możesz go nazwać, ale nie jest to obowiązek, może lepiej jest w niektórych przypadkach unikać tłustych działań z tonami warunków. Z routerem Rails 3, rozdzielenie wywołań API w subdomenie (api.webapp.com) jest trywialne).

Dla modelu, na pewno należy użyć tego samego, co używane w całej aplikacji.

Nowa składnia routera rails to sugar, będziesz zadowolony. Powodzenia i miłej zabawy! :)

 3
Author: Romain Tribes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-30 20:32:43