29 сентября 2012 г.

Разработка REST сервиса при помощи WCF.


Всем привет! Сегодня мы поговорим о подходе для разработки сетевой архитектуры под названием REST и способах его реализации на платформе .NET при помощи Windows Communication Foundation.
Для начала, разберемся, что такое REST и с чем его едят. В основе архитектуры REST лежит 3 основополагающих принципа:
  1. Протокол передачи данных HTTP. Для обмена данными между клиентом и сервисом используются классические запросы с командами HTTP: GET, POST, PUT, DELETE (получение, добавление, обновление и удаление данных соответственно);
  2. Ресурсно-ориентированная архитектура. Взаимодействие с сервисом – это обмен данными между клиентом и определенным ресурсом, расположенным на сервисе. При этом каждый ресурс обладает уникальным адресом (URI). Не правда ли, очень похоже на схему функционирования сети Интернет в целом?
  3. Формат передаваемых данных: XML или JSON.
Для тех, кто знаком с принципами архитектуры классических WCF сервисов (SOAP), разницу с подходом REST можно описать следующей фразой: SOAP – это сервис с набором методов, а REST – это сервис с набором ресурсов.
Стоит отметить, что использование REST подхода очень распространено в современной Интернет среде. Практически все сервисы API крупнейших игроков Интернет индустрии построены именно на архитектуре REST (Bing, Facebook, Google, eBay, YouTube, Amazon и т.д.)
Такая популярность не случайна, REST предоставляет два больших преимущества своим пользователям:
  1. Кроссплатформенность. Поскольку в основе RESTа лежит протокол HTTP, не составляет ни малейших трудностей для реализации, как клиента, так и сервиса на любой из существующих платформ;
  2. Масштабируемость. Протокол HTTP не поддерживает передачу состояния. Говоря другими словами, каждый запрос по HTTP является автономным. Это позволяет с легкостью в любое время организовать горизонтальное масштабирование серверной части.
WCF, как одна из ведущих технологий для разработки сервисов, имеет специальные механизмы для разработки REST сервисов. Далее мы рассмотрим пример быстрой разработки REST сервиса при помощи WCF.
Не изменяя традициям WCF, для сервиса REST также необходим контракт операций. Давай определим этот интерфейс, исходя из следующего сценария: на сервисе хранится коллекция товаров, для которой необходимо предоставить базовые операции: получение, добавление и удаление товаров.
   1:      [ServiceContract]
   2:      public interface IGoodsOperations
   3:      {
   4:          [WebGet(UriTemplate = "/{id}")]
   5:          [OperationContract]
   6:          Good GetGoodById(string id);
   7:   
   8:          [WebInvoke(Method = "POST")]
   9:          [OperationContract]
  10:          Guid AddGoodToCollection(string title);
  11:   
  12:          [WebInvoke(Method = "PUT", BodyStyle = WebMessageBodyStyle.Wrapped)]
  13:          [OperationContract]
  14:          void UpdateGood(Guid id, string title);
  15:   
  16:          [WebInvoke(Method = "DELETE")]
  17:          [OperationContract]
  18:          void DeleteGood(Guid id);
  19:      }
Рассмотрим этот интерфейс подробнее. Как и в обычных сервисах WCF, интерфейс помечен атрибутом [ServiceContract], а его методы атрибутами [OperationContract].
Также можно заметить, что каждый метод помечен атрибутом [WebGet] или [WebInvoke]. Данные атрибуты являются одна из составляющих механизма REST в WCF.
Ранее упоминалось, что с REST сервисом можно работать посредством четырех базовых операций: GET, POST, PUT и DELETE. Атрибуты [WebGet] и [WebInvoke] указывают, с помощью какой операции будет доступен этот метод.
Для операции GET используется атрибут [WebGet]. Поскольку в этой операции данные передаются на сервер в строке запроса, необходимо указать такой параметр как UriTemplate – это текстовая константа, которая обозначает, каким образом параметры строки запроса будут мапиться на параметры метода. Стоит отметить, что параметры могут быть только строкового типа!
Для всех остальных операций кроме GET используется атрибут [WebInvoke]. У него есть параметр Method, где необходимо указать название операции (POST, PUT, DELETE). Почему-то этот параметр сделали строкой, а не перечислением.
Также, у обоих атрибутов есть такие параметры, как RequestFormat и ResponseFormat, которые определяют, в каком формате сервис будет принимать, и отдавать данные.
Приведем реализацию данного контракта (исключительно, как пример):
   1:      public class GoodsService : IGoodsOperations
   2:      {
   3:          private static Dictionary<Guid, Good> Collection;
   4:   
   5:          static GoodsService()
   6:          {
   7:              Collection = new Dictionary<Guid, Good>();
   8:          }
   9:          
  10:   
  11:          public Good GetGoodById(string id)
  12:          {
  13:              Guid goodId = Guid.Parse(id);
  14:              Good existGood;
  15:              if (Collection.TryGetValue(goodId, out existGood))
  16:              {
  17:                  return existGood;
  18:              }
  19:              else
  20:              {
  21:                  WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.NotFound;
  22:                  return null;
  23:              }
  24:   
  25:          }
  26:   
  27:          public Guid AddGoodToCollection(string title)
  28:          {
  29:              var id = Guid.NewGuid();
  30:              Collection.Add(id, new Good() { Id = id, Title = title });
  31:              
  32:              WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Created;
  33:              return id;
  34:          }
  35:   
  36:          public void UpdateGood(Guid id, string title)
  37:          {
  38:              Good existGood;
  39:              if (Collection.TryGetValue(id, out existGood))
  40:              {
  41:                  existGood.Title = title;
  42:              }
  43:              else
  44:              {
  45:                  WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.NotFound;
  46:              }
  47:          }
  48:   
  49:          public void DeleteGood(Guid id)
  50:          {
  51:              if (Collection.ContainsKey(id))
  52:              {
  53:                  Collection.Remove(id);
  54:              }
  55:              else
  56:              {
  57:                  WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.NotFound;
  58:              }
  59:          }
  60:      }
