Подтвердить что ты не робот

Какие рамки использовать для RESTful Services в .net

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

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

Ответ 1

Я изначально начал ServiceStack из-за неэффективности (разработки и времени выполнения) и трений, возникающих при создании веб-сервисов с использованием альтернативных .NET-фреймворков.

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

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

Ориентация на типизированную, итеративную, кодовую разработку

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

Пример простой службы 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 с помощью С#:

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);
});

Разработка дружественных

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

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

Но что, если они решили остановиться Развитие

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

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

Существует очень немного инфраструктур веб-служб .NET, которые рекламируют DTO-первую основанную на сообщениях архитектуру, позволяющую Шаблон интерфейса службы - Лучшая практика веб-сервисов, обычно встречающаяся в экосистеме 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 и даже размещен внутри приложения iPhone MonoTouch.

Ответ 2

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

public class HelloModule : NancyModule
{
    public HelloModule()
    {
        Get["/"] = parameters => "Hello World";
    }
}

Ответ 3

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

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

  • Структура MVC делает тяжелый подъем для вас

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

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

Ответ 4

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

Ответ 5

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