Какие рамки использовать для RESTful Services в .net - PullRequest
22 голосов
/ 08 июля 2011

Я знаю, что подобные вопросы задавались, но большинство из них устарели.Итак, снова поехали :).Мне нужно реализовать полный уровень сервиса REST для нашего приложения.Проблема, которая у меня есть, состоит в том, какие рамки лучше всего решить эту проблему.Мне просто нужна хорошая структура, которая позволяет мне сосредоточиться на проблеме, а не на REST или чем-то еще, что требуется.Аутентификация является обязательной функцией.Вот некоторые из моих идей;как вы думаете?

  • WCF: На мой взгляд, это перегруженная среда, которая усложняет задачу.
  • ServiceStack: кажется хорошей, легкой альтернативой с открытым исходным кодом.Но что, если они решили остановить разработку?
  • Пользовательская реализация, использующая asp.net mvc, например this , но зачем изобретать велосипед?

Ответы [ 5 ]

22 голосов
/ 06 ноября 2011

В последнее время я сам играл с Нэнси , и я также рассматриваю Манос де Моно .Вот пример с домашней страницы Нэнси.

public class HelloModule : NancyModule
{
    public HelloModule()
    {
        Get["/"] = parameters => "Hello World";
    }
}
22 голосов
/ 11 июля 2011

Первоначально я запустил ServiceStack из-за неэффективности (разработки и времени выполнения) и трения, налагаемого при создании веб-сервисов с альтернативными платформами .NET.

В 3-4 раза быстрее сериализация Json, чем в MVC

ServiceStack имеет высокую производительность фокуса, поскольку мы считаем, что обеспечивает лучший конечный пользователь UX , поэтому он встроен в сильный набор поставщиков кэширования , включая самый быстрый сериализатор JSON для .NET - в 3-4 раза быстрее , чем сериализаторы, поставляемые с .NET и MVC (его JavaScriptSerializer по умолчанию является самым медленным в .NET).Для максимальной производительности не используются отражения во время выполнения или регулярные выражения.Он использует интеллектуальное нелинейное сопоставление маршрутов, и вам рекомендуется использовать гораздо более быстрые встроенные поставщики кэширования, чтобы обойти низкую производительность сеанса ASP.NET .

, ориентированного на типизированныйитеративная разработка в первую очередь кода

ServiceStack позволяет разрабатывать строго типизированные веб-службы, способствующие внедрению передового опыта, используя минимальный объем кода и автоматически без any code-gen, config, pre / post-шаги сборки и т. Д.

Пример простого Hello World сервиса:

public class Hello { public string Name { get; set; } }
public class HelloResponse { public string Result { get; set; } }

public class HelloService : IService 
{
    public object Get(Hello request) 
    {
        return new HelloResponse { Result = "Hello, " + request.Name };
    }
}

С помощью всегоЭти классы, все ваши веб-сервисы автоматически становятся доступными в различных форматах (JSON, XML, JSV, CSV, SOAP), все из готовых с нулевым усилием .

Пример API-интерфейса строго типизированного клиента с использованием C #:

var client = new JsonServiceClient("http://localhost/Service");
var response = client.Send<HelloResponse>(new Hello { Name = "World!" });

Пример JavaScript с использованием jQuery:

$.getJSON("http://localhost/Service/hello/World!", function(r) {
    console.log(r.Result);
});

Удобство разработки

Поскольку визуализация веб-сервисовважно при итеративной разработке веб-сервисов. Тип контента по умолчанию при просмотре веб-сервисов в браузере - это удобный для пользователя формат JSON HTML5 Report (также доступен отдельно в http://ajaxstack.com/jsonreport/), что позволяет вамдля визуализации реакции ваших веб-сервисов с одного взгляда.

Вы также получаете автоматически сгенерированную страницу метаданных (которую вы можете аннотировать с помощью собственного описания), которая служит отличным способомдокументируйте API своего веб-сервиса.

Но что, если они решат прекратить разработку

Как создатель ServiceStack, я не вижу, чтобы я отказался от разработки в обозримом будущем.Я строю системы с ним ежедневно, потому что считаю, что это более чистая, быстрая и более производительная среда для разработки.

Предлагает лучшие практики

Существует очень мало каркасов веб-служб .NET, которые поддерживают основанную на DTO архитектуру , основанную на первых сообщениях, позволяющую шаблон интерфейса службы - Aлучшие практики веб-сервисов, обычно встречающиеся в экосистеме Java, упрощающие разработку полно-пакетных веб-сервисов на основе SOA с крупнозернистой структурой.

Существует 0 риск , от него отказываются в пользуеще одна платформа .NET для веб-служб.Просто потому, что мы не верим, что какая-либо другая платформа .NET активно продвигает передовые практики веб-сервисов (например, шаблоны DTO / Remote Façade и Service Interface) и уделяет основное внимание производительности.

Но даже в этом случае с открытым исходным кодомПроект с почти 20 участниками, этот страх смягчается.Сколько проприетарных платформ с закрытым исходным кодом отказались от MS и заставили всех перейти к преемнику?Программное обеспечение с открытым исходным кодом развивается, оно не заброшено и не переписано.

Весь исходный код для ServiceStack находится под http://github.com/ServiceStack без блокировки, а GitHub позволяет любому легко раскошелиться ипродолжить развитие, как многие уже сделали.

Работает везде

Наконец, ServiceStack может работать на любом хосте ASP.NET в IIS 6/7 в Windows или Linux / OSX с использованием Mono. Он также поддерживает автономный хост HttpListener, позволяющий запускать его без веб-сервера, т. Е. Встроенного в любое приложение консоли или Windows, внутри службы Windows и даже размещенного в приложении MonoTouch для iPhone .

7 голосов
/ 08 июля 2011

Для меня самым простым и чистым решением было бы реализовать службы в качестве контроллеров в ASP.NET MVC3 с методами, возвращающими JsonResult.

Преимущества:

  • Каркас MVC делает тяжелую работу за вас

  • Вы можете выполнить проверку модели, используя атрибуты вместо кода

  • Развертывание XCopy для любой версии IIS

3 голосов
/ 08 июля 2011

Если бы я начинал это сегодня, я бы выбрал из вашего третьего варианта что-то пользовательское в ASP.NET MVC3 или одну из нижеприведенных платформ.

1 голос
/ 07 ноября 2011

Решение Thje Shoulders Of Giants теперь доступно через CodePlex и NuGet ..., переименованные в Resources Over MVC.

...