Como estou trabalhando em um projeto no MVC que possui aplicativos móveis, é óbvio que precisamos usar a API da Web para que possa ser usada em aplicativos móveis.
Depois de criar a API, quando começamos a desenvolver o site, estamos confusos e discutimos se devemos usar a API ou acessar diretamente o objeto de negócios. E acabamos depois de ter uma opinião de um desenvolvedor mais experiente para consumir a API da Web em vez de usar o objeto de Negócios diretamente.
Estou tendo confusão com relação a essa estrutura de solução.
1) Por que devemos usar a API da Web e fazer uma solicitação HTTP (que consome tempo) para obter ou colocar dados em vez do objeto de negócios diretamente, que está na mesma solução.
2) Após ter argumentado, eles disseram o que se o cliente quiser hospedar API e Web em servidor de nuvem diferente e aplicar o dimensionamento apenas na API ou pode ser que ele queira ter um URL diferente para acessar API e Web (o que é lógico). Então, nesse caso, devemos chamar a API da Web do aplicativo MVC na mesma solução?
3) Se estivermos hospedando API e Web em hospedagem diferente, significa que nossa Web usará o WebClient e terá uma chamada HTTP em cada navegação. Está certo?
4) Se o objeto de negócios formar tanto a API quanto a hospedagem na Web em um servidor diferente, se algo mudar no BL precisará atualizar a compilação no servidor.
5) Ou devemos criar apenas um projeto para a API e podemos adicionar visualizações ou páginas html para desenvolver a interface da Web, para que possamos chamar diretamente a API do ajax.
De acordo com o meu conhecimento # 5 é a melhor solução ou a API é apenas para acesso de terceiros. Se tivermos DB, EF, camada de dados e camada de negócios na mesma solução, não devemos usar a API para fazer chamadas HTTP e acessar diretamente o objeto de negócios. (corrija-me se estiver errado) É necessária API quando um aplicativo móvel ou desktop ou qualquer um quiser acessar o aplicativo para que possamos ter a mesma camada de repositório e dados.
No meu cenário, eu tenho que criar API, pois também temos aplicativos móveis e, no lado da API do projeto, chamamos camada de negócios (projeto separado) e camada de negócios se comunicam com a camada de acesso a dados (projeto separado). Portanto, minha pergunta é: se hospedarmos nossa API e web em servidores diferentes, chamar a API, que é uma solicitação HTTP, pode demorar mais do que usar o método da camada de negócios à medida que criamos o projeto e temos a camada de negócios .dll. No controlador de API, acabamos de converter nossos negócios para o formato json.
Eu pesquisei na internet, mas não obtive resposta convincente. Eu encontrei um blog http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx discutindo o mesmo ponto, mas novamente Nesse blog, minha pergunta é por que precisamos considerar o cenário 3?
Atualização: podemos ter projetos de API e MVC diferentes e podemos chamar API da Web usando jvascript ou usar o padrão MVVM.