Co to jest REST? Trochę zdezorientowany [zamknięty]

155

Przyjąłem założenie, że REST to usługa internetowa, ale wydaje mi się, że tak myślę - więc czym jest REST?

Przeczytałem Wikipedię, ale nadal nie mogę się nad tym zastanowić. Dlaczego w wielu miejscach interfejsy API są określane jako REST API?

Bill the Lizard
źródło
21
@John Saunders: Jak to możliwe, że duplikat? Drugi facet najwyraźniej wie, czym jest REST, podczas gdy Nathan jest zdezorientowany.
Fake Code Monkey Rashid,
Czułem, że ten drugi odpowie na jego pytanie. Jeśli nikt inny się nie zgodzi, to głosowanie za bliskim starzeją się. Mamy około dziesięciu odpowiedzi na to pytanie. Wystarczy kliknąć tag „reszta”, a zobaczysz je wszystkie.
John Saunders,
1
REST to zestaw reguł do tworzenia usług internetowych. Jeśli API jest zbudowane zgodnie z tymi regułami, jest to API REST. Sposób, w jaki wyjaśniłem REST mojej gumowej kaczce, wyjaśnia nieformalnie niektóre z tych zasad.
User42

Odpowiedzi:

127

REST nie jest określoną usługą internetową, ale koncepcją projektową (architekturą) do zarządzania informacjami o stanie. Przełomowym artykułem na ten temat była rozprawa Roya Thomasa Fieldinga (2000) „Architectural Styles and the Design of Network-based Software Architectures” ( dostępna online na Uniwersytecie Kalifornijskim w Irvine).

Najpierw przeczytaj post Ryana Tomayko. Jak wyjaśniłem REST mojej żonie ; to świetny punkt wyjścia. Następnie przeczytaj aktualną rozprawę Fieldinga. Nie jest tak zaawansowana, ani długa (sześć rozdziałów, 180 stron)! (Znam was, dzieciaki w szkole, lubicie krótkie).

EDYCJA: Wydaje mi się, że nie ma sensu próbować wyjaśniać REST. Ma tak wiele pojęć, jak skalowalność, widoczność (bezpaństwowość) itp., Które czytelnik musi zrozumieć, a najlepszym źródłem ich zrozumienia jest faktyczna rozprawa. To znacznie więcej niż POST / GET itp.

Anders
źródło
@Nathan, zaufaj mi, miałem ten sam problem, co Ty wcześniej. Przeczytaj tezę, może przejrzyj ją kilka razy powoli, ale zrozumiesz koncepcję, w rzeczywistości nie jest to wcale trudne. Ludzie mają po prostu tendencję do wyjaśniania tego słabo.
Anders,
Kiedy programiści próbują wykorzystać REST i próbują zrobić to tylko na swoim kodzie (bez planowania całego systemu z myślą o REST), nadchodzi piekło :-)
karatedog
@Anders, Biorąc pod uwagę, że REST jest tym, co to jest, jak można porównać REST z usługami sieciowymi?
Więzień
1
może ten rozdział wystarczy, zamiast czytać całą rozprawę: ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
andilabs
74

REST to wzorzec projektowania oprogramowania zwykle używany w aplikacjach internetowych. W kategoriach laika oznacza to, że jest to powszechnie stosowany pomysł, stosowany w wielu różnych projektach. To oznacza REpresentational State Transfer . Podstawową ideą REST jest traktowanie obiektów po stronie serwera (jak w wierszach w tabeli bazy danych) jako zasobów, które można utworzyć lub zniszczyć.

Najbardziej podstawowym sposobem myślenia o REST jest sposób formatowania adresów URL aplikacji internetowych. Na przykład, jeśli Twój zasób nazywał się „posty”, to:

/posts Byłby to sposób, w jaki użytkownik uzyskałby dostęp do WSZYSTKICH postów do wyświetlenia.

/posts/:id Byłby to sposób, w jaki użytkownik uzyskałby dostęp i przeglądał indywidualny post, pobrany na podstawie ich unikalnego identyfikatora.

/posts/new Byłby to sposób wyświetlenia formularza do tworzenia nowego posta.

