dell - servicestack que es




ServiceStack vs ASP.Net Web API (3)

Quiero escribir una nueva API de estilo REST y he buscado en ServiceStack y me gusta bastante. Sin embargo, he visto que Microsoft ha lanzado el proyecto de API Web ASP.Net como parte de la nueva versión beta de MVC 4. ¿Alguien ha visto el nuevo proyecto de API web? ¿Puedes dar alguna ventaja / inconveniente de cada sistema?


Como cliente de ServiceStack aquí es el profesional de ServiceStack más importante para mí.

https://github.com/ServiceStack/Issues/issues/606

Asi que. Error encontrado, error identificado, error corregido. Mismo día. ¡Apoyo extraordinario!


Hay una nueva diferencia principal que debe tenerse en cuenta: ServiceStack ya no es de uso gratuito a partir de v4. Ya que hay una respuesta bastante definitiva en los profesionales de SS, quería lanzar un par de API web

API web

Pro:

  1. De uso gratuito en su proyecto (siempre que tenga una licencia de VS que permita el uso comercial)
  2. Un nivel extraordinariamente alto de soporte gratuito disponible de Microsoft y de toda la web, incluido aquí en .com.
  3. Se integra rápidamente con otras pilas de tecnología de Microsoft como ASP.NET MVC, que es extremadamente popular en las tiendas de Microsoft
  4. Soporte integrado para autenticación y autorización RESTful en su pila de Microsoft

Contras :

  1. No soporta SOAP

Beneficios Auxiliares

(Por favor, siéntase libre de dejar los comentarios a continuación, agregando a por qué Web API tiene beneficios o tiene ventajas y desventajas que puedo agregar)


Tienen casos de uso muy similares, como mantenedor principal del proyecto ServiceStack. Tengo una buena visión de las ventajas de ServiceStack y los muchos beneficios naturales de su diseño basado en mensajes .

ServiceStack ha existido desde 2008 como un proyecto ejecutado por OSS desde su inicio con el único objetivo de promover el diseño y la implementación correctos de servicios remotos libres de fricción.

Diseño simple y elegante

En su búsqueda de la máxima simplicidad, se basa en un núcleo simple y elegante , con la mayoría de sus características naturalmente vinculantes a sus modelos , no a sus controladores, que es lo que MVC, WebApi hace (así como a cualquier otro Marco de Servicios Web que Microsoft ha producido ).

La adopción de un diseño basado en mensajes ofrece un enfoque superior para los servicios remotos, ya que promueven servicios más extensibles y menos frágiles, simplifica el acceso y los patrones de llamadas, y contiene muchos otros beneficios naturales que obtiene de forma gratuita .

Como misión principal, luchamos contra la complejidad en cada etapa, con el objetivo de mantener una API invisible y no intrusiva y evitar la introducción de nuevos conceptos o construcciones artificiales que no sean familiares para los desarrolladores de servicios web o .NET en la actualidad.

Como ejemplo, la implementación del servicio IService<T> es solo una clase estándar de C # con dependencias de cableado automático. Los envoltorios delgados y ligeros se utilizan para proporcionar una API coherente y unificada en torno a los tipos principales de tiempo de IHttpRequest e IHttpResponse . También permiten el acceso a las clases subyacentes de Solicitud y Respuesta de ASP.NET o HttpListener para que nunca estés restringido cuando usas ServiceStack.

En contraste con WCF y WebApi.

Aquí hay una breve descripción de los estilos de API contrastantes que promueven ServiceStack y WCF . WebApi es diferente de WCF en que fomenta el diseño de API REST-ful. En cuanto a los ejemplos entre los 2, este es el único ejemplo conocido que tengo con el mismo servicio escrito tanto en ServiceStack como en WebApi .

Mejores prácticas de servicios remotos

ServiceStack se centra principalmente en la simplicidad, el rendimiento y en la promoción de las mejores prácticas de servicios remotos / web centrados en abarcar los patrones de diseño del servicio remoto de Martin Fowlers en C # tan idiomático como sea posible:

  • El patrón de fachada : lo que sugiere el uso de interfaces discontinuas y de grano grueso cada vez que se comunica a través de los límites del proceso.

  • El patrón DTO ( MSDN ): dicta el uso de POCO de propósito especial para generar el formato de conexión de las respuestas de sus servicios web.

  • El patrón de la puerta de enlace ( MSDN ) para encapsular las comunicaciones de su cliente y servidor entre los modelos de la puerta de enlace / DTO del cliente y los niveles de la interfaz de servicio.

Estos patrones aseguran una separación limpia de preocupaciones y una experiencia de desarrollo iterativo sin fricción.

Potenciar tus servicios.

