Что такое ОТДЫХ? Немного смущен [закрыто]


155

Я предполагал, что REST был веб-сервисом, но мне кажется, что я не прав, думая об этом - так что же такое REST?

Я прочитал Википедию, но все еще не могу обернуть голову вокруг этого. Почему во многих местах API называется REST API?


21
@ Джон Сондерс: Как это возможно дубликат? Другой парень, очевидно, знает, что такое REST, тогда как Натан, с другой стороны, смущен.
Поддельный код Обезьяны Рашид

Я чувствовал, что другой ответит на его вопрос. Если никто не согласится, то закрытое голосование прекратится. У нас есть около десяти ответов на этот вопрос. Просто нажмите на тег «отдых», и вы увидите их все.
Джон Сондерс

1
REST - это набор правил для построения веб-сервисов. Если API построен в соответствии с этими правилами, это REST API. То, как я объяснил REST своей резиновой утке, неофициально объясняет некоторые из этих правил.
User42

Ответы:


127

REST - это не конкретный веб-сервис, а концепция дизайна (архитектура) для управления информацией о состоянии. Основополагающим документом по этому вопросу была диссертация Роя Томаса Филдинга (2000) «Архитектурные стили и проектирование сетевых программных архитектур» ( доступна онлайн в Университете Калифорнии, Ирвин).

Сначала прочитайте пост Райана Томайко Как я объяснил REST моей жене ; это отличная отправная точка. Тогда прочитайте фактическую диссертацию Филдинга. Это не так сложно и не долго (шесть глав, 180 страниц)! (Я знаю, что вы, ребята, в школе, как это мало).

РЕДАКТИРОВАТЬ: я чувствую, что бессмысленно пытаться объяснить REST. У него так много понятий, как масштабируемость, видимость (без сохранения состояния) и т. Д., Которые читатель должен понять, и лучший источник для понимания - реальная диссертация. Это намного больше, чем POST / GET и т. Д.


@ Натан, поверь мне, у меня была такая же проблема, как и раньше. Прочитайте тезис, возможно, пройдитесь несколько раз медленно, но вы поймете концепцию, на самом деле это совсем не сложно. Люди просто склонны плохо это объяснять.
Андерс

Когда разработчики пытаются использовать REST и пытаются сделать это только для своего кода (без планирования всей системы с учетом REST), приходит ад :-)
karatedog

@ Андерс, учитывая, что REST такой, какой есть, как можно сравнить REST с веб-сервисами?
Заключенный


1
может быть, этой главы будет достаточно вместо чтения всей диссертации: ics.uci.edu/~fielding/pubs/dis
andilabs

74

REST - это шаблон проектирования программного обеспечения, обычно используемый для веб-приложений. С точки зрения непрофессионала это означает, что это широко используемая идея, используемая во многих различных проектах. Это означает REpresentational State Transfer . Основная идея REST заключается в обработке объектов на стороне сервера (как в строках таблицы базы данных) как ресурсов, которые могут быть созданы или уничтожены.

Самый простой способ думать о REST - это способ форматирования URL-адресов ваших веб-приложений. Например, если ваш ресурс назывался «сообщения», то:

/posts Было бы, как пользователь будет иметь доступ ко всем сообщениям, для отображения.

/posts/:id Будет, как пользователь будет получать доступ и просматривать отдельные сообщения, полученные на основе их уникального идентификатора.

/posts/new Будет, как вы бы отобразить форму для создания нового сообщения.

Отправка запроса POST /usersбыла бы способом, которым вы фактически создадите новый пост на уровне базы данных.

Отправка запроса PUT /users/:idбудет такой, как вы бы обновляли атрибуты данного сообщения, снова идентифицируемого уникальным идентификатором.

Отправка запроса на УДАЛЕНИЕ /users/:idбудет такой, как вы удаляете данное сообщение, снова идентифицируемое уникальным идентификатором.

Насколько я понимаю, шаблон REST в основном популяризировался (для веб-приложений) инфраструктурой Ruby on Rails, в которой большое внимание уделяется маршрутам RESTful. Хотя я могу ошибаться по этому поводу.

Я, возможно, не самый квалифицированный, чтобы говорить об этом, но это то, как я это узнал (особенно для разработки Rails).

Когда кто-то ссылается на «REST API», обычно подразумевается API, который использует RESTful URL для получения данных.


2
Вам повезло, потому что Rails построен на принципах REST и если вы используете инструменты Rails, ваш код будет RESTful. Однако есть программисты, которые не понимают, что такое REST, они кодируют то, что хотят, и в конце они используют это «форматирование URL», потому что это модно.
karatedog

8
Где когда-либо / пользователи были использованы в этом ответе, не должно ли быть / сообщения?
Мауреш Шривастава

@MayureshSrivastava Обратите внимание, что примеры PUT имеют: id, а примеры POST не имеют: id. Google для остальной части истории. (POST: небезопасный, неидемпотентный; PUT: небезопасный, идемпотентный)
Аджит Ганга

38

RESTэто архитектурный стиль и дизайн для сетевых программных архитектур.

