Po co nam RESTful Web Services?

Zamierzam nauczyć się RESTful web services(lepiej powiedzieć, że będę musiał to zrobić, ponieważ jest to część programu CS master degree).

Przeczytałem kilka informacji w Wikipedii i przeczytałem również artykuł o REST w Sun Developer Network i widzę, że nie jest to łatwa technologia, istnieją specjalne frameworki do budowania aplikacji RESTful, i często jest porównywana do usług internetowych SOAP i programista powinien zrozumieć, kiedy używać SOAP i kiedy odpoczynek może być miły podejdźcie.

Pamiętam, że kilka lat temu mydło było bardzo popularne (modne?) i pozycja "mydło" musiała być obecna w każdym dobrym CV. Ale w praktyce był używany bardzo rzadko i do osiągnięcia bardzo prostych celów.

Wydaje mi się, że odpoczynek to kolejne "ostatnie słowo mody" (albo mogę się całkowicie mylić, bo nigdy nie widziałem odpoczynku w praktyce).

Czy możesz podać mi kilka przykładów, że odpoczynek powinien być użyty i dlaczego nie możemy zrobić tego samego bez odpoczynku (lub Dlaczego powinniśmy spędzić znacznie więcej czasu, aby zrobić to samo bez odpoczynku)?

UPD: niestety nie widzę żadnych konkretnych argumentów, które mogłyby mnie rozwalić w pierwszych komentarzach. Spraw, bym myślał, że odpoczynek to świetna technologia!

Chciałbym zobaczyć takie odpowiedzi:

Rozwijałem kolejny kompleks Aplikacji HelloWorld i musimy przesyłaj dużo / małe Dane i proponowane rozwiązanie dla mojego kolegi z pracy:

- O cholera! Jonny, powinniśmy na pewno używać Odpoczynek do realizacji ta aplikacja!- Tak, Billy, my można korzystać z odpoczynku, ale lepiej użyć Mydło. Zaufaj mi, bo coś wiem. o rozwoju HelloWorld aplikacje.
– ale mydło jest staromodna technologia z ostatnich wieku i możemy lepiej wykorzystać jeden.- Billy, jesteś gotowy. spędzić 3 dni na eksperymentowaniu z Odpoczywać? Możemy to zrobić z mydłem w 2 godziny..
– Tak, jestem pewien że spędzimy jeszcze więcej czasu na osiągnij to samo bezpieczeństwo / wydajność/ /align = "left" / Jestem pewien, że aplikacje HelloWorld powinny być rozwijane tylko z odpoczynkiem od teraz.

Author: Roman, 2009-09-02

8 answers

REST powinien być użyty, jeśli jest bardzo ważne, aby zminimalizować sprzężenie pomiędzy komponentami klienta i serwera w aplikacji rozproszonej.

Może tak być, jeśli twój serwer będzie używany przez wielu różnych klientów , nad którymi nie masz kontroli. Może tak być również w przypadku, gdy chcesz mieć możliwość regularnej aktualizacji serwera bez konieczności aktualizacji oprogramowania klienta.

Zapewniam, że osiągnięcie tak niskiego poziomu sprzężenie jest niełatwe do wykonania. Aby odnieść sukces, konieczne jest przestrzeganie wszystkich ograniczeń związanych z odpoczynkiem. Utrzymanie czysto bezpaństwowego połączenia jest trudne. Wybór odpowiednich typów multimediów i wyciskanie danych do formatów jest trudne. Tworzenie własnych typów mediów może być jeszcze trudniejsze.

Adaptacja bogatych zachowań serwerowych do jednolitego interfejsu HTTP może być myląca i czasami wydaje się pedantyczna w porównaniu do stosunkowo prostego RPC podejdźcie.

Pomimo trudności, korzyści są takie, że masz usługę, którą programista Klienta powinien być w stanie łatwo zrozumieć ze względu na konsekwentne korzystanie z protokołu HTTP. Usługa powinna być łatwa do wykrycia ze względu na hypermedia, a klient powinien być wyjątkowo odporny na zmiany na serwerze .

