Czy serwis internetowy w stylu Netflix lub Twitter powinien używać REST lub SOAP? [zamknięte]

Zaimplementowałem dwie usługi REST: Twitter i Netflix. W obu przypadkach starałem się znaleźć zastosowanie i logikę związaną z decyzją o ujawnieniu tych usług jako odpoczynku zamiast SOAP. Mam nadzieję, że ktoś może mi podpowiedzieć, czego mi brakuje i wyjaśnić, dlaczego REST został użyty jako implementacja usługi dla takich usług.

1) wdrożenie usługi REST trwa nieskończenie dłużej niż wdrożenie usługi SOAP. Istnieją narzędzia dla wszystkich współczesnych języków / frameworków/platform do czytania w klasy i klienci WSDL i output proxy. Wdrożenie usługi REST odbywa się ręcznie i-zdobądź to-czytając dokumentację. Ponadto, podczas wdrażania tych dwóch usług, musisz "zgadywać", co wróci przez rurkę, ponieważ nie ma prawdziwego schematu lub dokumentu referencyjnego.

2) Po co pisać usługę REST, która zwraca XML? Jedyną różnicą jest to, że z REST nie znasz typów, które reprezentuje każdy element / atrybut - jesteś zdany na siebie, aby zaimplementować to i nadzieję , że pewnego dnia ciąg nie natknie się na polu, które uważałeś za int. SOAP definiuje strukturę danych za pomocą WSDL, więc nie ma się nad czym zastanawiać.

3) słyszałem skargę, że z mydłem masz "nad głową" koperty mydła. Czy w dzisiejszych czasach naprawdę musimy martwić się o garść bajtów?

4) słyszałem argument, że z REST można po prostu pop URL do przeglądarki i zobaczyć dane. Oczywiście, jeśli Serwis wypoczynkowy jest korzystanie z prostego lub bez uwierzytelniania. Na przykład usługa Netflix korzysta z usługi OAuth, która wymaga podpisywania i kodowania rzeczy przed złożeniem wniosku.

5) Dlaczego potrzebujemy "czytelnego" adresu URL dla każdego Zasobu? Gdybyśmy używali narzędzia do wdrożenia usługi, czy naprawdę zależy nam na rzeczywistym adresie URL?

 143
Author: Darrel Miller, 2010-07-20

5 answers

Kanarek w kopalni węgla.

Czekam na takie pytanie od blisko roku. To było nieuniknione, że ten dzień nadejdzie i jestem pewien, że w nadchodzących miesiącach zobaczymy jeszcze wiele takich pytań.

Znaki ostrzegawcze

Masz absolutną rację, potrzeba więcej czasu, aby zbudować spokojnych klientów niż klientów SOAP. Zestawy narzędzi SOAP zabierają dużo kodu boilerplate i udostępniają obiekty proxy klienta z prawie bez wysiłku. Dzięki narzędziom takim jak Visual Studio i URL serwera mogę uzyskać dostęp do zdalnych obiektów o dowolnej złożoności, lokalnie w mniej niż pięć minut.

Usługi zwracające application / xml I application / json są tak irytujące dla programistów klientów. Co mamy zrobić z tą plamą danych?

Na szczęście wiele witryn świadczących usługi REST zapewnia również kilka bibliotek klienckich, dzięki czemu możemy użyć tych bibliotek, aby uzyskać dostęp do kilku silnie wpisanych obiektów. Wydaje się trochę głupie. Gdyby użyli mydła, sami mielibyśmy geny kodujące te klasy proxy.

Mydło nad głową, ha. To opóźnienie zabija. Jeśli ludzie są naprawdę zaniepokojeni liczbą nadmiarowych bajtów przechodzących przez przewód, to może HTTP nie jest właściwym wyborem. Widziałeś ile bajtów jest używanych przez nagłówek user-agent?

