asp.net mvc - tutorial - Creación de API REST para un sitio web existente basado en MVC
web api c# tutorial (5)
Nota:
WCF Web API ahora es ASP.NET Web API y ha cambiado mucho. La versión beta ya está disponible. Para obtener más información: Introducción a la API web de ASP.NET: tutoriales, videos, ejemplos
Me gustaría ir con WCF Web Api para hacer eso. ASP.NET MVC también es agradable y capaz de exponer sus datos, pero WCF Web Api es más capaz si considera exponer sus datos a sus usuarios. Es fácil de usar e integrar las API web de REST en su sistema.
Para la autenticación, la clave API es siempre la mejor manera para este tipo de escenario. Este es un buen ejemplo de cómo puede implementar la autenticación de API con la API web de WCF:
Nota:
Acaban de lanzar la versión preliminar 5 hace un par de semanas y los canales de mensajes se han cambiado a manejadores de mensajes por lo que sé. Pero el artículo anterior debería darle una idea.
Para implementaciones de seguridad, lo siguiente podría ayudar también:
Implementación del token de autenticación wcf - Cómo hacerlo
Tengo un sitio web desarrollado utilizando ASP.NET MVC3.
Ahora quiero exponer una API REST para que otros la usen y expondrá las mismas características que el sitio web.
En el sitio web, una vez que un usuario ha iniciado sesión y las credenciales se han validado en una base de datos, la sesión administra el estado de inicio de sesión del usuario.
¿Cómo haría el equivalente con la API REST, donde muchos de los métodos expuestos requieren que el usuario inicie sesión (o al menos tenga un nombre de usuario y contraseña válidos)?
Además de esto, ¿sería el mejor enfoque para el sitio web utilizar la API REST también (suponiendo que la API cubra toda la funcionalidad requerida por el sitio)?
¿En qué medida es adecuado ASP.NET MVC3 para esto, por supuesto, teniendo en cuenta que el sitio ya existe con este marco?
ASP .NET MVC es una gran opción para esto. He creado varios ASP MVC que actúan como servicios RESTful, así como sitios web.
Para resumir el paradigma de diseño que uso, cada controlador tiene una acción que emite una representación JSON de los datos solicitados. Dichos datos se cargan en un modelo de vista en el servidor, y el serializador JSON incorporado se encarga del lado del servidor, mientras que una vista jQuery carga bien los datos para que mis páginas web reales los consuman.
El sitio en sí tiene acciones de índice en cada controlador que emiten el marcado necesario, pero no los datos. Los métodos de jQuery document.ready en las páginas se cargan en los datos de lo que es esencialmente mi api de descanso, pero se integran directamente en el sitio.
Checkout Nerd Dinner para una gran muestra de código. http://nerddinner.com/
En cuanto a la seguridad, creo que mi experiencia será diferente a la tuya. ASP MVC se integra muy bien con Active Directory si sus usuarios están todos en el mismo dominio y tienen credenciales de AD. Este es el único método que he usado, y con facilidad, éxito y satisfacción.
He tenido compañeros de trabajo que interactúan con otras API que entregan un token al llamar a un método de autorización. El token recibido sería responsabilidad del cliente almacenar y devolver cada solicitud, pero no puedo explicarle los detalles de la implementación, ya que no tengo experiencia personal en ese frente.
ASP.NET MVC es muy adecuado para esto. Aunque puede usar otros enfoques (como WCF), me quedaría con MVC ya que ya tiene un sitio de trabajo que necesita ser expuesto para otros consumidores.
Véase también mi otra respuesta:
¿Qué es mejor para crear una API para mi sitio web: servicios de datos MVC o Ado.net?
Escribí una publicación de blog sobre cómo [Construir una arquitectura de API RESTful dentro de una aplicación MVC 3 de ASP.NET] hace años y terminé teniendo que dejar ir el sitio. :( Podría ser un buen comienzo si desea construir la API REST en su aplicación MVC.
Vea la answer de @tugberk sobre el uso de WebAPI para obtener una buena solución.
Me gustaría ir con una implementación basada en el servicio web WCF de la siguiente manera.
- Envuelve toda la lógica de tu negocio en un proyecto dll separado llamado yourproject.businessservices por ejemplo
- Cree un servicio web de autenticación que genere un token no repetible por inicio de sesión de usuario
- Este inicio de sesión almacena los detalles esenciales del usuario junto con el token en un Cache como MemCache que debería tener una caducidad de deslizamiento
- Si el usuario no ha accedido al caché por, digamos, una hora, el caché caduca y el usuario se desconecta.
Si el usuario lo está utilizando, el caché se sigue extendiendo.
En el lado de servicios wcf,
Crear API para devolver el token en la autenticación
Todos los métodos wcf tendrán este ID de sesión que debe validarse.
La ventaja es que los métodos wcf pueden exponerse al formato xml o json de retorno y también pueden usarse como servicios web normales.
[WebInvoke (Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/ MyModule / XML / GetData / userSessionId}")] [WebInvoke (Method = "GET", Response) Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/ MyModule / JSON / GetData / {customerSessionId}")]