Z JSR 311 i jego implementacjami mamy potężny standard do eksponowania obiektów Java przez REST. Jednak po stronie klienta wydaje się, że brakuje czegoś, co jest porównywalne z Apache Axis dla SOAP - coś, co ukrywa usługę internetową i przekazuje dane w przejrzysty sposób do obiektów Java.
Jak tworzysz klientów Java RESTful? Używasz połączenia HTTP i ręcznego analizowania wyniku? Lub wyspecjalizowani klienci np. Dla Jersey lub Apache CXR?
Odpowiedzi:
To stare pytanie (2008), więc jest teraz o wiele więcej opcji niż wtedy:
AKTUALIZACJE (projekty nadal aktywne w 2020 r.):
Async-http-client przez Sonatype.Zastrzeżenie dotyczące wybierania klientów HTTP / REST. Upewnij się, że używasz stosu frameworka dla klienta HTTP, w jaki sposób wykonuje on wątki, a najlepiej, jeśli używa tego samego klienta. To znaczy, jeśli używasz czegoś takiego jak Vert.x lub Play, możesz spróbować użyć klienta wspierającego, aby wziąć udział w dowolnej pętli magistrali lub reaktora, jaką zapewnia struktura ... w przeciwnym razie przygotuj się na potencjalnie interesujące problemy z wątkami.
źródło
Jak wspomniałem w tym wątku , zwykle używam Jersey, który implementuje JAX-RS i ma fajnego klienta REST. Zaletą jest to, że jeśli zaimplementujesz zasoby RESTful za pomocą JAX-RS, to klient Jersey może ponownie użyć dostawców encji, takich jak JAXB / XML / JSON / Atom i tak dalej - abyś mógł ponownie używać tych samych obiektów po stronie serwera, jak ty używać w teście jednostkowym po stronie klienta.
Na przykład tutaj jest przypadek testowy jednostki z projektu Apache Camel, który wyszukuje ładunki XML z zasobu RESTful (przy użyciu punktów końcowych obiektu JAXB). Metoda zasobów (uri) jest zdefiniowana w tej klasie bazowej, która korzysta tylko z interfejsu API klienta Jersey.
na przykład
BTW Mam nadzieję, że przyszła wersja JAX-RS doda fajne API po stronie klienta, podobnie jak w Jersey
źródło
Możesz użyć standardowych interfejsów API Java SE:
Lub możesz użyć interfejsów API klienta REST dostarczonych przez implementacje JAX-RS, takie jak Jersey. Te interfejsy API są łatwiejsze w użyciu, ale wymagają dodatkowych słoików na ścieżce klasy.
Aby uzyskać więcej informacji zobacz:
źródło
Jeśli chcesz tylko wywołać usługę REST i przeanalizować odpowiedź, możesz wypróbować opcję Gwarancja bezpieczeństwa
źródło
Możesz także sprawdzić Restlet, który ma pełne możliwości po stronie klienta, bardziej zorientowany na REST niż biblioteki niższego poziomu, takie jak HttpURLConnection lub klient Apache HTTP (który możemy wykorzystać jako łączniki).
Z pozdrowieniami, Jerome Louvel
źródło
Możesz spróbować Rapa . Daj nam znać swoją opinię na ten sam temat. Zachęcamy do rejestrowania problemów lub oczekiwanych funkcji.
źródło
Chciałbym wskazać jeszcze 2 opcje:
źródło
Spróbuj
JdkRequest
z jcabi-http (jestem programistą). Tak to działa:Sprawdź ten post na blogu, aby uzyskać więcej informacji: http://www.yegor256.com/2014/04/11/jcabi-http-intro.html
źródło
Niedawno wypróbowałem Retrofit Library z kwadratu, jest świetny i możesz bardzo łatwo wywołać resztę API. Konfiguracja oparta na adnotacjach pozwala nam pozbyć się dużo kodowania płyt kotłowych.
źródło
Korzystam z Apache HTTPClient do obsługi wszystkich aspektów HTTP.
Piszę parsery XML SAX dla treści XML, która analizuje XML w twoim modelu obiektowym. Uważam, że Axis2 również ujawnia XML -> Metody modelowe (Oś 1 ukrywała tę część, irytujące). Generatory XML są banalnie proste.
Kodowanie nie zajmuje dużo czasu i moim zdaniem jest dość wydajne.
źródło
OkHttp jest lekki i wydajny w połączeniu z Retrofit. Działa to dobrze do ogólnego użytku Java, jak również na Androidzie.
OkHttp : http://square.github.io/okhttp/
Modernizacja : http://square.github.io/retrofit/
źródło
Ponieważ nikt nie wspomniał, oto inny: Feign , z którego korzysta Spring Cloud .
źródło
Chociaż łatwo jest utworzyć klienta HTTP i dokonać ponownego żądania. Ale jeśli chcesz skorzystać z niektórych automatycznie generowanych klientów, możesz użyć WADL do opisania i wygenerowania kodu.
Możesz użyć RestDescribe do generowania i kompilacji WSDL, możesz generować klientów w php, ruby, python, java i C # za pomocą tego. To generuje czysty kod i istnieje duża zmiana, że trzeba go podkręcić trochę po wygenerowaniu kodu, można znaleźć dobrą dokumentację oraz leżące u podstaw myśli tył narzędzia tutaj .
Na Wintermute wspomniano kilka interesujących i przydatnych narzędzi WADL .
źródło
Napisałem bibliotekę, która mapuje interfejs Java do zdalnej usługi JSON REST:
https://github.com/ggeorgovassilis/spring-rest-invoker
źródło
Użyłem RestAssured większość czasu do analizowania odpoczynek reakcji serwisu i przetestowania usługi. Oprócz Rest Assured korzystałem również z poniższych bibliotek do komunikacji z usługami Resful.
za. Klient Jersey Jersey
b. Spring RestTemplate
do. Klient HTTP Apache
źródło
Spróbuj spojrzeć na http-rest-client
https://github.com/g00dnatur3/http-rest-client
Oto prosty przykład:
Biblioteka zajmuje się serializacją i wiązaniem jsonów.
Oto inny przykład
I ostatni przykład
Twoje zdrowie!
źródło
Przykłady koszulki Reszta klienta Jersey:
Dodawanie zależności:
ForGetMethod i przekazanie dwóch parametrów:
GetMethod przekazuje jeden parametr i uzyskuje odpowiedź na listę:
W Above It zwraca listę, którą akceptujemy jako listę, a następnie konwertuje ją na tablicę Json, a następnie tablicę Json na listę.
Jeśli żądanie wysłania przekazuje obiekt Json jako parametr:
źródło
Obecnie używam https://github.com/kevinsawicki/http-request Podoba mi się ich prostota i sposób wyświetlania przykładów, ale przede wszystkim zostałem sprzedany, gdy przeczytałem:
co rozwiązało niektóre problemy w projekcie Java 1.6. Jeśli chodzi o dekodowanie jsona na obiekty gson jest po prostu niezwyciężony :)
źródło