Tak, Czy kiedykolwiek próbowałeś używać przeglądarki internetowej jako narzędzia do debugowania czegokolwiek innego niż HTML i javascript. Zaufaj mi, to jest do bani. Możesz użyć tylko dwóch czasowników, buforowanie ciągle wchodzi w drogę, błąd obsługi pochłania tak wiele informacji, że ciągle szuka cholernego faviconu.ico. Zastrzel mnie.

Czytelny URL. Tylko rzeczowniki, bez czasowników. Tak, to proste, o ile wykonujemy tylko operacje CRUD i musimy tylko uzyskać dostęp do hierarchii obiektów w jeden sposób. Niestety większość aplikacji wymaga nieco większej funkcjonalności.

Nadciągające katastrofa

Istnieje mnóstwo programistów opracowujących obecnie aplikacje integrujące się z usługami REST, którzy są w trakcie wyciągania tych samych wniosków, co Ty. Obiecano im prostotę, elastyczność, skalowalność, ewolucyjność i Święty Graal przypadkowego ponownego użycia. Cechy samej sieci, jak może coś pójść nie tak.

Okazuje się jednak, że wersjonowanie jest równie dużym problemem, ale kompilator nie pomoc w wykrywaniu problemów. Ręcznie napisany kod klienta jest trudny do utrzymania w miarę ewoluowania struktur danych i refakturowania adresów URL. Projektowanie API wokół tylko rzeczowników i czterech czasowników może być naprawdę trudne, zwłaszcza z restful URL fanatycy mówi, kiedy można i nie można używać ciągów zapytań.

Programiści zaczną pytać, dlaczego marnujemy nasz wysiłek na wsparcie zarówno formatów Json, jak i Xml, dlaczego nie skupimy się na jednym i nie zrobimy tego dobrze?

Jak poszło? so wrong

Powiem ci, co poszło nie tak. Jako programiści pozwalamy działom marketingu wykorzystać naszą podstawową słabość. Nasze wieczne poszukiwanie srebrnej kuli zaślepiło nas do rzeczywistości, czym naprawdę jest odpoczynek. Na powierzchni reszta wydaje się tak łatwe i proste. Nazwij swoje zasoby za pomocą adresów URL i używaj GET, PUT, POST i DELETE. Do diabła, my deweloperzy już wiemy jak to zrobić, od lat mamy do czynienia z bazami danych, które mają tabele i kolumny oraz instrukcjami SQL, które mają Wybierz, Wstaw, zaktualizuj i usuń. To powinno być bułka z masłem.

Istnieją inne części reszty, o których niektórzy dyskutują, takie jak samoopisowość i ograniczenie hipermediów, ale te ograniczenia nie są tak proste, jak identyfikacja zasobów i jednolity interfejs. Wydaje się dodawać złożoności, gdzie pożądanym celem jest prostota.

Ta osłabiona wersja REST została potwierdzona w kulturze deweloperów na wiele sposobów. Stworzono frameworki serwerowe, które zachęcał do identyfikacji zasobów i jednolitego interfejsu, ale nie zrobił nic, aby wspierać inne ograniczenia. Terminy zaczęły unosić się wokół różnicowania podejść, (HI-REST vs LO-REST, korporacyjny odpoczynek vs akademicki odpoczynek, odpoczynek vs odpoczynek).

Kilka osób krzyczy, że jeśli nie zastosujesz wszystkich ograniczeń, to nie odpoczniesz. Nie dostaniesz korzyści. Nie ma pół odpoczynku. Ale te głosy zostały oznaczone jako fanatycy religijni, którzy byli zdenerwowani, że ich cenne określenie było skradziony z zapomnienia i mainstream. Zazdrośni ludzie, którzy starają się uczynić odpoczynek trudniejszym niż jest.

