Что отличает веб-сервис REST от RPC-подобного?
У меня есть веб-приложение, которое использует AJAX для захвата данных JSON с сервера. Это требует, чтобы пользователь впервые входил в систему со своим браузером, чтобы можно было установить cookie. Используются только глаголы GET
и POST
, где GET
предназначен для извлечения данных, а POST
- для любой операции, которая изменяет данные.
Из того, что я понимаю, REST отличается от вышеуказанного метода тем, что информация аутентификации пользователя отправляется с запросом каждый, а также используются теги PUT
и DELETE
.
Мой вопрос: какие преимущества имеет веб-служба REST по методу RPC-типа, если конечная точка предназначена только для браузера пользователя? Я могу понять, как REST выгоден, когда клиент неизвестен, но когда я использую только jQuery-вызовы ajax, преимущества по-прежнему стоят этого по методу RPC?
Ответы
Ответ 1
Одно из больших различий между REST и RPC заключается в том, что REST - это все ресурсы, а RPC - больше о действиях. Например, с помощью действительно сервиса RESTful вы никогда не назовете что-то вроде http://domain.com/service/User/jason/add или http://domain.com/service/User/addUser?username=jason. С помощью службы RESTful вы ссылаетесь только на ресурс в URL-адресе, а затем определяете, что делать с этим ресурсом, используя HTTP-глаголы и тело запроса. Таким образом, запрос GET на http:/domain.com/service/jason должен вернуть информацию о ресурсе (пользователь jason). Вы можете уточнить и сказать http://domain.com/service/user/jason, но результат должен быть таким же. Если вы добавляли пользователя с именем jason, вы использовали бы тот же самый URL http://domain.com/service/user/jason, но вы использовали бы глагол PUT и тело запроса будет содержать дополнительные данные. Чтобы удалить ресурс jason, вы также должны использовать тот же самый URL (http://domain.com/service/user/jason) и использовать DELETE-глагол. Для обновления вы будете использовать глагол POST.
REST отлично подходит для публичных API, которые вы намерены использовать для других разработчиков. Их можно сделать очень стандартными, чтобы они не нуждались в тонне существующих знаний об обслуживании. Нет вызовов WSDL и т.д. Из-за безгражданства он также может сделать их более стабильными во время частичных сбоев сети.
Из того, что вы описываете, я не думаю, что вам нужен действительно RESTful-сервис. Но, возможно, вы захотите рассмотреть, если вам понадобится более стандартный API. Я сделал службу REST для проекта, который я использую только для внутреннего использования, но это потому, что я намеревался получить доступ к этой службе, возможно, к десяткам других сервисов, а в будущем, возможно, от других разработчиков. Поэтому, хотя сначала я использовал его только для нескольких проектов, конечной цели требовался более стандартный интерфейс.
Ответ 2
Подумайте об этом так: это важная функция или информация, на которую воздействует?
Когда вы имеете дело с REST, вы делятся информацией о состоянии - вы смотрите, какая текущая информация (GET), или вы изменяете этот конкретный документ (POST, DELETE) или создаете новый документ (PUT).
С RPC, это о процедурах/функциях/методах/операциях... как вы их называете на своем языке. Информация - это просто то, что работает или возвращается из службы... но это может быть один из многих. Мы можем искать и возвращать список элементов. Или мы можем что-то обсуждать, где нам нужно какое-то взаимодействие взад и вперед. (Согласование REST по большей части обрабатывается через HTTP, поэтому вам нужно делать что-то с заголовком Accept и Accept-Language). Но это более важная операция.
Затем есть третий тип, который является документом/буквальным SOAP... где это сообщение важно, и вы должны угадать, какая функция, вызываемая, основана на сообщении. Если вы просто имеете дело с CRUD-операциями, это, вероятно, все в порядке. Преимущества в REST в этом случае состоят в том, что у вас все еще может быть WSDL, поэтому вы заранее знаете, что должны посылать необходимые элементы и что ожидать взамен.
Все они работают... в основном о том, как вы думаете о проблеме, и о том, как легко конвертировать из того, что вам уже нужно, чтобы разоблачить ее как API. Если вы начинаете с нуля, вы можете делать все, что захотите. Мне лично нравится SOAP (document/lit или RPC), в котором я могу предоставить файл WSDL, который кто-то может использовать для загрузки своего клиента. У меня были случаи, когда люди делали серьезные запросы в течение нескольких часов. (объяснение некоторых абстрактных тонкостей API, таких как разница между отправкой пустой строки по сравнению с нулевым, заняло некоторое время, но у меня были бы те же проблемы с REST)
Ответ 3
Лучше всего описывать REST для работы с ресурсами, где RPC больше относится к действиям.
REST
означает передачу государственного представительства. Это простой способ организовать взаимодействие между независимыми системами.
Приложения RESTful используют HTTP-запросы для публикации данных (создания и/или обновления), чтения данных (например, создания запросов) и удаления данных. Таким образом, REST использует HTTP для всех четырех операций CRUD (Create/Read/Update/Delete).
RPC:
RPC в основном используется для связи через разные модули для обслуживания пользовательских запросов.
например В openstack, например, как nova, glance и нейтроны работают вместе при загрузке виртуальной машины.
REST/RPC:
В качестве подхода к программированию REST представляет собой легкую альтернативу веб-службам и RPC.
Подобно веб-службам, служба REST:
- Независимо от платформы (вам все равно, является ли сервер Unix, клиент Mac или что-то еще),
- Не зависит от языка (С# может разговаривать с Java и т.д.),
- Стандартно (работает поверх HTTP) и
- Можно легко использовать в присутствии брандмауэров.
Ответ 4
Вы правы в том, что REST меньше связан с вызывающим объектом - если вы сравниваете с веб-службой SOAP, для которой требуется вызывать WSDL файл с сервера, чем да, веб-службы REST менее связаны (т.е. не требуют знание веб-сервиса до его вызова). И большую часть времени токен должен быть передан вместе с запросом на заданное "представление".
Я не думаю, что существует огромная выгода от использования REST из ajax, фактически, в зависимости от API, с которым вы имеете дело, вам может потребоваться токен, который передается как параметр URI (параметр querystring) при использовании Веб-сервис на основе SOAP, это необязательно. На самом деле довольно просто объединить веб-службы SOAP с аякс-звонками, передать ваши данные в формате JSON и десериализовать JSON в объект на стороне сервера. И в довершение всего, jQuery делает все это супер-легким.
Ответ 5
Ненавижу, чтобы разбить его всем вам.
RPC делает локальный вызов, который абстрагирует подстилающий пульт дистанционного управления
поведение. и угадай что? делать REST - это одно и то же.
аргумент о REST о ресурсах неверен, вы на самом деле
непосредственно вызывать действия.
Я утверждаю, что REST через HTTP с jsons является формой RPC.
другой популярный RPC может включать SOAP, например