ASP.NET MVC vs WCF para REST API + uso de la página web

14

Creo que la discusión para el uso programático orientado al servicio frente a la interacción humana es clara.

Pero si tuviera que crear una aplicación que haga uso tanto de una API programática como de un sitio web que use los datos conectados por la misma API, ¿se inclina el favor de usar solo ASP.NET?

¿Qué tan fácil es integrar ASP.NET y WCF para trabajar en la misma aplicación?

    
pregunta Xster 27.04.2012 - 23:41

3 respuestas

11

En cuanto a escribir una aplicación que aproveche tanto ASP.NET/MVC como WCF, no es genial. WebAPI puede haber mejorado las cosas, pero en un proyecto que conozco que usaba WCF y MVC en la misma aplicación, terminaron manteniendo dos conjuntos diferentes de modelos para representar los mismos conceptos: uno para el código WCF y otro para el MVC código. Puedes imaginar todos los mapeadores que tuvieron que escribir para traducir cosas entre los dos modelos; había muchas líneas de código que podrían / deberían haberse evitado.

Parte de por qué sucedió esto es que los objetos de solicitud y respuesta de WCF deben anotarse con [DataContract] y sus propiedades con [DataMember], mientras que MVC no lo requiere. Idiomatic MVC, por otro lado, va a querer ViewModels, que tienen objetivos diferentes a los WCF DataContracts. Por supuesto, es posible que el uso de dos conjuntos completos de objetos de dominio tenga más que ver con la ley de Conway que con WCF &erio; MVC es conflictivo, pero vale la pena señalar que WCF y MVC tienen diferentes objetivos y requisitos en cuanto a salida y entrada.

Personalmente, soy partidario de desarrollar una API de back-end orientada a servicios simple pero potente, especialmente cuando es posible que desee varios clientes. Creo que el advenimiento de excelentes estructuras MVVM de JavaScript y micro MVC hace que esto sea una elección natural, ya que escribir código de aplicación usando BackboneJS , KnockoutJS y otros permite un entorno de desarrollo capaz. Luego puede consumir el back-end en el micro MVC de su elección para crear su aplicación web, o en un cliente móvil, y sus socios también podrían consumir la misma API de forma remota.

Sugerencia

Tanto WebAPI como Service Stack pueden ser buenos candidatos para crear su API de back-end. Recomiendo Service Stack, ya que lo he estado usando durante los últimos meses y he encontrado que es un excelente reemplazo para WCF. Actualmente estoy escribiendo una serie de tutoriales sobre la pila de servicios en mi blog .

El grupo que mantiene la pila de servicios ha publicado una aplicación de ejemplo utilizando el marco para desarrollar un clon tipo StackOverflow que muestra un patrón de desarrollo Eso creo que es especialmente convincente. Se trata de un back-end de servicios simple, basado en modelos, que usted podría imaginar siendo consumido por un sitio web de MVC, una aplicación móvil o cualquier otra cosa fácilmente. Los objetivos de diseño de ServiceStack fomentan claramente un patrón que debería conducir a una menor vinculación entre el cliente y el servidor. La idea es evitar las API de chatty con llamadas como GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm) a favor de menos métodos. Podría implementar lo mismo en la pila de servicios de esta manera:

[Route("/customers", "GET"]
[Route("/customers/search/{SearchTerm}", "GET"]
[Route("/customers/region/{Region}", "GET"]
[Route("/customers/region/{Region}/search/{SearchTerm}", "GET"]
public class Customers 
{
    public int? RegionId { get; set; }
    public string SearchTerm { get; set; }
}

public class CustomersService : Service
{
    public object Get(Customers request) {
        // handle request
        return new CustomersResponse();
    }
}

El beneficio, a mis ojos, es que, en lugar de tener su lógica de negocios distribuida en muchos y más métodos separados GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm) , GetCustomersInRegion(int regionId) , GetCustomersWithSearchTerm(string searchTerm) , GetCustomers() , todo está en un solo lugar. Esto debería llevar a un código más mantenible.

Casualmente, Stack Exchange contrató la Pila de servicios original autor . Continúa comprometerse activamente con el proyecto de la pila de servicios.

Me gustan especialmente las colas de mensajes para ciertas cosas, y mientras WCF lo permite, WebAPI no. ServiceStack permite invocar el mismo servicio web a través de MQ. Para obtener más información sobre esto, consulte el host de Redis MQ en: github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis

    
respondido por el Kyle Hodgson 23.05.2017 - 14:40
4

@tzerb lo ha respondido correctamente, pero yo quería extender esa respuesta. La API web de ASP.NET que se encuentra actualmente en fase beta y un proyecto OSS es el marco más cercano que está buscando.

La breve descripción del producto es la siguiente (citado en la página API Web ASP.NET ):

  

ASP.NET Web API es un marco que facilita la creación de HTTP   Servicios que llegan a una amplia gama de clientes, incluidos navegadores y   dispositivos móviles. ASP.NET Web API es una plataforma ideal para construir   Aplicaciones RESTful en .NET Framework.

En cuanto a la aplicación cliente que podría estar usando para consumir su API web, ciertamente no tiene que ser una aplicación ASP.NET. Puedes consumir tu API con una página HTML estática usando JavaScript. Puede hacer esto fácilmente con algunas bibliotecas de JavaScript útiles como jQuery.

Por otro lado, ciertamente puede consumir su API en el sitio del servidor en cualquier aplicación ASP.NET. El proyecto de API web también introdujo una nueva API de cliente HTTP .NET llamada HttpClient que facilita el consumo de servicios HTTP.

En general, aquí hay un buen conjunto de recursos para que puedas comenzar:

Comenzando con ASP.NET Web API - Tutoriales, Videos, Muestras

Recuerda que el proyecto está todavía en su etapa beta. Le recomiendo que siga el blog Henrik F Nielsen donde publica información sobre las últimas actualizaciones inéditas del proyecto. Puede acceder al código fuente del proyecto y al flujo de desarrollo dentro del proyecto de la pila web ASP.NET .

    
respondido por el tugberk 28.04.2012 - 15:28
3

Creo que la guía actual es usar MVC Web API en lugar de WCF para REST. enlace

El modelo de desarrollo está bastante cerca y omite la configuración a veces desagradable de WCF.

    
respondido por el tzerb 28.04.2012 - 00:54

Lea otras preguntas en las etiquetas

Comentarios Recientes

Punto de interrupción del estado SFTP Copias de seguridad del sitio web HTTP / 2 Cifrado del sitio web Lógica de la página web Módulos API de configuración WSUS REST API Enlaces Acoplamiento de objetos Arquitectura arquitectónica Pila del servidor Flujo de soporte Listas de verificación Certificación Opcional Más en Ansible 5.0 ASP.NET MVC Desarrollo de aplicaciones web de WCF Mail Copias de seguridad del sitio web EAP Seguridad del sitio web Configuración del directorio del sitio web SFTP Copias de seguridad... Lee mas