Reszta, termin, zdecydowanie stał się głównym nurtem. Prawie każda większa właściwość sieci Web, która ma API, obsługuje "REST". Twitter i Netflix to dwa bardzo wysokie profile. Przerażające jest to, że mogę myśleć tylko o jednym publicznym API, które jest samoopisowe i jest kilka, które naprawdę implementują ograniczenie hypermedia. Pewnie niektóre strony Jak StackOverflow i Gowalla wspieraj linki w swoich odpowiedziach, ale są ogromne dziury w ich linkach. API StackOverflow nie ma strony głównej. Wyobraź sobie, jak udana byłaby strona internetowa, gdyby nie było strony głównej dla strony internetowej!

Obawiam się, że zostałeś wprowadzony w błąd

Jeśli dotarłeś tak daleko, krótka odpowiedź na twoje pytanie brzmi: te interfejsy API (Netflix i Twitter) nie są zgodne ze wszystkimi ograniczeniami, a zatem nie uzyskasz korzyści, jakie powinny mieć interfejsy API REST przynieś.

Tworzenie klientów REST trwa dłużej niż klientów SOAP, ale nie są one związane z jedną konkretną Usługą, więc powinieneś mieć możliwość ponownego korzystania z nich w różnych usługach. Weźmy klasyczny przykład przeglądarki internetowej. Do ilu usług może mieć dostęp przeglądarka internetowa? A co z czytnikiem kanałów? Teraz ile różnych usług może uzyskać przeciętny klient Twittera? Tak, tylko jeden.

Klienci REST nie powinni być budowani tak, aby łączyli się z pojedynczą usługą, mają być budowani tak, aby obsługuje określone typy nośników, które mogą być obsługiwane przez dowolną usługę. Oczywistym pytaniem jest, w jaki sposób można zbudować klienta REST dla usługi dostarczającej application / json lub application / xml. To dlatego, że te formaty są zupełnie bezużyteczne dla klienta. Sam to powiedziałeś,

Trzeba "zgadywać" co powróci przez rurę jako nie ma prawdziwego schematu ani odniesienia dokument

Masz absolutną rację dla serwisy takie jak Twitter. Jednak samoopisowe ograniczenie w REST mówi, że nagłówek typu treści HTTP powinien dokładnie opisywać zawartość, która jest przesyłana przez przewód. Dostarczenie aplikacji / json i aplikacji / xml nie mówi nic o zawartości.

Jeśli chodzi o wydajność systemów opartych na REST, należy spojrzeć na szerszą perspektywę. Mówienie o bajtach koperty jest jak mówienie o rozwijaniu pętli podczas porównywania szybkiego sortowania do rodzaj muszli. Istnieją scenariusze, w których mydło może działać lepiej, i są scenariusze, w których reszta może działać lepiej. Kontekst jest wszystkim.

REST zyskuje znaczną przewagę wydajności, będąc bardzo elastycznym co do typów nośników, które obsługuje i posiadając zaawansowane wsparcie dla buforowania. Aby buforowanie działało dobrze, chociaż prawie wszystkie ograniczenia muszą być przestrzegane.

Ostatni punkt dotyczący czytelnych adresów URL jest zdecydowanie najbardziej ironiczny. Jeśli naprawdę zaangażujesz się w hypermedia ograniczenie, wtedy każdy URL może być GUID i programista klienta nie straciłby nic w czytelności.

Fakt, że Uri powinny być nieprzezroczyste dla klienta, jest jedną z najważniejszych rzeczy podczas tworzenia systemów odpoczynku. Czytelne adresy URL są wygodne dla programistów serwerów, a dobrze ustrukturyzowane adresy URL ułatwiają frameworkowi serwera wysyłanie żądań, ale są to szczegóły implementacji, które nie powinny mieć wpływu na programistów korzystających z API.

Twitter API jest nie jest nawet bliski odpoczynku i dlatego nie widzisz żadnych korzyści z używania go na mydło. Interfejs API Netflix jest znacznie bliższy, ale użycie ogólnych typów mediów pokazuje, że nieprzestrzeganie nawet jednego ograniczenia może mieć ogromny wpływ na korzyści płynące z usługi.

