Создание API с ASP.NET MVC - все в одном проекте или двух проектах? - PullRequest
4 голосов
/ 22 февраля 2009

Итак, я рекомендую. требование создать API для доступа к нашему приложению. Не все действия контроллера покрываются API (возможно, 50%).

Я полагаю, что я могу использовать один и тот же проект, проверять заголовки http для каждого запроса и, при необходимости, отвечать xml, JSON или html (очень похоже на rails).

OR

Создайте новое приложение ASP.NET MVC, разверните @ api.myapp.com и используйте его исключительно для доступа к API.

Полагаю, я мог бы написать базовый контроллер для первого варианта для обработки 99% работы. Проблема с первым вариантом заключается в том, что нам не нужны (или не нужны) функциональные возможности API по крайней мере для половины действий контроллера (и, вероятно, никогда не будет).

Во втором варианте у меня есть дубликаты некоторых контроллеров, но хорошие новости больше всего / все? мои действия контроллера - только пара строк кода. Как правило:

Whatever whatever = new Whatever(....);
repository.Save(whatever);

В любом случае, что думают переполнители стека?

Ответы [ 3 ]

3 голосов
/ 22 февраля 2009

Кажется, вы хотите создать что-то вроде сервиса REST. Пожалуйста, посмотрите на этот пост Фила Хаака .
Да, я уверен, что вы можете поместить его в тот же проект. Но будет лучше каким-то образом разделить их (используя области из MvcContrib или переместить контроллеры API и веб-приложения для разделения сборок, как это сделано в SharpArchitecture . Если ваши контроллеры дублируют много кода, вы можете создать универсальный контроллер, как:

public class ControllerBase<T, Service> : Controller
where Service : IService<T>
{
    public Service service { get; set; }
    public ActionResult Save(int id)
    {
        var item = service.Get(id);
        if (TryUpdateModel<T>(item))
        {
            service.Save(item);
            return View("Success");
        }
        return View("Error", item);
    }
}

Надеюсь, это поможет.

0 голосов
/ 13 марта 2009

Я думаю, что размещение одного и того же кода в 2 разных проектах в долгосрочной перспективе порождает проблемы.

Поместите все это в один проект.

Если вам нужно разделить обычные запросы к API, вы можете использовать отдельные маршруты.

Затем вы можете создать частную функцию, которая выполняет действие, и только публичная функция решает ее визуализировать в html или JSON / XML

0 голосов
/ 22 февраля 2009

Я думаю, что я бы включил в тот же проект, но отделить его, используя разные маршруты.

API: http://example.com/api/widget/list
App: http://example.com/widget/list

Затем вы можете повторно использовать как можно больше кода - например, вставить выборку данных и другой код в свой BLL. Хранение его в том же проекте облегчит использование вашего кода API через AJAX с клиента.

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