RESTпонятия упоминаются как ресурсы. Представление ресурса должно быть без гражданства. Это представлено через некоторый тип носителя. Некоторые примеры типов носителей включают в себя XML, JSONи RDF. Ресурсы управляются компонентами. Компоненты запрашивают ресурсы и управляют ими через стандартный унифицированный интерфейс. В случае HTTP, этот интерфейс состоит из стандартной HTTP опса например GET, PUT, POST, DELETE.

RESTобычно используется более HTTP, прежде всего, из-за простоты HTTP и его очень естественного соответствия принципам RESTful. REST, однако, не привязан к какому-либо конкретному протоколу.

Основные принципы ОТДЫХА

Связь клиент-сервер

Клиент-серверные архитектуры имеют очень четкое разделение задач. Все приложения, созданные в стиле RESTful, также должны быть в принципе клиент-серверными.

Stateless

Каждый клиентский запрос к серверу требует, чтобы его состояние было полностью представлено. Сервер должен иметь возможность полностью понимать запрос клиента без использования контекста сервера или состояния сеанса сервера. Отсюда следует, что все состояние должно быть сохранено на клиенте. Мы обсудим представление без гражданства более подробно позже.

Cacheable

Могут использоваться ограничения кэширования, что позволяет помечать данные ответа как кэшируемые или не кэшируемые. Любые данные, помеченные как кешируемые, могут быть повторно использованы в качестве ответа на тот же последующий запрос.

Единый интерфейс

Все компоненты должны взаимодействовать через единый единый интерфейс. Поскольку взаимодействие всех компонентов происходит через этот интерфейс, взаимодействие с различными сервисами очень просто. Интерфейс такой же! Это также означает, что изменения реализации могут быть сделаны изолированно. Такие изменения не повлияют на взаимодействие фундаментальных компонентов, поскольку единый интерфейс всегда неизменен. Одним из недостатков является то, что вы застряли с интерфейсом. Если для конкретного сервиса может быть предоставлена ​​оптимизация путем изменения интерфейса, вам не повезло, поскольку REST запрещает это. С другой стороны, REST оптимизирован для Интернета, поэтому невероятно популярны REST по HTTP!

Вышеприведенные концепции представляют определяющие характеристики REST и отличают архитектуру REST от других архитектур, таких как веб-сервисы. Полезно отметить, что служба REST является веб-службой, но веб-служба не обязательно является службой REST.

См. Этот пост в блоге о принципах дизайна REST для получения более подробной информации о REST и вышеуказанных принципах.


15

Это означает Передачу репрезентативного состояния и может означать много вещей, но обычно, когда вы говорите об API и приложениях, вы говорите о REST как о способе работы с веб-сервисами или о программах для общения через Интернет.

По сути, REST - это способ обмена данными между системами, и он делает многое из того, для чего был разработан SOAP RPC, но, хотя SOAP обычно устанавливает соединение, проверяет подлинность, а затем выполняет работу над этим соединением, REST работает почти так же, как работает в Интернете. , У вас есть URL, и когда вы запрашиваете этот URL, вы получаете что-то обратно. Это то, где вещи начинают сбиваться с толку, потому что люди описывают Интернет как самое большое REST-приложение, и хотя это технически правильно, это не помогает объяснить, что это такое.

Короче говоря, REST позволяет вам общаться между двумя приложениями через Интернет, используя инструменты, которые похожи на те, которые использует веб-браузер. Это намного проще, чем SOAP, и многое из того, что делает REST, говорит: «Эй, вещи не должны быть такими сложными».

Стоит прочтения:


REST - это архитектура, основанная на ограничениях, SOAP - это протокол, это совершенно разные вещи. Мне не нравится, когда люди говорят о SOAP и REST в одной и той же концепции, неудивительно, что люди путаются по этому поводу.
Андерс

@ Андерс. Он сказал, что смотрит на REST API и считает, что это способ использования веб-сервисов. Вы можете использовать REST таким образом, и в этом качестве он выполняет большую часть того, что выполняет SOAP. Можно также говорить о сети как о крупнейшем в мире RESTful-приложении, но это не совсем объясняет, для чего вы будете использовать REST API.
Марк

На самом деле это была моя главная проблема, когда я видел REST и SOAP в одной концепции. Похоже, API просто RESTful в дизайне.
Заключенный

4

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

Основная идея заключается в том, что вместо постоянного подключения к серверу вы делаете запрос, получаете некоторые данные, показываете их пользователю, но, возможно, не всем, а затем, когда пользователь делает что-то, что требует дополнительных данных, или чтобы передать некоторые данные на сервер, клиент инициирует изменение в новое состояние.


3
Может быть, это только я, но мне нравится видеть соответствующий ответ на stackoverflow вместе с соответствующей цитатой. Просто позабавьте меня и представьте, что Википедия испортилась. Что хорошего тогда делает твоя ссылка? :)
Поддельный код Обезьяны Рашид

1
@ Hack Saw: Разве это не должно быть в вашем ответе?
Поддельный код Обезьяны Рашид

Я только что заметил функцию редактирования. :)
Hack Saw

1
@karatedog: REST может быть достигнут с помощью HTTP, но это может быть сделано с помощью различных методов передачи данных.
Hack Saw

1
Это протокол HTTP, о котором вы пишете, REST - это архитектура.
каратэдог
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.