To może nie być ich wina

Zrobiłem dużo dumping na dostawców usług, ale trzeba dwóch tańczyć spokojnie. Usługa może następować po wszystkich ograniczenia i klient może nadal łatwo cofnąć wszystkie korzyści.

Jeśli klient koduje adresy URL, aby uzyskać dostęp do określonych typów zasobów, uniemożliwia to serwerowi zmianę tych adresów URL. Wszelkiego rodzaju Budowa adresów URL w oparciu o ukrytą wiedzę o tym, w jaki sposób usługa strukturyzuje swoje adresy URL, jest naruszeniem.

Założenie, jaki rodzaj reprezentacji zostanie zwrócony z linku może prowadzić do problemów. Dokonywanie założeń co do treści przedstawienia bazując na wiedzy, która nie jest wyraźnie określona w nagłówkach HTTP, na pewno stworzy sprzężenie, które spowoduje ból w przyszłości.

Powinni używać mydła?

Osobiście nie sądzę. REST done right pozwala rozproszonemu systemowi ewoluować w dłuższej perspektywie. Jeśli budujesz systemy rozproszone, które mają komponenty, które są opracowywane przez różnych ludzi i muszą trwać przez wiele lat, reszta jest całkiem dobrym rozwiązaniem.

 193
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
2010-08-04 02:12:31

SOAP jest zorientowanym obiektowo, remote procedure call stos technologii. Działa poprzez zbudowanie nowej abstrakcji na bazie istniejącego protokołu (HTTP).

REST jest podejściem zorientowanym na dokument, które po prostu wykorzystuje cechy istniejącego protokołu (HTTP). "Odpoczynek" to tylko hasło-koncepcja jest taka: po prostu Używaj sieci tak, jak została zaprojektowana do pracy!

