Czy możesz wyjaśnić koncepcję sieci RESTful?

Szukam jasnych i zwięzłych wyjaśnień tego pojęcia.

Author: Tall Jeff, 2009-02-16

7 answers

Aplikacja RESTful to aplikacja, która ujawnia swój stan i funkcjonalność jako zbiór zasobów, którymi klienci mogą manipulować i jest zgodna z pewnym zestawem zasad:

  • wszystkie zasoby są unikalnie adresowalne, zwykle poprzez Uri; można jednak użyć innych adresów.
  • wszystkie zasoby można manipulować poprzez ograniczony zestaw znanych akcji, Zwykle CRUD( create, read, update, delete), reprezentowany najczęściej przez POST HTTP, GET, PUT and DELETE; może to być inny zbiór lub podzbiór - na przykład niektóre implementacje ograniczają tylko odczyt i modyfikację (GET I PUT), na przykład
  • Dane dla wszystkich zasobów są przesyłane przez jedną z ograniczonej liczby znanych reprezentacji, Zwykle HTML, XML lub JSON;
  • komunikacja pomiędzy Klientem a aplikacją odbywa się za pomocą protokołu bezstanowego, który umożliwia wielowarstwowym pośrednikom, którzy mogą przekierować i buforować żądania i pakiety odpowiedzi są przejrzyste dla klienta i aplikacji.

Artykuł Wikipedii wskazywany przez Tima Scotta zawiera więcej szczegółów na temat pochodzenia odpoczynku, szczegółowych zasad, przykładów i tak dalej.

 36
Author: Franci Penov,
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-02-16 01:09:01

Najlepsze wyjaśnienie znalazłem w tym REST tutorial .

 12
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-02-17 20:11:51

Reszta na przykładzie:

POST /user
fname=John&lname=Doe&age=25

Serwer odpowiada:

200 OK
Location: /user/123

W przyszłości możesz pobrać informacje o użytkowniku:

GET /user/123

Serwer odpowiada:

200 OK
<fname>John</fname><lname>Doe</lname><age>25</age>

Do aktualizacji:

PUT /user/123
fname=Johnny
 10
Author: pbreitenbach,
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-07-04 07:22:01

Szczerze mówiąc, odpowiedź zależy od kontekstu. Odpoczynek i odpoczynek mają znaczenie w zależności od tego, jakiego języka lub struktury używasz lub co próbujesz osiągnąć. Ponieważ otagowałeś swoje pytanie pod "Usługi internetowe", odpowiem w kontekście RESTful web services, który nadal jest szeroką kategorią.

RESTful web services może oznaczać wszystko, od ścisłej interpretacji REST, gdzie wszystkie działania są wykonywane w ścisły "RESTful" sposób, do protokołu, który jest zwykły XML, co oznacza, że nie SOAP lub XMLRPC. W tym drugim przypadku jest to błędna nazwa: taki protokół REST jest tak naprawdę protokołem "plain old XML" (lub "POX") . Podczas gdy protokoły REST zwykle używają XML i jako takie są protokołami POX, niekoniecznie musi tak być, a odwrotność nie jest prawdą (a tylko dlatego, że protokół używa XML nie czyni go RESTful).

Bez zbędnych ceregieli, prawdziwie RESTful API składa się z działań podejmowanych na obiektach, reprezentowanych przez zastosowaną metodę HTTP i adres URL tego obiektu. Na działania dotyczą danych, a nie tego, co robi metoda. Na przykład akcje CRUD (Utwórz, przeczytaj, zaktualizuj i usuń) mogą mapować do określonego zestawu adresów URL i akcji. Powiedzmy, że korzystasz z interfejsu API zdjęć.

  • aby utworzyć zdjęcie, należy wysłać dane za pomocą żądania POST do / photos. Dzięki temu dowiesz się, gdzie znajduje się zdjęcie za pomocą nagłówka lokalizacji, np. /photos/12345
  • aby zobaczyć zdjęcie, użyj GET / photos / 12345
  • aby zaktualizować zdjęcie, wysyłasz dane poprzez PUT prośba do / photos/12345.
  • aby usunąć zdjęcie, należy użyć DELETE / photos / 12345
  • aby uzyskać listę zdjęć, należy użyć GET / photos.

Mogą zostać zaimplementowane inne działania, takie jak możliwość kopiowania zdjęć za pomocą żądania kopiowania.

W ten sposób, Metoda HTTP używasz Map bezpośrednio do intencji połączenia, zamiast wysyłania akcji, którą chcesz podjąć jako część API. Dla kontrastu, API Non-RESTful może używać o wiele więcej adresów URL i używać tylko GET i POST actions. Więc w tym przykładzie możesz zobaczyć:

  • aby utworzyć zdjęcie, wyślij POST do / photos / create
  • aby zobaczyć zdjęcie, wyślij GET do / photos/view / 12345
  • Aby zaktualizować zdjęcie, wyślij POST do /photos/update / 12345 Aby usunąć zdjęcie, Wyślij zapytanie do / photos/delete / 12345
  • aby uzyskać listę zdjęć, wyślij GET do / photos / list

Zauważysz, że w tym przypadku adresy URL są różne, a metody są wybierane tylko z technicznych konieczność: aby wysłać dane, musisz użyć postu, podczas gdy wszystkie inne żądania używają GET.

 6
Author: wuputah,
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-02-16 02:18:25

Tylko kilka punktów:

  • RESTFul nie zależy od używanego frameworka. To zależy od stylu architektonicznego, który opisuje. Jeśli nie podążasz za ograniczeniami, nie odpoczywasz. Ograniczenia są zdefiniowane w połowie strony rozdziału 5 dokumentu Roya Fieldinga, zachęcam do zapoznania się z nim.
  • identyfikator jest nieprzezroczysty i nie zawiera żadnych informacji poza identyfikacją zasobu. To nmae, nie Dane wejściowe, tylko nazwy. jeśli chodzi o klient jest zaniepokojony, nie ma logiki ani wartości poza wiedzą, jak budować zapytania z tagu formularza. Jeśli twój klient tworzy własne Uri za pomocą schematu, który zdecydowałeś wcześniej, nie jesteś spokojny.
  • użycie lub nie użycie wszystkich czasowników http nie jest tak naprawdę ograniczeniem i jest całkowicie dopuszczalne zaprojektowanie architektury, która obsługuje tylko POST.
  • buforowanie, wysokie odsprzęganie, brak stanu sesji i architektura warstwowa to punkty, o których niewiele mówi, ale najważniejsze za sukces spokojnej architektury.

Jeśli nie spędzasz większości czasu na tworzeniu formatu dokumentu, prawdopodobnie nie odpoczywasz.

 5
Author: SerialSeb,
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-02-16 06:41:22

Oznacza używanie nazw do identyfikacji zarówno poleceń, jak i parametrów.

Zamiast nazw będących zwykłymi uchwytami lub monikerami, sama nazwa zawiera informacje. W szczególności informacje o tym, co jest wymagane, parametry żądania itp..

Nazwy nie są "roots", ale raczej akcje plus Dane wejściowe.

 2
Author: Jason Cohen,
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-02-16 00:47:39

Najwięcej nauczyłem się czytając artykuły opublikowane na InfoQ.com: http://www.infoq.com/rest i książka RESTful Web Services ( http://oreilly.com/catalog/9780596529260/).

./ alex

Zastrzeżenie: jestem związany z InfoQ.com, ale to zalecenie opiera się na moim własnym doświadczeniu w nauce.

 1
Author: alexpopescu,
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-02-21 11:21:01