Korzyści z hypermedii i unikanie stanu sesji sprawia, że równoważenie obciążenia jest proste, a partycjonowanie usług jest możliwe. Na ścisła zgodność z regułami HTTP sprawiają, że dostępność narzędzi takich jak debuggery i buforujące proxy jest cudowna.

Update

Wydaje mi się, że odpoczynek jest kolejnym "last word of fashion" (or I can be całkowicie się mylę, bo nigdy nie widziany odpoczynek w praktyce).

Myślę, że odpoczynek stał się modny, ponieważ ludzie próbujący robić projekty typu SOA odkryli, że używając stosu mydła nie zdają sobie sprawy z korzyści, które były obiecuję. Ludzie wracają do sieci jako przykład prostych metod integracji. Niestety, myślę, że ludzie nie doceniają ilości planowania i przewidywania, które weszły w tworzenie sieci i upraszczają, co należy zrobić, aby pozwolić na rodzaj przypadkowego ponownego użycia, które występuje w sieci.

Mówisz, że nigdy nie widziałeś odpoczynku w praktyce, ale to nie może być prawdą, jeśli kiedykolwiek używasz przeglądarki internetowej. Przeglądarka internetowa to odpoczynek klient.

  • dlaczego nie trzeba robić przeglądarki update gdy ktoś zmieni jakiś html na stronie internetowej?
  • Dlaczego mogę dodać zupełnie nowy zestaw strony do strony WWW i " klient" nadal można uzyskać dostęp do tych nowych stron bez aktualizacji?
  • dlaczego nie muszę podawać "service-description-language" do przeglądarka internetowa, aby powiedzieć, kiedy idzie na http://example.org/images/cat że zwracanym typem będzie obraz jpeg and when you go na http://example.org/description/cat zwracanym typem będzie text / html?
  • Dlaczego mogę użyć przeglądarki internetowej, aby odwiedzić strony, które nie istniały, gdy została wydana przeglądarka? Jak można klient wie o tych stronach?

To może brzmieć jak pytania bezsensowne, ale jeśli znasz odpowiedź, możesz zacząć widzieć, na czym polega odpoczynek. Więcej korzyści płynących z odpoczynku można znaleźć na stronie StackOverflow. Kiedy patrzę na pytanie, Mogę dodać tę stronę do zakładek lub Wyślij adres URL znajomemu , a on zobaczy te same informacje. Nie musi poruszać się po stronie, aby znaleźć to pytanie.

StackOverflow używa różnych usług OpenId do uwierzytelniania, gravatar.com dla obrazów awatarów, google-analytics i Quantserve dla informacji analitycznych. Tego rodzaju integracja wielu firm to coś, o czym tylko marzy Świat mydła. Jednym z najlepszych przykładów jest fakt, że biblioteki jQuery, które są używane do Dysk Interfejs Użytkownika Stoskoverflow jest pobierany z sieci dostarczania treści Google. Fakt, że tak może skierować klienta (tj. przeglądarki internetowej), aby pobrać kod z witryny trzeciej w celu poprawy wydajności jest świadectwem niskiego sprzężenia między klientem sieci web a serwerem.

Są to przykłady architektury odpoczynku w pracy.

Teraz niektóre strony internetowe / aplikacje robią łamiąc zasady REST i wtedy przeglądarka nie działa zgodnie z oczekiwaniami.

  • The infamous back button problem jest spowodowana użyciem strony serwera stan sesji.
  • równoważenie obciążenia może stać się bólem, gdy masz stan sesji po stronie serwera.
  • aplikacje Flash często uniemożliwiają Adres URL ze specyficznego identyfikatora a reprezentacyjne.
  • inny problem, który łamie sieć przeglądarki jest słaba zgodność z standardy typu media. Słyszymy wszystkie czas o tym, jak musi być IE6 zabity. Problem w tym, że normy nie były właściwie przestrzegane, lub zostały zignorowane z jakiegokolwiek powodu.
  • korzystanie z sesji logowania jest źródło wielu luk bezpieczeństwa.

