Отдых WCF - каковы лучшие практики? - PullRequest
3 голосов
/ 30 января 2012

Я только что начал свой первый проект отдыха WCF и хотел бы получить некоторую помощь о том, как лучше всего использовать REST.

Я видел несколько учебных пособий, и, кажется, есть несколько способов сделать что-то ... например, при выполнении POST, я видел несколько учебных пособий, которые устанавливают HttpStatusCodes (OK / Errors и т. Д.) И другие учебники, в которых они просто возвращают строки, содержащие результат операции.

В конце дня, есть 4 операции, и, безусловно, должно быть руководство, которое говорит, что если вы делаете GET, делаете это таким образом и т. Д. И с POST, делайте это ...

Любая помощь будет оценена.

JD

Ответы [ 3 ]

6 голосов
/ 30 января 2012

Существуют некоторые основные правила при использовании различных HTTP-глаголов из спецификации HTTP

GET: это чистая операция чтения.Вызов не должен вызывать изменение состояния в сервисе.Ответ на GET может быть доставлен из кэша (локального, прокси-сервера и т. Д.) В зависимости от заголовков кэширования

УДАЛИТЬ: используется для удаления ресурса

Иногда возникает некоторая путаница в отношении PUT и POST -какой следует использовать когда?Чтобы ответить, что вы должны рассмотреть идемпотентность - можно ли повторить операцию, не влияя на состояние услуги, - например, установка значения имени клиента на значение может повторяться несколько раз без дальнейшего изменения состояния;однако, если я увеличиваю баланс банка клиента, это нельзя безопасно повторить без дальнейшего изменения состояния службы.Первый называется идемпотентным, второй - не

PUT: не удаляются изменения состояния, которые являются идемпотентными

POST: не удаляются изменения состояния, которые не являются идемпотентными

REST включает в себя HTTP - поэтому о сбоях следует сообщать, используя коды состояния HTTP.200 для успеха, 201 для создания, и сервис должен возвратить URI для нового ресурса, используя заголовок HTTP-местоположения, 4xx - ошибки из-за характера клиентского запроса (поэтому клиент может исправить это, изменив то, что он делает),5xx - это ошибки сервера, которые могут быть разрешены только на стороне сервера

6 голосов
/ 30 января 2012

UPDDATE

Использование ASP.NET Web API.


ОК. Я оставил комментарий REST best practices: dont use WCF REST. Just avoid it like a plague и чувствую, что должен это объяснить.

Одним из фундаментальных недостатков WCF является то, что он касается только полезной нагрузки . Например, Foo и Bar - это полезные данные.

[OperationContract]
public Foo Do(Bar bar)
{
    ...
}

Это один из арендаторов WCF, так что независимо от того, что такое транспорт 1017 *, мы доставим вам полезную нагрузку .

Но то, что он игнорирует, это context/envelope вызова, который во многих случаях переносит специфический - так что большая часть контекста теряется. Фактически, сила HTTP заключается в его контексте, а не в полезной нагрузке, и в более ранних версиях WCF, не было никакого способа получить IP-адрес клиента в netTcpBinding, и команда WCF была непреклонна, что они не могут предоставить его. Я не могу найти страницу сейчас, но помню, что читал комментарии, и парни из MS просто сказали, что это не поддерживается.

Используя WCF REST, вы теряете гибкость HTTP в выражении себя ясно (и им пришлось планировать это позже) в терминах:

  • HTTP-код статуса
  • Типы носителей HTTP
  • ETag, ...

Новый веб-API Glenn Block работает для решения этой проблемы путем инкапсуляции полезной нагрузки в контексте:

public HttpResponse<Foo> Do(HttpRequest<Bar> bar) // PSEUDOCODE
{
    ...
}

Но для моего теста это не идеально, и я лично предпочитаю использовать фреймворки, такие как Nancy или даже простой ASP NET MVC, для предоставления веб-API.

0 голосов
/ 24 июля 2012

Здесь чего-то не хватает, что нужно сказать.

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

Протокол REST для полного раскатывания вручную может быть идеальным, но не всегда экономичным. В 90% моих проектов REST api - это запоздалая мысль. Wcf очень пригодится в этом отношении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...