2012-01-20 6 views
20

Wiem, że jest kilka pytań dotyczących bibliotek, których można użyć do wykonywania usług RESTful w Javie, ale jaka jest ich wartość w przypadku implementacji wanilii. To znaczy, jeśli szukałem tworzyć the url structure described by WimDlaczego warto korzystać z frameworka usług RESTful w Javie zamiast serwletów wanilii?

  • www.example.com/images
  • www.example.com/images/id/num
  • www.example.com/images/tag/ num
  • www.example.com/images/tag/num/num/num

Czy nie byłoby łatwiej (dla przyszłych programistów) i szybciej (do wdrożenia i uczyć się), aby odwzorować wzór/url obrazów do serwletu i mają linię lub dwie, które analizują adres URL dla parametrów zamiast o f nauka, implementacja i konfiguracja jednej z tych bibliotek, aby zrobić to za Ciebie.

Zasadniczo co pytam jest ... Jaka jest wartość w użyciu RESTful framework Java? Czy w przypadku wdrożenia prostego problemu nie byłby on zbyt skomplikowany?

EDYCJA: Ten kod koszulki jest obsługiwany bardzo starannie i każdy powinien wiedzieć, jak to zrobić w formie serwletu, jeśli szukają w bibliotekach, aby zrobić to za nich.

@Path("/helloworld") 
public class HelloWorldResource { 

    // The Java method will process HTTP GET requests 
    @GET 
    // The Java method will produce content identified by the MIME Media 
    // type "text/plain" 
    @Produces("text/plain") 
    public String helloWorld() { 
     // Return some cliched textual content 
     return "Hello World"; 
    } 
} 

Jeśli wszystko masz zamiar robić to „usługa”, która zwraca tekst, który jest napędzany za pomocą parametrów URL, tak prosta zwraca tekst, to ramy konieczne?

+0

Właściwie Jersey jest referencyjną implementacją JAX-RS. Więc nazwałbym to pionierem, a nie Restletem. –

+0

Twoja edycja sprawia, że ​​pytanie jest odpowiedzią samą w sobie. Jeśli chcesz tylko powiedzieć "Hello World", nie potrzebujesz JAX-RS. Ale kto po prostu chce to zrobić? –

+0

Powinienem mieć odnośnik do wikipedii, osobiście uważam, że nie nazywam pionierów. – avanderw

Odpowiedz

12

Czy nie byłoby łatwiej (dla przyszłych programistów) i szybciej (do wdrożenia i uczyć się), aby odwzorować wzór url /images do serwletu i posiada linię lub dwie, które analizuje URL parametrów zamiast uczenia się, implementowanie i konfigurowanie jednej z tych bibliotek, aby zrobić to za Ciebie.
...

Łatwiejsze? Z pewnością nie jest to łatwiejsze do napisania - musisz samodzielnie wykonać całą ścieżkę i całą obsługę metody oraz całą negocjację typu zawartości (w instrukcjach zarówno), jak i całą obsługę plików cookie i deserializację/braki serializacji i ... cóż, wiele rzeczy na niskim poziomie, które wymagają testowania i debugowania - lub łatwiejsze do utrzymania, ponieważ interfejs JAX-RS pozwala działać na poziomie zasobów (naturalna charakterystyka aplikacji RESTful Webapps) zamiast żądań; z dużym doświadczeniem konserwacja jest najłatwiejsza, gdy różnica między modelem koncepcyjnym a implementacją jest najmniejsza. Nie jest też szybszy w implementacji (ponieważ implementacje niskiego poziomu JAX-RS zostały już przetestowane i debugowane dla Ciebie, mniej dla ciebie), a koszt nauki nie jest bardzo wysoki, ponieważ jest to głównie deklaratywny interfejs API z bardzo małymi niespodziankami.

OK, te korzyści mogą nie wydawać się tak duże, gdy masz do czynienia tylko z prostymi aplikacjami internetowymi. W końcu możesz zhackować coś w bardzo krótkim czasie i umieścić wynikowy bój online. Będziesz wtedy musiał modlić się, żebyś to zrobił bez znaczących niespodziewanych sposobów na exploity lub ataki typu "odmowa usługi". Programiści zajmujący się konserwacją będą musieli zrozumieć, do czego służą te wyrazy regularne, które spryskałeś za pomocą kodu (Good Luck With That!) Podczas dodawania małych funkcji lub naprawiania błędów. Jednak w miarę jak webapp staje się większy, korzyści z posiadania przetestowanej biblioteki do obsługi wszystkich rzeczy na niskim poziomie naprawdę wygrywają.

(Zanim zapytasz, niektóre biblioteki, o których wspomniałeś, będą się swobodnie instalować jako serwlety, dzięki czemu twój kod będzie po prostu opisywać logikę biznesową serwletu i deklarować, jak mapowanie do drutu odbywa się w sposób abstrakcyjny. ogromnie łatwiej)