Wysłanie żądania POST do /usersbyłoby w jaki sposób faktycznie utworzyłbyś nowy post na poziomie bazy danych.

Wysłanie żądania PUT do /users/:idbyłoby sposobem, w jaki zaktualizowałbyś atrybuty danego postu, ponownie identyfikowanego przez unikalny identyfikator.

Wysłanie żądania DELETE do /users/:idbyłoby sposobem, w jaki usunąłbyś dany post, ponownie identyfikowany przez unikalny identyfikator.

Jak rozumiem, wzorzec REST został spopularyzowany (dla aplikacji internetowych) głównie przez framework Ruby on Rails, który kładzie duży nacisk na trasy RESTful. Chociaż mogę się co do tego mylić.

Może nie jestem najbardziej kompetentny, aby o tym mówić, ale tak się tego nauczyłem (szczególnie w przypadku programowania w Railsach).

Gdy ktoś odnosi się do „REST API”, ogólnie chodzi o interfejs API, który używa adresów URL RESTful do pobierania danych.

maxluzuriaga
źródło
2
Masz szczęście, ponieważ Railsy są zbudowane na zasadach REST i jeśli użyjesz narzędzi Railsowych, twój kod będzie RESTful. Jednak są tam programiści, którzy nie rozumieją Jacka na temat REST, kodują, co chcą, i na końcu wykorzystują to „formatowanie adresów URL”, ponieważ jest modne.
karatedog
8
gdzie kiedykolwiek / users został użyty w tej odpowiedzi, czy nie powinien to być / posts?
Mayuresh Srivastava
@MayureshSrivastava Zauważ, że przykłady PUT mają: id i przykłady POST nie mają: id. Google do końca historii. (POST: non-safe, non-idempotent; PUT: non-safe, idempotent)
Ajeet Ganga
38

RESTto styl architektoniczny i projekt dla sieciowych architektur oprogramowania.

RESTkoncepcje nazywane są zasobami. Reprezentacja zasobu musi być bezstanowa. Jest reprezentowany przez pewien rodzaj mediów. Niektóre przykłady typów nośników należą XML, JSONi RDF. Zasoby są manipulowane przez komponenty. Komponenty żądają zasobów i manipulują nimi za pośrednictwem standardowego, jednolitego interfejsu. W przypadku HTTP ten interfejs składa się ze standardowych ops HTTP, na przykład GET, PUT, POST, DELETE.

RESTjest zwykle używany HTTP, głównie ze względu na prostotę protokołu HTTP i jego bardzo naturalne odwzorowanie na zasady RESTful. Jednak REST nie jest powiązany z żadnym określonym protokołem.

Podstawowe zasady REST

Komunikacja klient-serwer

Architektury klient-serwer charakteryzują się bardzo wyraźnym rozdziałem problemów. Wszystkie aplikacje zbudowane w stylu RESTful muszą również być w zasadzie klient-serwer.

Bezpaństwowcy

Każde żądanie klienta skierowane do serwera wymaga pełnej reprezentacji jego stanu. Serwer musi być w stanie w pełni zrozumieć żądanie klienta bez korzystania z kontekstu serwera lub stanu sesji serwera. Wynika z tego, że cały stan należy zachować na kliencie. Przedstawienie bezpaństwowców omówimy bardziej szczegółowo później.

Cacheable

Można zastosować ograniczenia pamięci podręcznej, umożliwiając w ten sposób oznaczenie danych odpowiedzi jako buforowalne lub nieobejmowalne. Wszelkie dane oznaczone jako buforowalne mogą być ponownie wykorzystane jako odpowiedź na to samo kolejne żądanie.

Jednolity interfejs

Wszystkie komponenty muszą współdziałać przez jeden jednolity interfejs. Ponieważ interakcja wszystkich komponentów odbywa się za pośrednictwem tego interfejsu, interakcja z różnymi usługami jest bardzo prosta. Interfejs jest taki sam! Oznacza to również, że zmiany wdrożeniowe można wprowadzać oddzielnie. Takie zmiany nie wpłyną na interakcję podstawowych komponentów, ponieważ jednolity interfejs jest zawsze niezmieniony. Jedną z wad jest to, że utknąłeś z interfejsem. Jeśli można by zapewnić optymalizację dla określonej usługi poprzez zmianę interfejsu, nie masz szczęścia, ponieważ REST tego zabrania. Z drugiej strony REST jest zoptymalizowany pod kątem sieci, stąd niesamowita popularność REST przez HTTP!

