Веб-службы RESTful

Я новичок в веб-сервисах RESTful. Мы берем маршрут REST для создания наших общедоступных веб-сервисов, которые будут потребляться клиентами. И у меня было несколько вопросов.

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

Я думаю об использовании SSL + Hash Message Authentication Code (HMAC) в заголовке авторизации для обеспечения безопасности и фильтрации на основе IP. что вы, ребята, думаете об этом?

Есть ли хорошие инструменты для клиентской стороны для тестирования? В настоящее время я использую следующие http://code.google.com/p/rest-client/

А как насчет какого-то инструмента генерации кода на стороне клиента?

Следующие ссылки являются источником информации.

http://msdn.microsoft.com/en-us/library/dd203052.aspx

http://blogs.msdn.com/b/endpoint/archive/2010/01/07/getting-started-with-wcf-webhttp-services-in-net-4.aspx

Ответ 1

Это хорошая отправная точка WCF REST WebService:

Конечные точки REST/SOAP для службы WCF

(BTW: У Stackoverflow есть хорошие URL-адреса REST). Вы можете протестировать службу REST только с помощью веб-браузера (перейдите к URL-адресу и получите XML или JSON). Fiddler - также хороший инструмент, и FireBug-плагин для FireFox. Я обычно делаю тонкий проект сервисного интерфейса и отдельный (проверенный модулем) логический проект.

Для аутентификации я сначала создаю Guid и временную метку. Затем на основе этих хешей (.NET поддерживает SHA256 и SHA512). Руководство может быть сохранено на сервере (таблица базы данных) для сопоставления его конкретным числовым идентификатором. Тогда вы можете иметь ссылку для отдыха:

/myobject/1?timestamp=20100802201000&hash=4DR7HGJPRE54Y 

и просто отключите проверку хэша и отметки времени в среде разработки (например, с помощью АОП). С отметкой времени я проверил бы, что штамп находится между 15 минутами назад и вперед во времени (= должно быть достаточно для предотвращения атак).

Будет ли ваша услуга видна публике/интернету и является ли ваш клиент jQuery или Silverlight -client? Тогда у вас все еще есть проблема: вы не хотите включать секретный ключ в код программного обеспечения клиента.

Итак, вам нужно создать хэш на сервере и какой-то куки файл для хранения клиентского сеанса. (Это можно сделать, например, с помощью отдельной страницы входа/приложения в папку с другим конфигурационным файлом.) Я помню, что эта книга есть что-то по теме:

Если вы хотите включить HttpContext при использовании WCF, вам нужно установить <serviceHostingEnvironment aspNetCompatibilityEnabled="true"> под <system.serviceModel>. Затем вы можете проверить текущий идентификатор пользователя с HttpContext.Current.User.Identity.Name.

Однако, если вы хотите сделать чистую услугу REST, вы не используете файлы cookie, а базовую аутентификацию HTTP в сочетании с SSL/TLS для каждого вызова.

Я думаю, что легко сделать клиента с помощью только LINQ2Xml или jQuery, поэтому создание клиента не требуется.

Или вы также можете использовать оба интерфейса SOAP и REST и использовать служебную ссылку для создания клиента.

Ответ 2

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

REST
+ Легкие сообщения, очень небольшие накладные расходы (кроме самого XML)
+ Легко читаемые результаты, можно легко протестировать с помощью веб-браузера
+ Простота внедрения
- Интерфейс Looser, проверка свободного типа

SOAP
+ Более жесткий, со строгим определением контракта
+ Имеется множество доступных инструментов для разработки.

Просматривая документацию MSDN WCF, поддержка WCF SOAP была интегрирована с самого начала, а поддержка REST - это недавно добавленная функция. Мне самому трудно найти документацию для аутентификации/безопасности для служб REST, так как большая часть документации направлена ​​на SOAP.

Инструменты генерации клиентской стороны: я не встречал никаких сервисов REST, поскольку REST не определяет контракт на обслуживание, поскольку SOAP делает. WADL - это попытка сделать это для служб REST. http://en.wikipedia.org/wiki/Web_Application_Description_Language http://wadl.codeplex.com/

Мне интересно читать больше ответов, касающихся аутентификации и безопасности, поскольку я сам это изучаю.

Ответ 3

Следует иметь в виду, что вы можете использовать REST как философию (все должно быть доступно по чистому URL-адресу, без скрытых строк) или как догма (вы должны использовать PUT и DELETE, даже если это означает, что много трудностей по линии).

Акцент делается на упрощении - например, на простых типах данных для параметров, а не на накопленных нагромождениях, а также на интерфейсе clobeing для лишних причин (например, при буксировке гигантской страницы "название" в URL-адресе), не используя заголовки, которые не известны, и -факторный стандарт.

Таким образом, вы можете идеально конструировать интерфейс RESTful, используя только GET и сохраняя удобство использования и возможности тестирования веб-браузеров. Вы также можете использовать любые стандартные методы проверки подлинности или несколько из них для избыточности в зависимости от вашей целевой аудитории. Если вы создаете приложение для запуска на корпоративном компьютере со стандартными учетными данными и токенами, вы можете продолжить его использовать. Если вы делаете что-то для очень общего доступа, вы можете использовать комбинацию GET-аргументов и/или куки файлов, чтобы ваши URL-адреса были чистыми для 99,99% пользователей.

Вы даже можете обслуживать как JSON, так и XML (например, карты Google) и по-прежнему быть RESTfull, но вы не можете выполнять полномасштабные SOAP (сложные типы ввода и т.д.). Вы можете делать ограниченные SOAP - простые типы запросов, всегда выражаемые как аргументы GET, люди все еще получают WSDL для документации.

Надеюсь, что это красит достаточно гибкую картину - способ мышления над любой строгой догмой.