2009-07-08 15 views
34

Buduję własną stronę Ajax i rozważam między REST a RPC.REST vs. RPC w PHP

Jeśli mój serwer obsługiwał serwlety, wystarczy zainstalować persevere i zakończyć problem, ale mój serwer nie obsługuje serwletów.

RPC jest prostszy do kodowania (IMO) i można go łatwo napisać w PHP. Wszystko czego potrzebuję to wykonanie kwerendy do bazy danych. Używam Dojo Toolkit i JSON.

Dlaczego powinienem wybrać REST przez RPC lub RPC przez REST?

+1

nie może zrozumieć, dlaczego stackoverflow jest masowo zamyka QA, że miał duży wpływ. – minghua

Odpowiedz

21

Uhm ... umieścić go prosty, oba są bardzo abstrakcyjne modele ... tak abstrakcyjne, że naturalnie występuje wszędzie ...

REST jest idea posiadania zasobów skierowana z globalnego identyfikatora (URI w przypadku HTTP), które są dostępne w CRUD sposób (za pomocą POST, GET, PUT i DELETE w przypadku HTTP ... dobrze, przynajmniej to pomysł) ...

RPC jest pomysł, gdzie możesz wywołać procedurę na innym komputerze, przekazując pewne parametry i zwracając wartość ...

There is a nice short comparison on Wikipedia

Wytrwaj tworzy usługę, która pozwala zarówno (w bardzo elegancki sposób, co prawda) ... to RESTful (choć nie używa tylko HTTP możliwości osiągnięcia tego celu) i naraża interfejs RPC ...

Na koniec powinieneś sprawdzić, co twoja aplikacja musi zrobić ... jak większość ludzi, prawdopodobnie skończysz z RPC API (czy to na podstawie XML lub JSON lub cokolwiek innego), która obejmuje warstwę transportową dla częściowo podsystemu RESTful ... to znaczy, ponieważ posiadanie RESTfullów oznacza elastyczność ... jeśli klient może swobodniej lub bardziej swobodnie przemierzać dane na serwerze (za pomocą zestawu prostych narzędzi CRUD thods), to nie zależy od ograniczonego (specyficznego dla problemu) zestawu metod wyeksponowanych przez API, a ty możesz zmienić logikę klienta ...

+25

REST nie ma nic wspólnego z CRUD. – aehlke

+8

Ktoś może być wybaczony za myślenie o REST pod względem CRUD. To powszechne nieporozumienie. Oto wyjaśnienie: "... przez odrzucenie mapowania CRUD (tworzenie, pobieranie, aktualizacja, usuwanie) z GPPD (GET, POST, PUT, DELETE) możesz użyć funkcji REST w sposób, w jaki miał być użyty. z użyciem POST do usuwania, aktualizacji lub tworzenia zasobów, o ile POSTINGujesz do właściwego zasobu. " - z http://blog.jonnay.net/archives/642-REST-!-CRUD!.html –

+0

Twój link zawiera nieporozumienia z REST, niestety, które mars jej wiadomość. Jeśli chcesz usunąć zasoby, nie określałbyś identyfikatorów - określałbyś URI zasobów, które mają zostać usunięte. – aehlke

55

Najlepszym sposobem, aby to zrozumieć, jest przeczytanie rozprawy Roya T. Fieldinga na nim lub odpowiednie artykuły na jego blog, gdzie omawia różnice między czystym REST i po prostu architektury RPC.

Inną rzeczą, na którą należy zwrócić uwagę, jest to, że artykuł Wikipedii na temat REST jest w fatalnym stanie, a sam Fielding, "wynalazca" REST, sugeruje, że artykuł jest niedokładny.

Najważniejszą rzeczą, której ludzie tęsknią za REST, jest wykrywalność - zasoby powinny zawierać identyfikatory URI dla innych powiązanych zasobów w hipertekście, zamiast polegać na konwencjach nazewnictwa URI, które są poza standardem i niestandardowe.

