C# Web API 2路由-应为ID';即使它们不是必需的,也总是包括在内吗?

C# Web API 2路由-应为ID';即使它们不是必需的,也总是包括在内吗?,c#,rest,asp.net-web-api,routing,C#,Rest,Asp.net Web Api,Routing,所以这更像是一个设计问题,但我认为这是一个值得质疑的问题 这是我的困境。在设计用于消费的API时,我遇到了一些相当复杂的路由问题。以下是一个例子: Route("/people/{personID}/phonenumber/{phoneNumberID}/operation/{operationID}/data") 现在,该路由获取在操作中为特定人员的特定电话号码执行的数据 由于我可以仅通过operationID获取操作数据,因此我真的不需要包括personID或phonenumberID。但

所以这更像是一个设计问题,但我认为这是一个值得质疑的问题

这是我的困境。在设计用于消费的API时,我遇到了一些相当复杂的路由问题。以下是一个例子:

Route("/people/{personID}/phonenumber/{phoneNumberID}/operation/{operationID}/data")
现在,该路由获取在操作中为特定人员的特定电话号码执行的数据

由于我可以仅通过operationID获取操作数据,因此我真的不需要包括personID或phonenumberID。但是,该数据直接绑定到它之前的所有ID。因此,如果您愿意,可以创建“指挥链”

例如,我仍然可以删除operationID,以便在特定电话号码上执行所有操作。像这样:

Route("/people/{personID}/phonenumber/{phoneNumberID}/operation")
在这种情况下,PhoneNumberID现在是相关的,并且需要它来获得必要的操作。在前面的示例中,
PhoneNumberID
没有做任何事情,因为我有explict
operationID
来检索数据

已经开始回答我的问题了


所以!我是否应该始终在路由中包含所有id,即使实际上不需要它们来检索数据?或者这是一个糟糕的设计,我真的应该重新思考我是怎么做的?有些东西让我感觉不舒服。

你应该尝试遵循RESTful设计。如果有人试图消费的资源不需要它,那么就不要使用它。尽量使API尽可能清晰和简单

如果您需要创建复杂或更详细的API方法,您可以始终通过HTTP POST请求为大型响应提供这些方法


保持简单。保持API清洁。清除定义良好的控制器,这些控制器只获取特定资源所需的内容。

当你说RESTful设计时,你是说querystring与url变量中的querystring?RESTful在设计中涉及url的获取/放置/发布/删除命名约定以及访问或创建资源的方式。我倾向于同意你的看法。但是,如何处理跨多个控制器/实体绑定的资源?我现在可以通过我的个人控制器、电话控制器和详细操作控制器访问“操作”吗?或者我要将这些依赖关系带到我的操作控制器中。另外,我不想仅仅因为我的查询很复杂就使用POST来检索数据。这不是POST方法的本意。简单是伟大的,但结构也是如此。这就是我正在努力解决的问题。我个人会在第一种情况下使用/operation/{operationID},因为您希望检索操作并拥有operationID