這樣風格的API,我想一個REST被命名後來才知道我是如何處理重複的動作名稱
在一個REST風格的API,你不應該處理這樣的重複。在REST風格的API中,您正在處理資源。
所以在您的特定情況下,你有2個資源:
所以,你將有以下途徑:
/users/{userId}/schoolyears
- >它對應於你的第一個動作
/shoolyears/{id}
- >這相當於你的第二個動作
所以:
public class UsersController : ApiController
{
public SchoolyearBrowseResponse GetSchoolYears(int userId)
{
return _service.GetSchoolyears(userId);
}
}
和:
public class SchoolYearsController : ApiController
{
public SchoolyearOpenResponse Get(int id)
{
return _service.OpenSchoolyear(id);
}
}
和最後一步是你的路線:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "UserSchoolYears",
routeTemplate: "api/{controller}/{userId}/schoolyears",
defaults: new { controller = "Users", action = "GetSchoolYears" }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
由於我想提一下附註一個用戶的學年(你的SchoolyearBrowseResponse
)班難以奏效。通常對於給定的用戶,你有一個學年的列表。如果你想爲一個用戶獲得一個特定的學年,你可以使用/users/{userId}/schoolyears/{schoolyearid}
。
「通常對於給定的用戶,你有一個學年列表」但我的SchoolyearBrowseResponse班內有List。這有道理嗎?或者我還沒有理解你... –
HelloWorld
是的,這是有道理的。 –
再次感謝Darin,我喜歡你的回答,它真的很有幫助:) – HelloWorld