W odpowiedzi na pytania:

  1. "realizacja a Usługa REST trwa nieskończenie dłużej niż wdrożenie usługi SOAP."

    Um, Nie, Nie może być nieskończenie dłużej. W przypadku, gdy to, co próbujesz odzyskać, jest już dokumentem lub plikiem , w rzeczywistości jest to znacznie szybsze . Na przykład Specyfikacja OGC dla WMS (Web Mapping Service) definiuje zarówno wersję SOAP, jak i REST protokołu, i nie bez powodu prawie nikt nie implementuje wersji SOAP-to dlatego, że jeśli próbujesz uzyskać mapę, to o wiele łatwiej jest po prostu zbudować adres URL i pobrać bajty obrazu z tego adresu URL, niż zawracać sobie głowę zamknięciem go w wiadomości SOAP. Ale tak, Zgadzam się, że jeśli celem usługi internetowej jest przeniesienie jakiegoś silnie wpisanego obiektu w model obiektowy domeny, SOAP lepiej nadaje się do tego zastosowania.

  2. "Po co pisać usługę REST, która zwraca XML?"

    Cóż, tak, to może być głupie. Ale to zależy od tego, czym jest XML. Jeśli istnieje jasno określony schemat dla tego gdzieś, to nie ma dwuznaczności. Na przykład adresy URL WSDL można traktować jako rodzaj RESTful web service do pobierania informacji o usłudze internetowej. W tym przypadku dodanie narzutu innego żądania mydła byłoby bezcelowe.

    Ogólnie rzecz biorąc, REST wygrywa, gdy przesyłana zawartość może być traktowana jako plik , jako pojedyncza jednostka . Soap wygrywa, gdy zawartość musi być traktowana jako obiekt z członkowie .

  3. "słyszałem skargę, że z mydłem masz "nad głową" koperty mydła. Czy w dzisiejszych czasach naprawdę musimy martwić się o garść bajtów?"

    Tak. Nie w każdych okolicznościach, ale są miejsca o dużym natężeniu ruchu, w których robi to różnicę. Czy wystarczy różnica, aby przeważyć różnice semantyczne używania SOAP zamiast odpoczynku? Wątpię. Jeśli wykonujesz protokół remoting obiektu a ilość bajtów robi różnicę, SOAP i tak nie jest narzędziem dla ciebie . może zamiast tego powinieneś używać Corby lub DCOM.

  4. "słyszałem argument, że z REST można po prostu pop URL do przeglądarki i zobaczyć dane."

    Tak, i jest to duży argument na korzyść REST jeśli ma sens przeglądanie danych w przeglądarce. Na przykład w przypadku danych obrazu jest to łatwy sposób na debugowanie usługi - wystarczy wkleić adres URL do pasek adresu przeglądarki i zobacz, jak wygląda obraz. Lub jeśli zwracane dane są w formacie XML, a w przeglądarce znajduje się arkusz stylów XML, który renderuje się do czytelnego HTML, wtedy można korzystać z znaczników semantycznych i łatwej wizualizacji w jednym pakiecie. Ale masz rację, ta korzyść głównie wyparowuje podczas pracy z bardziej złożonymi schematami uwierzytelniania. Jeśli nie możesz zakodować wszystkich informacji uwierzytelniających do każdego żądania HTTP , to argumentowałbym, że nie liczy się jako odpoczynek.

  5. "Dlaczego potrzebujemy" czytelnego " adresu URL dla każdego Zasobu? Gdybyśmy używali narzędzia do wdrożenia usługi, czy naprawdę zależy nam na rzeczywistym adresie URL?"

    Cóż, to zależy. Dlaczego potrzebujemy czytelnych adresów URL dla dowolnego zasobu w sieci? Możesz przeczytać esej Tima Bernersa-Lee fajne Uri się nie zmieniają dla uzasadnienia, ale zasadniczo, tak długo, jak zasób może być nadal przydatny w przyszłości, URI do tego zasoby powinny pozostać takie same.

    Oczywiście w przypadku zasobów przejściowych (takich jak link "dzisiejsze pieniądze" w eseju) nie ma takiej potrzeby, ponieważ potrzeba odniesienia do zasobu zniknie, jeśli odpowiedni zasób zniknie. Ale dla bardziej stałych zasobów (takich jak pytania Stoskoverflow, na przykład, lub filmy w IMDB), chcesz mieć adres URL, który będzie działać na zawsze. Projektując usługę internetową, musisz zdecydować, czy same zasoby mogą przetrwać twoją usługę, a jeśli tak, to odpoczynek jest prawdopodobnie właściwą drogą.

Dla przypomnienia, tak, tworzyłem strony internetowe od dawna, zanim istniał NetFlix lub Twitter. I nie, nie miałem jeszcze żadnej potrzeby ani możliwości wdrożenia klienta do usług NetFlix lub Twittera. Ale nawet jeśli ich usługi są potwornie trudne do pracy, nie oznacza to, że technologia, na której zaimplementowali swoje usługi, jest zła-tylko, że te dwie implementacje są źle.

Krótko mówiąc: odpoczynek i mydło to tylko narzędzia . Każdy z nich ma mocne i słabe strony. Jeśli jedynym narzędziem, które masz, jest młotek, to każdy problem wygląda jak gwóźdź. Poznaj oba narzędzia i dowiedz się, jak prawidłowo z nich korzystać, a następnie wybierz odpowiednie narzędzie do każdego zadania.

 60
Author: Daniel Pryden,
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-07-22 21:09:02

Uczciwe pytanie zasługuje na szczerą odpowiedź. Ale po pierwsze, dlaczego użyłeś tekstu tego pytania jako odpowiedzi na inne pytanie , Jeśli nie sądziłeś, że ma ono charakter retoryczny?

