2011-09-28 17 views
21

Tengo un sitio web desarrollado utilizando ASP.NET MVC3.
Ahora quiero exponer una API REST para que otros la usen, lo que expondrá las mismas características que el sitio web.Creación de API REST para el sitio web basado en MVC existente

En el sitio web, una vez que un usuario ha iniciado sesión y credenciales validadas contra un DB, la sesión administra el estado 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, ¿el mejor enfoque para el sitio web sería utilizar también la API REST (suponiendo que la API cubra todas las funcionalidades requeridas por el sitio)?

¿Qué tan bien es ASP.NET MVC3 adecuado para esto, por supuesto, teniendo en cuenta que el sitio ya existe utilizando este marco?

Respuesta

9

Escribí una publicación de blog sobre cómo [crear una arquitectura de API RESTful dentro de una aplicación ASP.NET MVC 3] hace años y terminé teniendo que dejar ir el sitio. :( Podría ser un buen punto de partida si se quiere tomar en la construcción de la API REST en su aplicación MVC.

Ver answer por @tugberk sobre el uso de WebAPI para una buena solución.

+0

Sí, este es uno de los mejores artículos en la web sobre este tema, lo comprobé hace unos días, realmente agradable, gracias. –

+2

Creo que el enlace está caído. –

+0

No tiene sentido ser el mejor artículo en la web si no es accesible :( –

4

Nota:

API Web WCF es ahora la API Web ASP.NET y ha cambiado mucho. La versión beta ya está disponible. Para obtener más información: Getting Started With ASP.NET Web API - Tutorials, Videos, Samples

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 API web REST a su sistema.

Para la autenticación, la clave API siempre es la mejor manera para este tipo de escenario. Aquí es un buen ejemplo de cómo se puede implementar autenticación API con API Web WCF:

http://weblogs.asp.net/cibrax/archive/2011/04/15/http-message-channels-in-wcf-web-apis-preview-4.aspx

Nota:

Acaban de lanzar la pareja versión preliminar 5 de semanas atrás y Mensaje Los canales se han cambiado a Gestores de mensajes hasta I saber. Pero el artículo anterior debería darte una idea.

Para las implementaciones de seguridad, el siguiente podría ayudar también:

wcf Authentication Token Implementation - How to do

+0

También puede ver mi blog sobre cómo me las he arreglado para obtener WCF con la autenticación básica trabajar con jQuery ver [sameproblemmorecode] (http://sameproblemmorecode.blogspot.com/2011/10/creating-secure-restfull-wcf-service.html) – Luuk

1

ASP .NET MVC es una gran opción para esto. He creado varios ASP MVC que actúan como servicios RESTful y 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 integrado se ocupa del lado del servidor, mientras que una vista de jQuery carga los datos de nuevo 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 jQuery document.ready en las páginas cargan en los datos de lo que es esencialmente mi API de reposo, pero se integran directamente en el sitio.

Pago y envío Nerd Dinner for great sample code. http://nerddinner.com/

En cuanto a la seguridad, creo que mi experiencia diferirá de la tuya. ASP MVC se integra muy bien con el directorio activo si todos sus usuarios están 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 distribuyen un token al llamar a un método de autorización. El token recibido sería la responsabilidad del cliente de almacenar y devolver cada solicitud, pero no puedo hablar con usted sobre los detalles de la implementación, ya que no tengo experiencia de persona en ese frente.

+0

Debería haber sido más explícito en la carga de datos. Yo sugeriría que su documento en las llamadas ya iniciará el fuego de los métodos jquery.getJSON que devuelven las solicitudes a los métodos del controlador que sirven sus datos JSON. El beneficio lateral es la carga rápida de páginas con la devolución de datos AJAX después. – Evan

1

Me gustaría ir con una implementación basada en servicio web WCF de la siguiente manera.

  • Wrap toda lógica su negocio en un proyecto DLL independiente nombrado como yourproject.businessservices por ejemplo
  • Crear un servicio web de autenticación que generará un token no-repetible por Iniciar sesión de usuario
  • este inicio de sesión almacena los detalles esenciales del usuario junto con el token en un caché como Memcache, que tendrá un plazo de caducidad
  • Si el usuario no ha accedido a la caché de digamos una hora, el caché caduca y el usuario ha cerrado la sesión
  • Si el usuario la está usando, la memoria caché se sigue extendiendo.

    Por el lado de los servicios de WCF,

  • Crear API para devolver el testigo de autenticación

  • Todos los métodos de WCF tendrá este identificador de sesión que necesita ser validado

    La ventaja es que los métodos wcf pueden exponerse a formato xml o json de devolución y también pueden usarse como servicios web normales.

    [WebInvoke (Método = "GET", ResponseFormat = WebMessageFormat.Xml, bodystyle = WebMessageBodyStyle.Bare, UriTemplate = "/ MyModule/XML/GetData/{customerSessionId}")] [WebInvoke (Método = "GET" , ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Envuelto, UriTemplate = "/ MyModule/JSON/GetData/{} customerSessionId")]

Cuestiones relacionadas