Dużym problemem związanym z popularnymi implementacjami RPC, takimi jak SOAP lub XML-RPC, jest to, że używają protokołu HTTP pod własną zastrzeżoną architekturą, zamiast korzystać z wszystkich różnych właściwości protokołu HTTP, takich jak PUT, GET, DELETE itd. Tak więc to robi Nie pasuje również do tradycyjnych aplikacji internetowych - serwer cache w środku nie działa, na przykład, nie znając znaczenia treści wywołania RPC.

Jest to niepełne wprowadzenie do REST i RPC, ale myślę, że podkreśliłem niektóre z ważnych punktów, które często są pomijane. Bądź ostrożny, ponieważ na REST istnieje wiele złych informacji.

To powiedziawszy, REST nie jest dla wszystkiego. To jest architektura, więc jest dość elastyczna, jak możesz ją zaimplementować. Ale jeśli nie ma sensu dostęp do rzeczy przede wszystkim jako zasobów, to REST może nie pasować, lub może pasować tylko do części aplikacji, co jest w porządku.

+0

Kontroler Hypermedia jako znacząco pomógł w wykrywaniu usług związanych z wypoczynkiem. – Amir

+6

Należy zauważyć, że to, co nazywacie "dużym problemem z popularnym RPC", może być również dużą zaletą, w zależności od tego, jakie są Twoje cele. Jeśli korzystasz z czasowników akcji HTTP, jesteś teraz powiązany z HTTP. W wielu architekturach systemów może być pożądane wykonywanie wywołań RPC za pośrednictwem różnych mechanizmów transportu (HTTP, gniazd, kolejek wiadomości itd.).Często nasz wybór HTTP ma więcej wspólnego z jego wszechobecnością niż faktycznym idealnym protokołem transportowym (zobacz niezliczoną ilość rozwiązań przeglądarkowych do tunelowania rzeczy przez HTTP, np. BOSH). Trzeba tylko wziąć pod uwagę wiele kompromisów. – DougW

+0

@DougW, absolutnie prawdziwe. Są sposoby na używanie REST bez HTTP, ale nie wiem o REST, który jest agnostyczny. – aehlke

5

Istnieją trzy różne style usług:

  • RPC API - klient wysyła procedury i parametry do obsługi i obsługa jest odpowiedzialna za wykonujący polecenia i przekazujących wynik.
  • Message API (Document API) - klient wysyła DOMs (elementy), które zwykle są bardziej złożonymi strukturami niż wywołania RPC API, ponieważ zwykle nie implikują bezpośrednio operacji.
  • Interfejs API zasobów - służy do uzyskiwania dostępu do zasobów (krotek, plików, obrazów itp.). Generalnie powinna również zapewniać dobrą Negocjację typu Media.

SOAP i REST są zbiorem norm z W3C, a główną różnicą jest to, że SOAP używa protokołu HTTP, SMTP i itp jako protokołów transportowych i odpoczynku wykorzystuje go jako protokół aplikacji, AKA powinien wspierać (GET, PUT, PUSH, DELETE i POST). SOAP oznacza również użycie XML, a REST może wykorzystywać dowolny typ danych (JSON, XML, HTTP itd.). Ponadto jedną z głównych zalet protokołu SOAP jest deskryptor usługi (plik WSDL), który umożliwia automatyczne generowanie usługi Service Connector (proxy) na kliencie.

Nie ma numeru silver bullet; rodzaj i architektura usługi internetowej zależy od rzeczywistych wymagań klienta i technologii.

Dla ogólnego pomysłu na ten temat można znaleźć w jednej z książek sygnatur Martin Fowler - Service Design Patterns

+0

Możesz udokumentować usługi REST przy użyciu WSDL 2.0 lub WADL http://rest.elkstein.org/2008/02/documenting-rest-services-wsdl-and-wadl.html – icc97