Création d'une API avec ASP.NET MVC - Tout en un projet ou deux projets?


4

Donc j'ai recd. une exigence de créer une API pour accéder à notre application. Toutes les actions du contrôleur ne sont pas couvertes par l'API (peut-être 50%). Je pense que je peux soit utiliser le même projet, vérifier les en-têtes http pour chaque requête et répondre avec xml, JSON ou html si nécessaire (tout comme les rails).

OU

Créer une nouvelle application ASP.NET MVC, et déployer @ api.myapp.com utiliser exclusivement pour l'accès API. Je suppose que je pourrais écrire un contrôleur de base pour la première option pour gérer 99% du travail. Le problème avec la première option est que nous n'avons pas besoin (ou ne voulons pas) de fonctionnalité d'API pour au moins la moitié des actions du contrôleur (et le problème ne le sera jamais).

Dans la deuxième option, j'ai un doublon de certains contrôleurs, mais la bonne nouvelle est la plus/tous? mes actions de contrôleur ne sont que quelques lignes de code. Généralement:

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

Quoi qu'il en soit, que pensent les surcouches de la pile?

3

Il semble que vous vouliez créer quelque chose comme le service REST. S'il vous plaît jeter un oeil à this post of Phil Haack.
Oui, je suis sûr que vous pouvez le mettre dans le même projet. Mais il vaudra mieux les séparer d'une manière ou d'une autre (en utilisant des zones de MvcContrib ou déplacer des contrôleurs d'api et d'application web vers des assemblages séparés comme ceci dans SharpArchitecture.) Si vos contrôleurs dupliquent beaucoup de code, vous pouvez créer un contrôleur générique comme:

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); 
    } 
} 

Hope this helps.


0

Je pense que je mettrais dans le même projet, mais le séparer en utilisant des routes séparées. Vous pouvez ensuite réutiliser autant de code que possible - poussez par exemple le code de sélection de données et d'autres codes dans votre BLL, par exemple. Le conserver dans le même projet rendra plus facile l'utilisation de votre code API via AJAX à partir du client.


0

Je pense que mettre le même code dans 2 différents projets est d'avoir des ennuis à long terme.

tout mettre dans le même projet.

Si vous avez besoin d'une séparation entre les requêtes régulières et les requêtes API, vous pouvez utiliser des routes séparées.

Vous pouvez ensuite créer une fonction privée qui exécute l'action et demander au public de décider de rendre en html ou en JSON/XML