Веб-службы 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 для документации.
Надеюсь, что это красит достаточно гибкую картину - способ мышления над любой строгой догмой.