Создание REST API для существующего веб-сайта MVC
У меня есть веб-сайт, разработанный с использованием ASP.NET MVC3.
Теперь я хочу открыть API REST для других пользователей, которые будут раскрывать те же функции, что и веб-сайт.
На веб-сайте, как только пользователь выполнил вход и учетные данные, проверенные с помощью БД, сеанс управляет состоянием входа в систему пользователя.
Как я могу сделать эквивалент с REST API, где многие из обнаруженных методов требуют, чтобы пользователь вошел в систему (или, по крайней мере, имел действительное имя пользователя и пароль)?
В дополнение к этому, лучший подход для веб-сайта также должен был бы использовать REST API (предполагая, что API охватывает все функциональные возможности, необходимые сайту)?
Насколько хорошо подходит ASP.NET MVC3 для этого - конечно, учитывая, что сайт уже существует с использованием этой структуры?
Ответы
Ответ 1
Я написал сообщение в блоге о том, как [построить архитектуру RESTful API в приложении ASP.NET MVC 3] лет назад, и в итоге мне пришлось оставить сайт.:( Это может быть хорошим началом, если вы захотите создать API REST в своем приложении MVC.
См. ответ от @tugberk при использовании WebAPI для хорошего решения.
Ответ 2
ASP.NET MVC очень хорошо подходит для этого. Хотя вы можете использовать другие подходы (например, WCF), я бы придерживался MVC, так как у вас уже есть рабочий сайт, который должен быть выставлен другим пользователям.
См. также мой другой ответ:
Что лучше для создания API для моего сайта: службы данных MVC или Ado.net?
Ответ 3
Примечание:
WCF Web API теперь является веб-API ASP.NET и сильно изменился. Бета-версия теперь доступна версия. Для получения дополнительной информации: Начало работы с ASP.NET Web API - учебные пособия, видео, образцы
Я бы пошел с WCF Web Api, чтобы сделать это. ASP.NET MVC также хорош и способен отображать ваши данные, но WCF Web Api более эффективен, если вы рассматриваете возможность предоставления своих данных своим пользователям. Он прост в использовании и интегрирует REST Web API в вашу систему.
Для аутентификации ключ API всегда является лучшим способом для этого типа сценария. Вот хороший пример того, как вы можете реализовать API Auth с веб-интерфейсом WCF:
http://weblogs.asp.net/cibrax/archive/2011/04/15/http-message-channels-in-wcf-web-apis-preview-4.aspx
Примечание:
Они только что выпустили предварительную версию 5 пару недель назад и Каналы сообщений были изменены на обработчики сообщений до тех пор, пока я знать. Но приведенная выше статья должна дать вам идею.
Для реализации безопасности может помочь и нижеследующее:
wcf Реализация маркера аутентификации - как это сделать
Ответ 4
ASP.NET MVC - отличный выбор для этого. Я создал несколько ASP MVC, которые действуют как службы RESTful, так и веб-сайты.
Чтобы обобщить парадигму дизайна, которую я использую, каждый контроллер имеет действие, которое испускает JSON-представление запрошенных данных. Указанные данные загружаются в модель просмотра на сервере, а встроенный сериализатор JSON заботится о стороне сервера, в то время как представление jQuery хорошо загружает данные для моих фактических веб-страниц, которые они потребляют.
На самом сайте есть индексные действия для каждого контроллера, которые испускают необходимую разметку, но не данные. Методы jQuery document.ready на страницах загружаются в данные из того, что является по существу моим отдыхом api, но строят прямо на сайт.
Checker Nerd Dinner для отличного примера кода. http://nerddinner.com/
Что касается безопасности, я думаю, что мой опыт будет отличаться от вашего. ASP MVC очень хорошо интегрируется с активным каталогом, если ваши пользователи находятся в одном домене и имеют учетные данные AD. Это единственный метод, который я использовал, и с легкостью, успехом и удовлетворением.
У меня были сотрудники, взаимодействующие с другими API-интерфейсами, которые выдают токен при вызове метода авторизации. Принятый токен будет отвечать за ответственность клиентов за хранение и возврат к каждому запросу, но я не могу рассказать вам о деталях реализации, поскольку у меня нет опыта работы на этом фронте.
Ответ 5
Я бы пошел с реализацией веб-службы 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 (метод = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/MyModule/JSON/GetData/{customerSessionId}" )]