В данном коде необходимо обратить внимание на взаимодействие с WebOperationContext.Current – в этом классе находится контекст текущего запроса. (Аналог HttpContext.Current в ASP.NET) Здесь мы используем данный класс для установки кода ответа сервиса, в зависимости от результатов выполнения логики метода.
В одной из следующих статьей мы рассмотрим, какими способами можно организовать хостинг REST сервиса.

8 комментариев:

  1. Я хочу поделиться свидетельством о том, как г-н Бенджамин помог мне с займом в 2 000 000,00 долларов США для финансирования моего проекта фермы по выращиванию марихуаны, я очень благодарен и пообещал поделиться этой законной финансирующей компанией с любым, кто ищет способ расширить свой бизнес-проект. .финансирующая компания. Любой, кто ищет финансовую поддержку, должен связаться с ними по адресу lfdsloans@outlook.com. Г-н Бенджамин также работает в WhatsApp + 1-989-394-3740, чтобы облегчить задачу любому заявителю.

    ОтветитьУдалить
  2. VarangaOfficial - варанга это - только достоверные и проверенные факты. Воспользовавшись нашим ресурсом, вы сможете узнать исчерпывающую информацию касающуюся представленного средства. Лично увидеть данные о проведенных клинических исследований, прочесть реальные отзывы пациентов и медицинского персонала. Изучить инструкцию по применению, прочитать об особенностях и методах работы мази, уяснить, почему крем Варанга настолько эффективен, где можно купить оригинальный сертифицированный препарат и, как не нарваться на фальсифицированный продукт. Мы очень тщательно и скурпулезно проверяем публикуемые данные. Предоставляем посетителям нашего онлайн-ресурса сведения, которые были взяты только из подлинных источников. Если вы нашли у себя признаки развития грибка или же долго и безрезультатно стараетесь излечиться от этого коварного недуга, на нашем сайте вы отыщете простой и быстрый способ устранения проблемы. Приобщайтесь и живите полноценной, здоровой жизнью. Благодаря нам, все ответы на самые волнующие вопросы, теперь собраны в одном месте на удобной в использовании и высоко информационном ресурсе.

    ОтветитьУдалить
  3. Записи секс-чата зрелый опытный педик засадил член своего сына в жопу по самые яйца. Раскрасневшаяся белая девушка облизывает свою вагину. Русская киска, пойманная на минете на свежем воздухе, ласкает глазами белый столб. Горячий домашний туз среди вас. Секс в машине такси в мире толстой свиньи. Страстный минет между несколькими жопами, в ритме движения. Сонмы юных ласк. Молоденькая русская секс красотка трахает анус своего парня в автобусе. Молодая русская девушка расстегивает брюки и садится на переднее сиденье такси. Груди русской девушки намокли в машине, и в них течет сперма. Парикмахерша укладывает волосы русской девушки, приседает на корточки и проводит пальцами по губам. Молоденькая русская проститутка изучает анальные фекалии. Поскольку вы выбрали эту короткую статью, ну, и хотели бы получить работу по деталям, касающимся чат зрелые I, я прошу всех пользователей посетить этот личный портал.

    ОтветитьУдалить
  4. Экспресс-кредит на банковскую карту - это услуга ifc, которая позволяет брать деньги в долг с помощью открытой системы и с небольшим количеством документов. Процедура предоставления происходит виртуально. Кредиторы работают в режиме 24-7. Заполнив заявку, гражданин может мгновенно заказать скромную сумму денег. Утверждение запроса редко занимает более четверти часа. Ставка по кредиту не считается в течение нескольких месяцев, находясь в ежедневном распоряжении деньгами. У нашей компании есть банки.Ru вы можете найти множество мфо, которые ведут свою собственную работу в соответствии с законодательством российской федерации и предоставляют услуги широкому кругу посетителей. Если у заявителя плохая кредитная история, он может оперативно и при отсутствии отказа запросить необходимую сумму. В то же время несколько вовремя погашенных кредитов смогут помочь укрепить финансовую вершину, и тогда можно будет попытаться перейти на более высокие продукты. Для того, чтобы получить кредит на карту в белгороде, необходимо выполнить следующие простые действия: 1. Найдите идеальные условия среди представленных banki.Ru. 2. Выпишите анкету. 3. Свяжите карту. 4. Дождитесь подтверждения. Если клиент понимает, что он не погасит долг вовремя, нет необходимости беспокоиться о кредиторе. Возникновение задержки приводит к начислению серьезных штрафов, поэтому в случае возникновения проблем лучше сначала сделать шаг в сторону. Скорее всего, в целом микрофинансовая организация предложит воспользоваться опцией "заморозки" или отложить выдачу кредита на неопределенный срок, чтобы успеть справиться с непредвиденными обстоятельствами. Кредитная карта - это наиболее удобное устройство для покупки заемных средств. Каждый кредитор организует процедуру отправки заявки по-разному и дальнейшего оформления кредита, но этапы универсальны и применимы абсолютно ко всем фирмам. Заявитель, который хочет принять Рейтинг МФО Для счета в белгороде, но не учитывающего другие финансовые ситуации, необходимо учитывать единственное условие - пластик должен быть просто зарегистрирован на наше имя. Мало кто будет переводить деньги на внешний счет. Инструмент может быть как дебетовым, так и кредитным. Подойдет любой тип карты: пенсионная, студенческая, зарплатная, личная. Банковские системы - visa и mastercard.

    ОтветитьУдалить
  5. Продвижение в настоящее время приобретает все более молниеносные обороты. Следует отметить, что порно зайка сопровождает повсюду, с этого момента в ней не всегда концентрируется максимальный профессионализм. Для установки продвижения используются различные элементы, например, стенды, рекламные щиты, витрины, рулонные стенды, но и многое другое. Рулонные стенды - это мобильные устройства, которые пользуются более серьезным спросом из-за комфорта и простоты размещения. Кроме того, следует напомнить, что на таком стенде естественно, что любой современный блок сам по себе по праву является рекламным носителем, другими словами, весь стенд - это простейшая реклама. Такого рода модели чаще всего используются, когда: - Автомобильные выставки, - релизы, - рекламные акции, - производственные торжества в случае td. Купить ролл-ап можно на любой профильной фирме, которая специализируется на реализации того, что есть с производством и продажей оборудования. Чары. Обычные варианты этого стенда, несомненно, считаются использованием внимания для вашей целевой группы. Всегда в соответствии с предпочтительными размерами, которые вам необходимо ввести: - Нормальные цены, - эффективность, следует отметить, что это оборудование может решить любую проблему маркетинга без особых усилий, - пропускная способность, в случае, если такие сети переполнены, конечно, пленки не всегда доставляют трудности при транспортировке в случае длительного хранения, - элементарны в эксплуатации, - простота в массе, - в кратчайшие сроки делается и тоже продумывается. Само устройство простое, а также включает в себя определенное количество значимых компонентов, для которых необходимо ввести: - Опора, - корпус, - материал платформы, - чехол для транспортировки. Исходя из функциональных целей, они будут выпускаться разных типов, размеров в течение длительного времени, в случае жанров. Дополнительным преимуществом подобной сети является возможность проведения быстрых выходов рисунков в canvas, что в то же время дает возможность использовать пул несколько раз подряд для экономии бюджета обычной кампании. Без помощи другой соответствующей роликовой машины баннер может очень быстро скручиваться в середине фактического основания. В нынешних реалиях в сфере торговли существует несколько видов свертывания - Та же установка, - 2-сторонний тип, - системы с каплевидными вставками. Обычные конфигурации, отличаются простотой исполнения и скромной ценой. Они считаются наиболее распространенными роликовыми техниками уже давно, очень давно, и используются очень часто. В случае, если вам понравилась эта короткая статья и вы хотели бы найти данные по печать баннера цена Обильно посещает сайт.

    ОтветитьУдалить
  6. Стоимость услуг у столичных шлюшек ориентируется почаще всего по медли (за час, ночь). Кроме как, учитываются просьбы клиента - какие именно виды секса он желает получить, чем больше эксклюзивный нрав носит сервис недорогие элитные проститутки индивидуалки, тем стоимость девочки дороже. За неординарные предложения потребуется заплатить больше, впрочем симпатичным самцам, каким, бесспорно, считаешься и ты, девченки могут исключение.

    ОтветитьУдалить
  7. Бездепозитные призы – это исключительно занимательная и наиболее многообещающая акция интернет-казино. Они числе какого-либо фри-спинов бездепозитные бонусы за регистрацию рублей, поэтому что выплаты в бесплатных вращениях не гарантированы, как композиции на барабанах игрового аппарата шансы не сложиться.

    ОтветитьУдалить
  8. Используйте мультитематические площадки. Крупные площадки имеют внушительный вес покупка ссылок для продвижения сайта, часть из которого перейдет странице. Проблема в чересчур высочайшей цены на множества этих ресурсах, но в издержки очень окупятся подъемом в поисковой выдаче.

    ОтветитьУдалить