2015-11-20 2 views
2

J'ai créé un api Web (REST) ​​appelé filtre qui a plusieurs méthodes get telles queverbes en double ASP.NET Web api

getCompany GetCustomers GetOrders

cette pratique est correcte ou devrais-je avoir différents api web pour différentes entités? Devrais-je avoir le même verbe http (GET) dupliqué dans la même API WEB?

Qu'en est-il des autres verbes (POST ou PUT)?

Dans un autre service, nous avons un cas où nous voulons mettre à jour un champ spécifique et un autre cas où nous pouvons mettre à jour n'importe quoi sauf ce champ spécifique dans l'enregistrement. Devrait-on utiliser une méthode (POST ou PUT) dans les deux cas ou puis-je avoir deux méthodes distinctes? J'appelle ces méthodes du service HTTP angularjs $.

+2

N'existez-vous pas de contrôleurs différents tels que CompanyController, CustomerController et OrderController? Ou est-ce que je manque quelque chose? – Win

+0

J'ai un contrôleur appelé FilterController. La raison pour laquelle je l'ai créé est que je sais que je n'aurai jamais besoin d'une méthode get et que la création de plusieurs contrôleurs qui contiennent juste une méthode semble trop pour trop peu. – tangokhi

Répondre

4

Vous devriez avoir un contrôleur différent pour chaque ressource (entité)

Ensuite, une méthode Get sur votre CustomersController par exemple

Vos urls seraient alors

/Société
/clients
/Commandes

etc ...

Vos verbes HTTP sont ensuite routés vers les méthodes correspondantes dans ces contrôleurs. Donc, GET demande à /Customers serait acheminé vers votre méthode Get() sur ce contrôleur

Alternativement, si vous insistez vraiment sur un contrôleur, vous pouvez utiliser des attributs de routage, avec verbe attributs

Quelque chose comme

public class FilterController : ApiController 
{ 
    [HttpGet] 
    [Route("orders")] 
    public IHttpActionResult GetOrders() 
    { } 


    [HttpGet] 
    [Route("customers")] 
    public IHttpActionResult GetCustomers() 
    { } 


    [HttpPut] 
    [Route("customers")] 
    public IHttpActionResult UpdateOrders() 
    { } 
} 

Mais cela deviendra assez gros, assez rapide, et je ne suggère généralement pas de le faire comme ça.

Un contrôleur par ressource est beaucoup plus propre.

+0

S'il vous plaît voir mes commentaires ci-dessus. Pour mon autre problème qui concerne la mise à jour d'une ressource, j'ai un contrôleur. Selon ce que vous suggérez, je devrais avoir une seule méthode pour PUT et dans cette méthode je devrais avoir une certaine logique où j'ai besoin d'identifier si courir un chemin logique ou un autre? Je vois votre point de vue que faire quelque chose comme ça sera pur, mais cette méthode ne va pas faire trop, où comme si j'avais deux méthodes pour représenter différents scénarios de mise à jour, il est plus concis. Quels sont les inconvénients d'avoir deux méthodes put plutôt qu'une sur le même contrôleur. – tangokhi

+0

@tangokhi réponse mis à jour – Alex

+0

le contre sont lisibilité. Si vous avez un contrôleur par ressource, la navigation dans votre code est beaucoup plus facile.Si vous voulez changer quelque chose à faire avec la mise à jour des clients, vous savez aller au CustomersController ... pour une plus grande lisibilité. – Alex