2009-07-08 6 views
34

Я строю свой собственный сайт Ajax, и я размышляю между REST и RPC.ОТДЫХ против RPC в PHP

Если мой сервер поддерживает сервлеты, я просто установил persevere и устранил проблему, но мой сервер не поддерживает сервлеты.

RPC проще кода (IMO) и может быть легко написан на PHP. Все, что мне нужно, это исполняемый файл запроса к базе данных. Я использую Dojo Toolkit и JSON.

Почему я должен выбрать REST для RPC или RPC через REST?

+1

не может понять, почему StackOverflow массово закрытия QA-х, которые имели большое влияние. – minghua

ответ

21

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

REST является идея наличия ресурсов обратилась с глобальным идентификатором (в URI в случае HTTP), к которым обращаются в CRUD способом (с использованием POST, GET, PUT и DELETE в случае HTTP ... ну, по крайней мере, это идея) ...

RPC идея, где вы вызываете процедуру на другой машине, передавая некоторые параметры и принимаете возвращаемое значение ...

There is a nice short comparison on Wikipedia

Persevere создает сервис, который позволяет одновременно (в очень элегантно, по общему признанию) ... это RESTful (хотя не только использовать HTTP-функции для достижения этой цели) и предоставляет интерфейс RPC ...

В конце вы должны посмотреть, что нужно сделать вашему приложению ... как и большинство людей, вы, вероятно, закончите с API RPC (будь то на основе XML или JSON или что-то еще) который включает транспортный уровень для частично подсистемы RESTful ... это потому, что наличие RESTfulnes означает гибкость ... если клиент может более или менее свободно перемещать данные на сервере (через набор простых CRUD me thods), это не зависит от ограниченного (проблемного) набора методов, открытых через API, и вы можете смещать логику на клиентские ...

+25

REST не имеет ничего общего с CRUD. – aehlke

+8

Можно простить за размышление о REST с точки зрения CRUD. Это распространенное недоразумение. Вот объяснение: «... путем сброса отображения CRUD (Create, Retrieve, Update, Delete) из GPPD (GET, POST, PUT, DELETE) вы можете использовать REST так, как предполагалось, чтобы он использовался. с помощью POST для удаления, обновления или создания ресурсов, если вы используете POSTing для правильного ресурса ». - от http://blog.jonnay.net/archives/642-REST-!-CRUD!.html –

+0

Ваша ссылка содержит недоразумения REST, к сожалению, которое передает сообщение. Если вы хотите удалить ресурсы, вы не укажете идентификаторы - вы должны указать URI ресурсов, которые нужно удалить. – aehlke

55

Лучший способ понять это - прочитать диссертацию Роя Т. Филдинга на нем или соответствующие статьи на его blog, где он обсуждает различия между чистой REST и просто архитектурой RPC.

Другое дело, что статья Википедии о REST находится в ужасном состоянии, и сам Филдинг, «изобретатель» REST, предполагает, что статья неточна.

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

Большая проблема с популярными реализациями RPC, такими как SOAP или XML-RPC, заключается в том, что они используют HTTP под собственной собственной архитектурой, а не используют все различные свойства HTTP, такие как PUT, GET, DELETE и т. Д. Кроме того, традиционный веб-стек - сервер кэша посередине не работает, например, не зная о значении содержимого вызова RPC.

Это неполное введение в REST и RPC, но я думаю, что я выделил некоторые важные моменты, которые часто упускаются. Будьте осторожны, так как в REST есть много неправильной информации.

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

+0

Контроллер Hypermedia значительно помог в обнаружении услуг отдыха. – Amir

+6

Хотите отметить, что то, что вы называете «большой проблемой с популярным RPC», также может быть большим преимуществом, в зависимости от ваших целей. Если вы полагаетесь на глаголы действия HTTP, вы теперь привязаны к HTTP. Во многих системных архитектурах может быть желательным совершать вызовы RPC по множеству различных механизмов транспорта (HTTP, сокеты, очереди сообщений и т. Д.).Часто наш выбор HTTP имеет больше общего с его вездесущность, чем на самом деле являющийся идеальным транспортным протоколом (см. Множество решений для браузера для туннелирования через HTTP, например BOSH). Есть только много компромиссов для рассмотрения. – DougW

+0

@DougW, совершенно правда. Есть способы использовать REST без HTTP, но я не знаю об агностике REST. – aehlke

5

Есть три различных стиля услуг:

  • RPC API - клиент отправляет процедуры и параметры обслуживания и служба несет ответственность за выполнение команды и возвращает результат.
  • Message API (Document API) - клиент отправляет DOM (элементы), которые обычно являются более сложными структурами, чем вызовы API RPC, потому что они, как правило, не подразумевают операции напрямую.
  • Resource API - используется для доступа к ресурсам (кортежи баз данных, файлы, изображения и т. Д.). В общем случае он также должен обеспечить хорошее согласование типа носителя.

SOAP и REST являются компиляцией стандартов от W3C, а основное отличие состоит в том, что SOAP использует HTTP, SMTP и т.д. в качестве транспортных протоколов и REST использует его в качестве протокола приложения, AKA он должен поддерживать (GET, PUT, PUSH, DELETE и POST). SOAP также подразумевает, что использование XML и REST может использовать любой тип данных (JSON, XML, HTTP и т. Д.). Кроме того, одним из основных преимуществ SOAP является дескриптор службы (WSDL-файл), который дает возможность автогенерации Service Connector (прокси) для клиента.

Нет silver bullet; тип и архитектура веб-службы зависят от реальных требований клиента и технологии.

Для общей идеи по этому вопросу, увидеть один из подписных книг Мартина Фаулера - Service Design Patterns

+0

Вы можете документировать услуги REST с использованием WSDL 2.0 или WADL http://rest.elkstein.org/2008/02/documenting-rest-services-wsdl-and-wadl.html – icc97

Смежные вопросы