W każdym razie:

  1. "narzędzia istnieją dla wszystkich współczesnych języków / frameworków/platform do odczytu w WSDL i klasach proxy i klientach wyjściowych. Wdrożenie usługi REST odbywa się ręcznie poprzez czytanie dokumentacji."

    Tak jak sprzedawcy przeglądarek przeczytali i przeczytaj ponownie specyfikację HTML 4.01 w górę iw dół, aby spróbować zaimplementować spójne przeglądanie. Czy zastanawiałeś się nad faktem, że przeglądarki zostały wynalezione na długo przed bankowością internetową i stoskoverflow, a jednak możesz użyć przeglądarki, aby zrobić tylko te rzeczy. Jest to możliwe tylko dlatego, że wszyscy zgadzają się używać HTML (i pokrewnych formatów, takich jak CSS, JS, JPEG itp.).

    Blogowanie nie jest tak nowe, a ktoś wymyślił AtomPub, który pozwala na dowolne blogowanie oprogramowanie do dostępu i aktualizacji postów na blogu, podobnie jak każda przeglądarka internetowa może uzyskać dostęp do dowolnej strony internetowej. To całkiem zgrabne, i działa ze względu na RESTful ograniczeń nałożonych przez protokół.

    Ale w przypadku Twittera i Netflixa nie ma powszechnej zgody, że "wszystkie istniejące mikroblogi będą używać aplikacji typu Media / tweet", głównie dlatego, że mikroblogowanie jest tak nowe. Może za kilka lat kilka usług mikroblogowych osiedli się na tym samym API, aby Twitter, Facebook, Identica i może współpracować. Żaden z ich istniejących interfejsów API nie jest w pobliżu RESTful, niezależnie od tego, jak bardzo twierdzą, więc nie spodziewam się, że stanie się to tak szybko.

    "Ponadto, podczas wdrażania tych dwóch usług, musisz "zgadywać", co wróci przez rurkę, ponieważ nie ma prawdziwego schematu lub dokumentu referencyjnego."

    Trafiłeś w sedno. REST polega na rozproszeniu i hipermediach, i to w sumie wszystko podsumowuje. Przeglądarka patrzy na co dostaje z żądania i pokazuje go użytkownikowi. Strona HTML zazwyczaj generuje dużo więcej żądań GET, na przykład CSS, skrypty i obrazy. Obraz jest zazwyczaj renderowany tylko na ekranie, wykonywany jest JavaScript i tak dalej. Za każdym razem przeglądarka robi to, co robi, ponieważ znajduje link w znaczniku <img> lub <style>, A Typ nośnika odpowiedzi to image/jpeg lub text/css. Jeśli Twitter tworzy API oparte na hipermediach, prawdopodobnie zawsze zwróci application/tweet za każdym razem, gdy klikniesz link do tweet, ale klient nigdy nie powinien tego zakładać i zawsze sprawdzać, co dostaje, zanim zacznie działać.
  2. "Po co pisać usługę REST, która zwraca XML?"

    To wszystko sprowadza się do typów mediów. Podobnie jak HTML, jeśli widzisz element, który nie masz pojęcia, co tak naprawdę oznacza, Specyfikacja HTML nakazuje ci je zignorować i przetworzyć "ciało" tagu, jeśli go posiada. Podobnie, ATOM spec nakazuje ignorowanie nieznanych elementów i obcych znaczników (od różne przestrzenie nazw) i nie przetwarzają ciało (IIRC).

    Projektowanie typów multimediów dla domen problemowych (jak w HTML dla domeny problemowej rich text ) jest bardzo trudne. Tworzenie typów mediów dla bardzo wąskich domen problemowych jest prawdopodobnie o wiele łatwiejsze(jak tweet). Ale zawsze dobrym pomysłem jest zaprojektowanie pod kątem rozszerzalności i określenie, jak klienci (i serwery) mają reagować, gdy widzą elementy lub elementy danych, które nie pasują do spec. Na przykład format JPEG ma typ rekordu specyficzny dla aplikacji (np. APP1), który jest używany do przechowywania wszelkiego rodzaju metadanych.

  3. "słyszałem skargę, że z mydłem masz "nad głową" koperty mydła. Czy w dzisiejszych czasach naprawdę musimy martwić się o garść bajtów?"

    Odpoczynek nie polega na tym, żeby być wydajnym przez drut, ale na wymianie wydajności drutu. Efektywność odpoczynku wynika z możliwości buforowania włączone przez wszystkie inne ograniczenia: rozprawa Fieldinga uwagi: {40]} kompromis polega jednak na tym, że jednolity interfejs obniża wydajność, ponieważ informacje są przesyłane w znormalizowanej formie, a nie takiej, która jest specyficzna dla potrzeb aplikacji. Interfejs REST został zaprojektowany tak, aby był wydajny dla wielkoziarnistego transferu danych hypermedia, optymalizując dla wspólnego przypadku sieci Web, ale w wyniku interfejsu, który nie jest optymalny dla innych form interakcji architektonicznych. nie sądzę, aby liczba bajtów koperty mydła nad głową była uzasadniona.
  4. "słyszałem argument, że z REST można po prostu pop URL do przeglądarki i zobaczyć dane."

    Tak, to również nieprawidłowy argument. To tak nie działa. Nawet jeśli to zadziałało, większość API REST narrow używa typów multimediów, o których przeglądarki nie mają pojęcia i nadal nie będą działać.

    Ale są o wiele więcej możliwości niż przeglądarka do testowania interfejsu API opartego na HTTP, takich jak narzędzia wiersza poleceń lub rozszerzenia przeglądarki, które pozwalają kontrolować prawie każdy aspekt żądania HTTP, sprawdzać nagłówki odpowiedzi i odkrywać linki do naśladowania. Ale mimo to, nie jest to tak proste, jak generowanie WSDL stubs i tworzenie programu trzyliniowego do wywoływania funkcji.

  5. "Dlaczego potrzebujemy "czytelnego" adresu URL dla każdego Zasobu? Gdybyśmy używali narzędzia do realizacji usługa, czy naprawdę zależy nam na rzeczywistym adresie URL?"

    Jeśli przyjrzysz się, jak działa sieć, jestem prawie pewien, że ludzie są w zasadzie zadowoleni, że URI dla strony Wikipedii wygląda tak, http://en.wikipedia.org/wiki/Stack_overflow zamiast http://en.wikipedia.org/wiki/?oldid=376349090. Ale w rzeczywistości nie jest ważne, aby odpocząć. Ważną rzeczą, aby spróbować się poprawić, jest wybór umieszczenia odpowiednich danych w URI, które prawdopodobnie się nie zmienią. Może się wydawać, że identyfikator bazy danych nigdy się nie zmieni, ale co się dzieje, gdy dwa zestawy danych muszą być połączone? Wszystkie klucze się zmieniają. Tytuł strony (Stack_overflow) nie ulegnie zmianie.

Przepraszam za długą odpowiedź, ale uważam, że to pytanie jest słuszne i nie było wcześniej poruszane tutaj w ten sposób. Jestem pewien, że Darrel Miller też doda swoją odpowiedź, gdy wróci.

Edit: formatowanie

 17
Author: mogsie,
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
2017-05-23 12:02:02

Martin Fowler ma post na temat modelu dojrzałości Richardsona, który świetnie wyjaśnia różnicę między mydłem a resztą.

 7
Author: Caleb Powell,
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
2012-12-17 10:40:16

WSDL i inne protokoły poziomu dokumentów są zbędne. Protokół HTTP obsługuje znacznie bogatszy zestaw operacji poza tylko obsługą dokumentów i przesyłaniem formularzy.

Zwolennicy odpoczynku czują się nieswojo z tym zwolnieniem.

 3
Author: BC.,
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-07-19 23:02:16