Powyższe koncepcje reprezentują definiowanie cech REST i odróżniają architekturę REST od innych architektur, takich jak usługi internetowe. Warto zauważyć, że usługa REST to usługa internetowa, ale usługa internetowa niekoniecznie jest usługą REST.

Zobacz ten wpis na blogu na temat zasad projektowania REST, aby uzyskać więcej informacji na temat REST i powyższych zasad.

cmd
źródło
15

To skrót od Representational State Transfer i może oznaczać wiele rzeczy, ale zwykle, gdy mówisz o API i aplikacjach, mówisz o REST jako sposobie świadczenia usług internetowych lub uzyskiwania programów do rozmów w sieci.

REST jest w zasadzie sposobem komunikacji między systemami i robi wiele z tego, do czego został zaprojektowany SOAP RPC, ale podczas gdy SOAP generalnie łączy się, uwierzytelnia, a następnie robi rzeczy przez to połączenie, REST działa prawie tak samo, jak działa sieć . Masz adres URL i kiedy prosisz o ten adres URL, otrzymasz coś z powrotem. W tym miejscu sprawy zaczynają się zagmatwać, ponieważ ludzie opisują sieć jako największą aplikację REST i chociaż jest to technicznie poprawne, tak naprawdę nie pomaga wyjaśnić, co to jest.

Krótko mówiąc, REST pozwala uzyskać rozmowę dwóch aplikacji przez Internet przy użyciu narzędzi podobnych do tych, których używa przeglądarka internetowa. Jest to znacznie prostsze niż SOAP, a wiele z tego, co robi REST, mówi: „Hej, rzeczy nie muszą być tak skomplikowane”.

Warte przeczytania:

znak
źródło
REST to architektura oparta na ograniczeniach, SOAP to protokół, to są zupełnie inne rzeczy. Nie podoba mi się, gdy ludzie mówią o SOAP i REST w tej samej koncepcji, nic dziwnego, że ludzie są zdezorientowani.
Anders,
@Anders - Powiedział, że patrzy na REST API i myśli, że to sposób na wykorzystanie usług sieciowych. Możesz używać REST w ten sposób iw tym zakresie osiąga wiele z tego, co robi SOAP. Można również mówić o sieci jako największej na świecie aplikacji RESTful, ale to nie wyjaśnia, do czego użyjesz REST API.
Mark
To był mój główny problem, widząc REST i SOAP w tej samej koncepcji. Wygląda na to, że API są po prostu RESTful w projekcie.
Więzień
4

http://en.wikipedia.org/wiki/Representational_State_Transfer

Podstawową ideą jest to, że zamiast mieć ciągłe połączenie z serwerem, wysyłasz żądanie, pobierasz jakieś dane, pokazujesz to użytkownikowi, ale może nie wszystkie, a potem, gdy użytkownik robi coś, co wymaga większej ilości danych, lub aby przekazać część do serwera, klient inicjuje zmianę do nowego stanu.

Brzeszczot
źródło
3
Może to tylko ja, ale lubię widzieć odpowiednią odpowiedź na stackoverflow wraz z odpowiednim cytatem. Po prostu pociesz mnie i przypuśćmy, że wikipedia poszła poof. Co dobrego robi twój link, hmm? :)
Fake Code Monkey Rashid,
1
@Hack Saw: Czy nie powinno to być w twojej odpowiedzi?
Fałszywy kod Monkey Rashid,
Właśnie zauważyłem funkcję edycji. :)
Hack Saw
1
@karatedog: REST można osiągnąć za pomocą protokołu HTTP, ale można to zrobić różnymi metodami przesyłania danych.
Hack Saw
1
To jest protokół HTTP, o którym piszesz, REST to architektura.
karatedog