Odpoczynek jest wszędzie. Jest to część sieci, która sprawia, że działa dobrze. Jeśli chcesz tworzyć rozproszone aplikacje, które mogą skalować się jak sieć, być odporne na zmiany jak Sieć i promować ponowne użycie tak, jak to miało miejsce w sieci, postępuj zgodnie z tymi samymi zasadami, które robiono podczas tworzenia przeglądarek internetowych.

 123
Author: Darrel Miller,
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
2009-09-02 18:31:08

Reszta została rozpoczęta, według mojej wiedzy, przez rozprawę Roya Fieldinga style architektoniczne i projektowanie sieciowych Architektur oprogramowania, która jest warta przeczytania, jeśli na nią nie spojrzałeś.

Na górze dysertacji jest cytat:

prawie każdy czuje spokój z naturą: słuchając Oceanu fale na brzegu, przy spokojnym jeziorze, na polu trawy, na windblown heath. Pewnego dnia, kiedy nauczyliśmy się ponadczasowej drogi znowu my będziemy czuć to samo o naszych miastach, a my będziemy czuć jak dużo w nich spokoju, jak to czynimy dzisiaj idąc przez ocean, czy rozciągnięty w długiej trawie łąki.

- Christopher Alexander, ponadczasowy sposób budowania (1979)

I to naprawdę wszystko podsumowuje. Odpoczynek jest pod wieloma względami bardziej elegancki.

SOAP jest protokołem opartym na HTTP, więc omija wiele konwencji HTTP, aby budować nowe konwencje w SOAP i jest na wiele sposobów zbędny z HTTP. HTTP jest jednak więcej niż wystarczający do ponownego przetwarzania, wyszukiwania, pisania i usuwania informacji za pośrednictwem HTTP, a to wiele z tego, czym jest REST. Ponieważ REST jest zbudowany z HTTP, a nie na nim, oznacza to również, że oprogramowanie, które chce się z nim zintegrować (takie jak przeglądarka internetowa), nie musi rozumieć SOAP, aby to zrobić, tylko HTTP, który musi być najszerzej rozumiany i zintegrowany-z protokołem w użyciu w tym momencie.

 10
Author: quillbreaker,
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
2009-09-02 15:19:06

From here :

Zalety odpoczynku:

  • Lightweight-niewiele dodatkowych znaczników xml
  • Wyniki Czytelne Dla Człowieka
  • Łatwy w budowie-nie wymaga zestawów narzędzi

Zobacz też to out:

Aby być uczciwym, odpoczynek nie jest najlepszym rozwiązaniem dla każdego serwisu internetowego. Dane, które muszą być bezpieczne, nie powinny być wysyłane jako parametry w Uri. I duże ilości danych, np. w szczegółowych zleceniach zakupu, mogą szybko stają się uciążliwe lub nawet poza granicami w URI. W takich przypadkach mydło jest rzeczywiście solidnym rozwiązaniem. Ale ważne jest, aby najpierw spróbować odpocząć i uciekać się do mydła tylko wtedy, gdy jest to konieczne. Dzięki temu tworzenie aplikacji jest proste i dostępne.

 8
Author: ,
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
2009-09-02 14:25:17

Mogę śmiało powiedzieć, że spędziłem dużo czasu, aby zrozumieć to jako początkujący, ale to jest najlepszy link, aby zacząć od odpoczynku od zera! http://www.codeproject.com/Articles/21174/Everything-About-REST-Web-Services-What-and-How-Pa

Just to pull you in,

Pomyśl, czym jest "tradycyjny serwis internetowy". Jest to interfejs z exposed " metody."Klienci znają nazwę, Dane wejściowe i wyjściowe metod i dlatego można je nazwać.

Teraz wyobraź sobie interfejs, który nie ujawnia "metod". Zamiast tego eksponuje "przedmioty". Więc kiedy klient widzi ten interfejs, wszystko, co widzi jest jednym lub więcej "obiektów". "Obiekt" nie ma wejścia ani wyjścia – bo "nic nie robi". To rzeczownik, a nie czasownik. To jest " a rzecz", a nie "działanie".

