2012-11-07 16 views
5

Attualmente mi trovo di fronte alla necessità di creare un servizio Web che consenta a un client Java di recuperare e attivare azioni sui nostri dati tramite httprequest. Siamo un negozio .Net che sembra l'ultima soluzione per questo è MVC4 Web API di Microsoft. Sono abituato alla tua architettura a livelli standard. Ho prelevato i dati dalle API, ma questo sarà il mio primo servizio web a fornire dati.ASP.NET Web API Architettura Suggerimenti/Feedback

Dai miei studi ho visto i suggerimenti come segue:

  • separazione della logica e di accesso ai dati in una libreria di classi tipo di progetto separato.
  • Utilizzo dei controlli per accedere ai dati ed eseguire la logica.
  • Utilizzo del modello per accedere ai dati ed eseguire la logica.

Sto cercando qualcuno che abbia esperienza con MV Web API MVC4 che può gettare luce sulle buone pratiche per la creazione di un servizio web in questo modo.

Grazie in anticipo.

+1

Benvenuti in StackOverflow! Penso che questa domanda sia un po 'vaga. Potresti spiegare che cosa stai cercando di fare esattamente? Qualcosa come: "Quale dovrebbe essere il design del mio servizio Web? Ecco cosa sto pensando"? Forse ... Questa domanda sembra troppo aperta. – Parris

+1

Grazie per la vostra risposta e il benvenuto. Temo che la vaghezza della mia domanda corrisponda alle mie conoscenze sul prodotto MVC 4. Stavo pensando due opzioni. La prima opzione sarebbe quella di separare la mia logica e l'accesso ai dati in progetti separati di librerie di classi con la possibilità di riutilizzare il codice e una migliore organizzazione. In alternativa, un'altra opzione sarebbe quella di utilizzare semplicemente la shell MVC e utilizzare il modello per la mia logica aziendale e l'accesso ai dati che ritenevo potesse diventare molto affollato rapidamente poiché questo progetto si ingrandiva lungo la strada. – vikingben

+0

API Web ASP.NET! = ASP.NET MVC http://www.tugberkugurlu.com/archive/newsflash-asp-net-web-api-does-not-sit-on-top-of-asp-net- mvc-in-fact-it-does-not-sit-on-top-of-anything Just FYI :) – tugberk

risposta

18

Prima di tutto, inserire la logica dell'API Web ASP.NET in un progetto separato. Ciò ti darà flessibilità sul livello di hosting (poiché l'API Web di ASP.NET è in hosting agnostico) e rende solo l'intero progetto pulito. Diciamo che il nome del tuo progetto è MyProject. È possibile denominare il progetto API come MyProject.API ed è possibile installare il pacchetto NuGet Microsoft.AspNet.WebApi.Core in questo progetto.

Suggerisco anche di separare il livello del dominio (entità POCO, repository, parti del livello di servizio, ecc.). Chiamiamo questo MyProject.Domain. Quindi, si farebbe riferimento a questo progetto MyProject.Domain dal progetto MyProject.API.

Non ti consiglio di scaricare tutte le tue entità POCO nella tua API. Quindi, lavorerei sicuramente con Data Transfer Objects (Dto). Puoi utilizzare uno strumento di terze parti come autoMapper per mappare le tue classi di entità sul tuo Dtos. Tuttavia, metti i tuoi Dtos, i comandi di richiesta, i modelli di richiesta in un progetto separato. Si farebbe riferimento al progetto MyProject.API.Model dal progetto MyProject.API. Perché creiamo un progetto separato per questo? Perché, in seguito, se decidi di creare un wrapper client .NET per la tua API HTTP, puoi facilmente fare riferimento a questo progetto per utilizzarlo anche con il tuo client .NET. Chiamiamo questo progetto MyProject.API.Model.

Infine, abbiamo bisogno di un livello di hosting per la nostra API. Supponendo che desideri ospitare questo progetto in ASP.NET, puoi creare un nuovo progetto tramite il modello di applicazione Web vuota e chiamiamo questo progetto MyProject.API.WebHost. Quindi, è possibile installare il pacchetto Microsoft.AspNet.WebApi in questo progetto. Da questo progetto, si farebbe riferimento ai progetti MyProject.API, MyProject.API.Model e MyProject.Domain. Questo progetto è quello che dovresti implementare sul tuo server.

Se si desidera creare un wrapper .NET per l'API HTTP, è possibile creare un altro progetto denominato MyProject.API.Client e installare il pacchetto Microsoft.AspNet.WebApi.Client in questo. Dovresti anche fare riferimento al progetto MyProject.API.Model da questo in modo da poter deserializzare e serializzare da oggetti fortemente tipizzati.

Ecco lo screenshot della soluzione explorer per il progetto ho lavorato con:

enter image description here

Spero che questo ti dà un po 'di un'idea.

+0

Lo ringrazia per il feedback. Apprezzo la rapida risposta. – vikingben

+5

: - \ Inizia davvero a sembrare https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition –

+1

@DanEsparza fammi sapere se uno di questi livelli non ha senso per te e ti dirò perché è lì . – tugberk