REST (REpresentational State Transfer) е философия за свързване и поддържане на тази връзка между сърв и клиент, при условие, че дадената връзка е т.н. „stateless“ (каквито по принцип са HTTP връзките).
Демек, при всеки рекeуст от страна на клиента, той трябва да се удостовери, че е този, за който претендира, че е и иска или да използва даденият ресурс, или да го промени.
И е този, с който сървът е комуникирал до преди малко.
Според тази философия, няма нещо като постоянна, непрекъсваща се връзка. Трябва при всеки рекуест, клиентът да се удостоверява някак за да бъде така да се каже проследен или известен на сърва.
Представи си двама приятели, които си говорят. За футбол, коли, жени… няма значение…
Логично е, щом са приятели, да няма нужда да се представят и запознават всеки път. Тоест, между тях има вече постоянна връзка.
И разговорът им би бил например:
– „Барса спечелила, Ливърпул загубил.“
– „Левски купили едикойси, ЦСКА продали едикойси.“
– „БМВ изкарали нов модел, по-добър от сегашните им най-добри.“
– „Мерцедес също имат нов топмодел от електрическите.“
– „Скивай тая мадама.“
…
и т.н…
„Stateless“ обаче е все едно:
– „Здравей, Пламен съм„. „Барса спечелила, Ливърпул загубил.“
– „Здравей, Иван съм„. „Левски купили едикойси, ЦСКА продали едикойси“.
– „Здравей, Пламен съм„. „БМВ изкарали нов модел, по-добър от сегашните им най-добри.“
– „Здравей, Иван съм„. „Мерцедес пък имат нов топмодел от електрическите“.
– „Здравей, Пламен съм„. „Скивай тая мадама.“
и т.н…
Забелязваш ли как винаги когато единият иска да каже нещо на другият, и обратното, трябва винаги да се представят, сякаш се виждат за първи път. Или все едно като двама приятели, които се сприятеляват и се забравят всеки път, когато искат да си кажат нещо.
Ето това е т.н. „stateless“. Няма състояние, няма постоянно приятелство, приятелството го има всъщност, но е само за даден рекуест.
И трябва винаги да се поддържа, при всеки рекуест-респонс.
Може би затова се казва „Representational“ – демек „ре-представяне“ или „ре-запознаване“ всеки път.
Всеки REST сървис трябва да отговаря на следните условия:
- Всичко е сървис на сърва и се достига през уникален URI.
- Правилата за комуникация между сървът и клиентът са общи, демек „да говорят на един език“, на общ протокол като например HTTP.
- Няма „стейт“, при всеки рекуест и респонс трябва да има „representation“, или с други думи „повторно запознаване“.
- Има пълна независимост (isolation) между отделните рекуст-респонси. Теоретично, и през пет години да си казват по нещо, трябва да е все едно сега си говорят.
А RESTFull е когато за да се постигне горното, могат да се използват всички HTTP методи, които включват не само четене но и качване, изтриване, променяне на данна на сърва.
REST vs. HTTP???
REST е идеята, концепцията, а HTTP e по-скоро реализацията, практиката.
REST идеята е да се използват всички методи на HTTP, но по една или друга причина се използват само GET и POST.
Например, ако трябва да се изтрие даден ресурс от сърва, всеки пуска GET с нещо от рода на /product/?delete_id=22
при условие, че има метод DELETE
Явно RESTfull значи, да се направи приложението така, че да ЗА ВСЕКИ ОТДЕЛЕН РЕСУРС да можеш да приложиш ВСИЧКИ „CRUD“ МЕТОДИ, а не с заместители като по-горният пример. Или „за всеки ресурс да имаш всичките CRUD методи“. Да можеш да създаваш нов ресурс, да извличаш такъв, да променяш както части от него така и изцяло, да изтриваш ресурс.
В този смисъл на думата, HTTP се явява подмножество на REST, или по-скоро реализация на REST, защото ти дава методите, с които да го реализираш, и ако използваш всичките предоставени методи – това е вече RESTfull.