Na przykład pomyśl o tradycyjnym serwisie internetowym, który zapewnia aktualne warunki pogodowe, jeśli podasz mu miasto. Prawdopodobnie posiada metodę webową taką jak GetWeatherInfo (), która zajmuje miasto jako wejście i dostarcza dane pogodowe jako wyjście. Do tej pory łatwo jest ci zrozum, w jaki sposób klient będzie korzystał z tej usługi internetowej.

Teraz wyobraź sobie, że w miejsce powyższego serwisu internetowego istnieje nowy to eksponuje miasta jako obiekty. Więc, kiedy patrzysz na to jak na klienta, zamiast GetWeatherInfo () widzisz Nowy Jork, Dallas, Los Angeles, Londyn i tak dalej. A te miasta nie mają żadnego zastosowania specyficznych metod - są one najwyraźniej jak inert gazy - same nie reagują.

Musisz myśleć-cóż, jak to pomaga, jako klient, aby pogoda w Dallas? Dojdziemy do tego za kilka chwil.

Jeśli wszystko, co otrzymujesz z serwisu internetowego, to "zbiór obiektów" , oczywiście potrzebujesz sposobu, aby "działać na nich". Same obiekty nie posiadają metod aby zadzwonić, więc potrzebujesz zestawu działań, które możesz zastosować na te obiekty. Innymi słowy, musisz " zastosować czasownik do rzeczownik". Jeśli widzisz przedmiot, powiedzmy jabłko, który jest "rzeczownikiem", możesz zastosować "czasownik" jak jeść, do niego. Ale nie wszystkie czasowniki można zastosować do wszystkich rzeczowniki. Możesz prowadzić samochód, ale nie możesz prowadzić telewizora.

Tak więc, jeśli serwis internetowy eksponuje tylko obiekty – a Ty zostaniesz poproszony-dobrze, zaprojektujmy teraz kilka standardowych działań lub czasowników, które " wszyscy klienci can apply to all objects they see",...

 8
Author: Rajarajan Pudupatti Sundari J,
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
2018-01-11 07:36:47

Większość Odpowiedzi " pro " na temat REST wydaje się pochodzić od ludzi, którzy nigdy nie opracowali usługi internetowej lub klienta mydła za pomocą środowiska, które dostarcza odpowiednich narzędzi do zadania. Narzekają na problemy, z którymi po prostu nigdy się nie spotkałem, używając Visual Studio. NET i Rational Web Developer IBM. Przypuszczam, że jeśli musisz rozwijać usługi internetowe lub klientów w języku skryptowym, lub innym języku z niewielką lub żadną obsługą narzędzi, że są one ważne skargi.

Muszę również przyznać, że kilka punktów " pro " brzmi jak rzeczy, które mogą być rzeczywiście prawdziwe - ale nigdy nie widziałem przykładu, który ilustruje ich wartość. W szczególności byłbym bardzo wdzięczny, gdyby ktoś opublikował komentarz zawierający link do dobrego przykładu serwisu internetowego REST. Powinien to być taki, który używa wielu poziomów zasobów, być może w hierarchii, i który prawidłowo używa typów mediów. Może jeśli spojrzę na dobry przykład, zrozumiem, w wrócę tu i się przyznam.

 4
Author: John Saunders,
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
2009-09-05 02:36:32

Aby dodać nieco prozaiczny spin do odpowiedzi już podanych powodem, dla którego korzystamy z usług REST, GDZIE JESTEM, jest to, że jeśli wiesz, że możesz podać partnerowi biznesowemu adres URL i wiesz, że otrzyma w zamian ładnie ułożoną płytę XML, bez względu na to, czy pracują w.Net x.X, PHP, Python, Java, Ruby czy Bóg wie, co to znacznie zmniejsza bóle głowy.

Oznacza to również, że na koniec non-techy nasi handlowcy mogą pochwalić się naszym wszechstronnym API ludziom bez obaw o szukanie jak kompletne Muppety.

Wiele poza korzyściami technicznymi wszystko, co jest łatwe dla niemechaników, aby wyjaśnić, zademonstrować i czuć się pewnie, jest dobrą rzeczą. Mydło, choć równie fajne dla techników, jest znacznie mniej przystępne dla nie-techników i dlatego nie jest tak łatwe do"sprzedania".

