Создание REST API для существующего веб-сайта на основе MVC - PullRequest
21 голосов
/ 28 сентября 2011

У меня есть веб-сайт, разработанный с использованием ASP.NET MVC3.
Теперь я хочу предоставить REST API для использования другими пользователями, который предоставит те же функции, что и веб-сайт.

На веб-сайте один разпользователь вошел в систему и верифицировал учетные данные в БД, сеанс управляет состоянием входа в систему пользователя.
Как мне сделать аналог с REST API, где многие из представленных методов требуют, чтобы пользователь был зарегистрированв (или, по крайней мере, иметь действительные имя пользователя и пароль)?

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

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

Ответы [ 5 ]

9 голосов
/ 03 ноября 2011

Я написал сообщение в блоге о том, как [Построить архитектуру RESTful API в приложении ASP.NET MVC 3] года назад, и в итоге мне пришлось отпустить сайт.:( Это может быть хорошим началом, если вы захотите встроить REST API в приложение MVC.

См. ответ от @tugberk об использовании WebAPI дляхорошее решение.

6 голосов
/ 28 сентября 2011

ASP.NET MVC очень хорошо подходит для этого. Хотя вы можете использовать другие подходы (например, WCF), я бы придерживался MVC, так как у вас уже есть рабочий сайт, который должен быть открыт для других потребителей.

Смотрите также мой другой ответ:

Что лучше для создания API для моего сайта: службы данных MVC или Ado.net?

4 голосов
/ 28 сентября 2011

Примечание:

WCF Web API теперь является ASP.NET Web API и сильно изменился. Бета версия теперь доступна. Для получения дополнительной информации: Начало работы с Веб-API ASP.NET - учебные пособия, видеоролики, примеры

Я бы пошел с WCF Web Api, чтобы сделать это. ASP.NET MVC также хорош и способен предоставлять ваши данные, но WCF Web Api более эффективен, если вы решите предоставить свои данные своим пользователям. Он прост в использовании и интеграции веб-API REST в вашу систему.

Для аутентификации ключ API всегда является наилучшим способом для этого типа сценария. Вот хороший пример того, как вы можете реализовать Аутентификацию API с помощью WCF Web API:

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

Примечание:

Они только что выпустили предварительную версию 5 недель назад и Каналы сообщений были изменены на Обработчики сообщений, насколько я знать. Но вышеприведенная статья должна дать вам представление.

Для реализации безопасности может помочь также следующее:

Реализация токена аутентификации wcf - как это сделать

1 голос
/ 03 ноября 2011

Я бы пошел с реализацией на основе веб-службы WCF следующим образом.

  • Оберните всю свою бизнес-логику в отдельный dll-проект с именем yourproject.businessservices, например
  • Создание веб-службы аутентификации, которая будет генерировать неповторяемый токен для входа в систему пользователя
  • Этот логин хранит основные данные пользователя вместе с токеном в кэше, таком как MemCache, срок действия которого должен быть скользящим
  • Если пользователь не обращался к кешу, скажем, час, срок действия кеша истекает, и пользователь выходит из системы
  • Если пользователь использует его, кэш продолжает расширяться.

    На стороне службы wcf,

  • Создание API для возврата токена при аутентификации

  • Все методы wcf будут иметь этот идентификатор сеанса, который необходимо проверить

    Преимущество заключается в том, что методы wcf могут быть возвращены в формате xml или json, а также могут использоваться как обычные веб-службы.

    [WebInvoke (Method = "GET", ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/ MyModule / XML / GetData / {customerSessionId}")] [WebInvoke (Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/ MyModule / JSON / GetData / {customerSessionId}")]

1 голос
/ 02 ноября 2011

ASP .NET MVC - отличный выбор для этого. Я создал несколько ASP MVC, которые работают как RESTful-сервисы, а также как веб-сайты.

Чтобы подвести итог используемой мной парадигмы проектирования, у каждого контроллера есть действие, которое испускает JSON-представление запрошенных данных. Указанные данные загружаются в модель представления на сервере, а встроенный сериализатор JSON заботится о стороне сервера, в то время как представление jQuery прекрасно загружает данные обратно для использования на моих реальных веб-страницах.

Сам сайт имеет индексные действия на каждом контроллере, которые генерируют эту необходимую разметку, но не данные. Методы jQuery document.ready на страницах загружают данные из того, что по сути является моим API для отдыха, но встроены прямо в сайт.

Оформить заказ Nerd Dinner для отличного примера кода. http://nerddinner.com/

Что касается безопасности, думаю, мой опыт будет отличаться от вашего. ASP MVC очень хорошо интегрируется с активным каталогом, если все ваши пользователи находятся в одном домене и имеют учетные данные AD. Это единственный метод, который я использовал, и с легкостью, успехом и удовлетворением.

Мне приходилось взаимодействовать с другими API, которые раздают токен при вызове метода авторизации. В таком случае полученный токен будет обязанностью клиентов хранить и передавать каждый запрос, но я не могу рассказать вам о деталях реализации, так как у меня нет опыта работы на этом фронте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...