На сервере для отдыха один и тот же URL (скажем, / books / 1) может отвечать на множество различных глаголов. Эти глаголы GET, POST, PUT и DELETE вместе с путем указывают , что вы хотите сделать с данными на сервере . В ответе сообщается ответ на ваш запрос.
REST - это доступ к данным предсказуемым и разумным способом.
Если вы пришли из сильного фона PHP, где каждый URL-адрес должен отображаться в определенный файл, вы правы, это не имеет смысла. В двух наиболее заметных средах разработки RESTful, ASP.NET MVC и Rails, каждая имеет специальные серверы (или серверную логику), которые читают глаголы и выполняют эту специальную маршрутизацию для вас. Это то, что позволяет «нормальному потоку» приложения проходить так, как вы ожидаете. Для PHP есть фреймворки, которые помогают с этим, такие как WSF WSO2 .
Как REST работает с веб-браузерами
Взять, к примеру, ваш пример. У нас есть сообщения, и мы хотим их удалить.
Мы начинаем с посещения URL вроде / posts / 4. Как и следовало ожидать, здесь показан пост 4, его атрибуты и некоторые действия, которые вы можете предпринять. Запрос на рендеринг этого URL будет выглядеть как GET /posts/4
. Ответ содержит HTML-код, описывающий элемент.
Пользователь нажимает ссылку «Удалить элемент 4», часть HTML. Это отправляет запрос как DELETE /posts/4
на сервер. Обратите внимание, что здесь повторно использовался /posts/4
url, но логика должна быть другой.
HTML-форм и веб-браузеров, многие из них по умолчанию заменят ссылку с методом = "удалить" на ссылку метода = "опубликовать". Вам нужно будет использовать Javascript (что-то вроде this ), чтобы изменить глагол. Ruby on Rails использует скрытое поле ввода (_method
), чтобы указать, какой метод должен использоваться в форме, в качестве альтернативы.
На стороне сервера выполняется логика «Удалить элемент». Он знает, как выполнить это из-за глагола в запросе (DELETE
), который соответствует выполняемому действию. Ключевым моментом REST является то, что глаголы HTTP становятся осмысленными.
После удаления элемента вы могли бы ответить страницей типа «да, готово» или «нет, извините, вы не можете этого сделать», но для браузера имеет смысл поместить вас куда-нибудь остальное. Элемент, удаляемый, имеет смысл перенаправить на GET /posts
.
Если вы посмотрите на журнал сервера, станет ясно, что все сделали с сервером, но это не так важно, как ...
Как REST работает с произвольными данными
Еще одним ключевым моментом REST является то, что он хорошо работает с несколькими форматами данных. Предположим, вы писали программу, которая хотела читать и взаимодействовать с блогом программно. Возможно, вам понадобятся все сообщения, представленные в XML, вместо того, чтобы просматривать информацию в HTML.
GET /posts/4.xml
интуитивно понятен: «Сервер, пожалуйста, дайте мне xml с описанием поста № 4». Ответ будет таким, что XML. Сервер RESTful делает очевидным, как получить необходимую информацию.
Когда вы сделали запрос DELETE /posts/4.xml
, вы спрашиваете: «Сервер, пожалуйста, удалите элемент № 4». Ответа «Хорошо, конечно» обычно достаточно, чтобы выразить, что произошло. Затем программа может решить, чего еще она хочет, и сделать еще один запрос.