Mam tendencję do zauważania, że rzeczy, które nie-technicy mogą mieć głowę wokół głowy, mają tendencję do przyklejania się. Wątpię więc, by odpoczynek był tak podatny jak mydło na kaprysy mody.

Ale wszystkie rzeczy o nie umieszczaniu niczego w serwisie odpoczynku, które powinny być zablokowane, są podwójnie prawdziwe, choćby dlatego, że technologia jest tak łatwo zrozumiała przez ludzi, którzy nie są tak technicznie nastawieni.

 3
Author: ,
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
2009-09-02 15:31:24

Oto kilka pomysłów:

  • REST ogranicza usługę do korzystania z jednolitego interfejsu. Nie musisz tracić czasu na marzenia (lub kłótnie) na temat wszystkich możliwych sposobów działania usługi - masz prawo do pracy, identyfikując zasoby w systemie. Okazuje się, że jest to duża praca sama w sobie, ale na szczęście problemy wydają się być znacznie lepiej zdefiniowane.
  • Z zasobami, ich stowarzyszeniami i ich reprezentacjami w ręku, naprawdę niewiele można zrobić w wdrożenie usługi, ponieważ wiele decyzji zostało podjętych za Ciebie.
  • Twój system będzie wyglądał bardzo podobnie do innych systemów RESTful; krzywe uczenia się dla członków zespołu, partnerów i klientów zostaną zredukowane.
  • będziesz miał wspólne słownictwo do omawiania problemów projektowych z innymi programistami, a nawet z tymi mniej technicznie myślącymi (takimi jak klienci).
  • Jak mówi Darrel, ponieważ używasz projektu hipertekstowego , Twoja usługa zawęża zakres sprzężenia tylko jedno-typy mediów. Pomaga to jako programista, ponieważ zmiany w systemie są zawarte w wąskim paśmie kontaktu. Pomaga to Twoim klientom w tym, że mniej zmian złamie ich kod.
  • prawie każdy problem, jaki możesz mieć przy implementacji REST, może zostać rozwiązany przez ujawnienie nowego zasobu lub ponowne przemyślenie modelu zasobu. Ten nacisk jest, IMO, duży wzrost wydajności.

Podsumowując, reszta usuwa wiele najbardziej czasochłonnych i kontrowersyjne decyzje projektowe i wdrożeniowe z przepływu pracy Twojego zespołu. To przesuwa twoją uwagę od wdrożenia Twojej usługi do zaprojektowania it. I robi to bez konieczności łączenia się z protokołem HTTP.

 3
Author: Rich Apodaca,
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
2009-09-02 16:54:38

REST to styl architektury do projektowania aplikacji sieciowych. Chodzi o to, że zamiast używać złożonych mechanizmów, takich jak CORBA, RPC lub SOAP do łączenia się między maszynami, prosty HTTP jest używany do wykonywania połączeń między maszynami.

Pod wieloma względami sama sieć WWW, oparta na HTTP, może być postrzegana jako architektura oparta na REST. Aplikacje RESTful używają żądań HTTP do publikowania danych( tworzenia i / lub aktualizacji), odczytywania danych (np. tworzenia zapytań) i usuwania danych. Tak więc REST używa HTTP dla wszystkie cztery operacje CRUD (Create / Read/Update/Delete).

REST jest lekką alternatywą dla mechanizmów takich jak RPC (Remote Procedure Calls) i usług internetowych (SOAP, WSDL, et al.). Później zobaczymy, o ile prostszy jest odpoczynek.

Pomimo tego, że jest prosty, REST jest w pełni funkcjonalny; zasadniczo nie ma nic, co można zrobić w serwisach internetowych, czego nie można zrobić z architekturą RESTful. Odpoczynek nie jest "standardem". Nigdy nie będzie rekomendacji W3C na np. odpoczynek. I podczas istnieją frameworki programistyczne REST, praca z REST jest tak prosta, że często można "tworzyć własne" funkcje bibliotek standardowych w językach takich jak Perl, Java lub C#.

 2
Author: Karthick Kumar,
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
2015-07-16 14:13:50