+0

Kiedy należy stosować regularne serwlety zamiast koszulki? Czy obsługa doPost w httpservlet nigdy nie powinna być wykonana? – jontro

+1

@jontro Kiedy lubisz robić wszystko ręcznie? Nie jestem przekonany, że istnieje naprawdę dobry powód, chyba że masz rozpaczliwą potrzebę utrzymywania wielu bibliotek. –

7

JAX-RS to bardzo dobrze zaprojektowany interfejs API, który bardzo ułatwia mapowanie żądań HTTP na metody, wyodrębnianie parametrów z różnych części żądania HTTP, obsługę negocjacji treści i wiele innych zadań niskopoziomowych.

Używając JAX-RS, głównie za pośrednictwem Apache CXF, przez około dwa lata, zawsze wolałbym to od zwykłych serwletów.

+0

Ale jest czas na naukę, wdrożenie, zrozumienie dla każdego programisty tego wartego. Mam na myśli, czy to oszczędza czas? Czy to naprawdę bardziej proste? Jeśli chodzi tylko o wydobywanie parametrów, to z pewnością łatwiej jest być bliżej standardu Java. Byłoby dość proste wyodrębnienie parametrów w serwlecie. Uważam, że jest to potencjalnie zbyt duża złożoność dla wartości, jaką zapewnia. – avanderw

+0

Nie chcesz tylko wyodrębniać parametrów. Chcesz ustawić kody odpowiedzi HTTP, mapować ciała przychodzące i wychodzące na obiekty i inne rzeczy. Tak, JAX-RS pomaga w tym. –

+2

@avanderw Może twoje wrażenia są tylko dzięki prostym aplikacjom internetowym, ponieważ wiem od mojego, że bardzo pomaga to w bardziej złożonych aplikacjach. Robienie tego wszystkiego bezpośrednio na poziomie serwletu wymagałoby wiele pracy, ale JAXRS pozwala ci skupić się bardziej na zasobach w twojej aplikacji. (Nie, żebym twierdził, że jest idealny - niektóre zaskakujące rzeczy są nadal bardzo niezręczne - ale zdecydowanie sprawia, że ​​rzeczy są o wiele łatwiejsze.) –

3

Szkielety służą do ułatwienia zadania. Zgadzam się, że możemy zrobić to samo, wdrażając serwlety, a następnie przeanalizować adres URL, a następnie wdrożyć podstawową logikę.

Bu, jeśli używasz frameworka takiego jak jersey, nie musisz się martwić o te parsowania i inne podobne zadania. Klasa ServletContainer zajmie się tym (parsujący URL w swojej metodzie serwisowej) i istnieje wiele innych klas, które ułatwią ci zadanie.

I jeszcze jedno przyjmujemy tylko jeden scenariusz (pasujące wzorce), ale kiedy nasze wymagania będą rosły, ten sam kod napisany przez nasze własne serwlety stanie się bardziej skomplikowany i złożony.

+0

To jest właśnie moja uwaga, dlaczego użyć młotka do wbijania gwoździa. Jeśli ramy są wystarczająco łatwe do przyjęcia, powinieneś być w stanie przejść od wanilii do ramy z większą łatwością niż z innej struktury, gdy zajdzie taka potrzeba. Po co zabierać cały kuchenny zlew, gdy potrzebujesz tylko kranu? – avanderw

+0

W rzeczywistości JAX-RS jest API, podczas gdy CXF, Jersey, RESTEasy są implementacjami. Wszystkie mają swoje mocne i słabe strony, na przykład, jak łatwo integrują się ze Źródłem. Ale zdecydowanie polecam używanie JAX-RS. –

2

pójdę z użyciem Jersey lub bibliotekę, w tym przypadku, jeśli to robi następujący (dodaje wartość wystarczy).

  • config do adresu URL wszystko jest samowystarczalny w ciągu jednego plik, ze źródłem
  • nie ma ukrytych plików konfiguracyjnych lub zbytniej czasówki ose configs (np. web.xml)
  • parametry są ładnie odwzorowane na silnie typami zmiennych (np użycie adnotacji)
  • nie jest zawiłe, aby dostać się do wartości parametrów (np RESTlet)
  • napowietrznej na prowadzenie biblioteki jest niska (miałem złe doświadczenia z rozwiązaniami odbicie w innych bibliotekach)
  • jest dobrze udokumentowane
  • jest dobrze przyjętych

w takiej sytuacji uważam, że przy użyciu biblioteki byłoby ogłoszenie doceniam mój projekt za wysiłek wymagany do jego użycia. Wydaje się, że Jersey dość dokładnie spełnia wymagania, mimo że nie podałem jeszcze innych ram wystarczającej liczby badań.

Powiązane problemy