Un servicio web de ServiceStack en su centro se centra en una interfaz de C # IService<T> libre de dependencias y con cableado automático que le brinda total libertad para definir su contrato de servicio web con sus propios DTO de solicitud y respuesta usando POCOs limpios - lo que hace que la API de ServiceStack prácticamente invisible y no invasivo, es decir, es trivial extraer su lógica de servicios de C # y ejecutarla fuera de un host de ServiceStack.

Esta idea es un buen ejemplo de lo que se obtiene con solo 1 clase C # .cs en ServiceStack :

  • Páginas de metadatos para todos los formatos registrados.
    • Con enlaces a WSDLs, XSDs y ejemplos de clientes C #
  • Vista de informe HTML amigable para los humanos
    • Una única instantánea de la página html autocontenida (es decir, sin referencias externas). Incluye respuesta de servicio web JSON incorporada: permite el acceso programático a las instantáneas de datos.
  • Mini Profiler incorporado (puerto del excelente MVC Mini Profiler )
    • Incluye perfiles Sql
  • Puntos finales JSON / JSONP, XML, JSV, CSV y SOAP

Las clases RestServiceBase y ServiceBase están diseñadas para alojar su lógica personalizada de C # para la máxima reutilización posible, por ejemplo, su primer diseño DTO permite de forma trivial la ejecución aplazada y con proxy donde su mismo servicio de C # también se puede alojar y ejecutar en un host MQ que es lo que sucede cuando registra un IMessageService como el host RedisMQ y llama a su servicio a través del /asynconeway final /asynconeway (es decir, client.SendOneWay() en C # Clients)

También puede delegar y crear fácilmente servicios compuestos utilizando el base.ResolveService<T>() que devuelve una instancia de conexión automática del servicio seleccionado como se ve en el ejemplo del Servicio de Detalles del Cliente de Nortwind :

var ordersService = base.ResolveService<OrdersService>();
var ordersResponse = (OrdersResponse)ordersService.Get(
    new Orders { CustomerId = customer.Id });

Devuelve objetos C # planos

En su mayor parte, ServiceStack serializará la mayoría de los objetos de C # como se esperaba. Aquí hay una lista de posibles tipos de devolución ( de esta respuesta ):

  • Cualquier objeto DTO -> serializado a Response ContentType
  • HttpResult, HttpError, CompressedResult (IHttpResult) para respuesta HTTP personalizada

Los siguientes tipos no se convierten y se escriben directamente en el flujo de respuesta:

  • Cuerda
  • Corriente
  • IStreamWriter
  • byte [] - con el tipo de contenido application / octet-stream.

Este ejemplo de CORS puede ver un ejemplo de la compatibilidad con los encabezados HTTP personalizados, donde puede configurar los encabezados HTTP de forma global o por servicio.

Soporte HTML

Hay varias opciones para devolver HTML en ServiceStack que se explican en detalle aquí .

Incluye texto más rápido y serializadores binarios para .NET

Los serializadores resistentes y rápidos son de primordial importancia en una API para garantizar tiempos de respuesta rápidos y una API con capacidad de @marcgravell que no rompa a los clientes existentes. Por eso, ServiceStack incluye los serializadores de texto más rápidos para .NET con la opción NuGet para habilitar el Protocolo de @marcgravell Buffers (el serializador binario más rápido de .NET).

Los serializadores de texto de ServiceStack son muy resistentes y pueden soportar versiones extremas sin error.

Experiencia de desarrollo libre de fricción de extremo a extremo

La naturaleza opinada de ServiceStack permite una API de servicio web concisa, rápida y tipificada, con soporte integrado para los clientes Sync / Async C # /. NET y Async Silverlight sin ningún código:

Ejemplo de sincronización C #

var response = client.Send<HelloResponse>(new Hello { Name = "World!" });

Async C # Ejemplo

client.SendAsync<HelloResponse>(new Hello { Name = "World!" },
    r => Console.WriteLine(r.Result), (r, ex) => { throw ex; });

Como solo devuelve JSON puro, también se consume de forma trivial con otros Clientes HTTP, por ejemplo, el ejemplo del cliente JS usando jQuery :

$.getJSON("http://localhost/Backbone.Todo/todos", function(todos) {
    alert(todos.length == 1);
});

Altamente comprobable

Todos los Clientes de Servicio C # / .NET comparten las mismas interfaces, lo que los hace altamente verificables e intercambiables hasta el punto en el que puede hacer que la misma prueba unitaria también sirva como prueba de integración XML, JSON, JSV, SOAP .

Validación enriquecida y manejo de errores incorporados

En su misión de proporcionar una experiencia de desarrollo limpia y libre de fricción, ServiceStack también incluye validación mecanografiada y manejo de errores integrado donde lanzar una Excepción de C # o usar su validación Fluent incorporada proporciona a los clientes errores tipográficos y estructurados fácilmente accesibles en los clientes de servicios web , p.ej:

try {
    var client = new JsonServiceClient(BaseUri);
    var response = client.Send<UserResponse>(new User());
} catch (WebServiceException webEx) {
    /*
      webEx.StatusCode  = 400
      webEx.ErrorCode   = ArgumentNullException
      webEx.Message     = Value cannot be null. Parameter name: Name
      webEx.StackTrace  = (your Server Exception StackTrace - if DebugMode is enabled)
      webEx.ResponseDto = (your populated Response DTO)
      webEx.ResponseStatus   = (your populated Response Status DTO)
      webEx.GetFieldErrors() = (individual errors for each field if any)
    */
}

Para hacer que sea trivial consumir errores en JavaScript, puede usar la biblioteca ligera ss-validation.js JavaScript para vincular de forma trivial sus errores de respuesta a los campos de formulario HTML con una sola línea de código. El proyecto de ejemplo SocialBootstrapApi proporciona una buena demostración de esto.

Integración enriquecida con ASP.NET y MVC

El ServiceStack MVC PowerPack reescribe y corrige muchos de los problemas de ASP.NET y MVC con reemplazos para sus agobiantes sesiones y el almacenamiento en caché de los proveedores de ASP.NET con su propia implementación limpia y libre de dependencias de ICacheClient e ISession API.

ServiceStack también incluye un modelo de proveedor de autenticación y autorización más nuevo y más limpio con varios AuthProviders diferentes incorporados:

  • Credenciales: para la autenticación con credenciales de nombre de usuario / contraseña mediante la publicación en el servicio / auth / credentials
  • Autenticación básica: permitir que los usuarios se autentiquen con la autenticación básica
  • Twitter OAuth: permite a los usuarios registrarse y autenticarse con Twitter
  • Facebook OAuth: permite a los usuarios registrarse y autenticarse con Facebook

El módulo de autenticación es completamente opcional y está integrado en las APIs ICacheClient / ISession limpias y OrmLite, que permite que sus sesiones se almacenen en la memoria, Redis o Memcached y su información UserAuth persistió en los RDBMS soportados por OrmLite de SQLServer, MySql, PostqreSQL, Sqlite as así como Redis data-store o InMemory (útil para dev / testing).

Gran documentacion

ServiceStack está muy bien documentado donde la mayor parte de la información sobre el marco se encuentra en la wiki de GitHub . La documentación para otras partes del marco (por ejemplo, serializadores, Redis, OrmLite) se puede encontrar en servicestack.net/docs/

El proyecto ServiceStack.Examples proporciona el código fuente de todas las demostraciones en vivo y las plantillas de inicio de ServiceStack, mientras que el proyecto SocialBoostsrapApi es un excelente punto de partida para desarrollar una aplicación de una sola página de Backbone.js con ServiceStack y MVC basada en la plantilla Bootstrap de Twitters.

Además de lo anterior, el Grupo de Google contiene un tesoro de información que se ha ampliado considerablemente en los últimos años.

Corre por todas partes

ServiceStack es un marco .NET 3.5 que se ejecuta en los hosts de ASP.NET y HttpListener y se puede alojar en .NET o Mono (trivia: www.servicestack.net es alimentado por CentOS / Mono). Esto permite que los servicios web de ServiceStack se alojen en:

Windows con .NET 3.5 y 4.0

Linux / OSX con Mono

  • Apache + mod_mono
  • Nginx + MonoFastCGI
  • XSP
  • Aplicación de consola

Desarrollado con el modelo de desarrollo Open Source.

ServiceStack es un firme creyente del modelo de desarrollo de código abierto, donde se desarrolla activamente de forma abierta y siempre ha estado alojado bajo una licencia liberal de OSS (New BSD) desde su inicio. Hasta hoy, ha recibido contribuciones de más de 47 desarrolladores y actualmente se encuentra en el tercer proyecto de C # más visto en GitHub .

Desventajas

Creo que la mayor desventaja es la misma para la mayoría de los otros proyectos OSS .NET donde Microsoft no la desarrolló (o incluso la incluyó como una opción disponible). Esto significa que rara vez es la primera opción cuando se evalúa un marco. La mayoría de los usuarios solo evaluarán ServiceStack como último recurso, ya sea que estén frustrados con la fricción y la fragilidad impuestas de WCF o el rendimiento del Microsoft Stack preferido.

Comentarios y recursos de la comunidad

ServiceStack ha sido muy bien recibido con comentarios positivos proporcionados por la mayoría de las personas que lo han evaluado como visible por el sentimiento positivo en el grupo de correo . A partir de este año, la cuenta de twitter @ServiceStack ha estado rastreando menciones y comentarios en sus favoritos .

La página wiki de Recursos comunitarios es un buen lugar para obtener más información acerca de ServiceStack en su hábitat natural, con enlaces a publicaciones de blog, presentaciones de pods, presentaciones, resúmenes y más.