【发布时间】:2016-02-09 16:49:27
【问题描述】:
在为一个用 C# 编写的 ASP.Net Web API 应用程序设计 RESTFul 的 URI 时,我发现自己陷入了困境,什么是最佳实践。
取下面的伪代码。
public class File{
public int ID {get;set;}
public string Name {get;set;
}
public class X {
public int ID {get;set;}
public string Name {get;set;}
public List<File> Files {get;set;}
}
public class Y {
public int ID {get;set;}
public string Name {get;set;}
public List<File> Files {get;set;}
}
public class Z {
public int ID {get;set;}
public string Name {get;set;}
public List<File> Files {get;set;}
}
现在,如果我想要一个特定的文件,我会调用类似:
/api/Files/{ID}
现在,如果我想要与另一个资源相关的文件,我是否要创建路由:
/api/X/{xID}/Files
/api/Y/{yID}/Files
/api/Z/{zID}/Files
或者我是否可以这样做:
/api/Files/X/{xID}
/api/Files/Y/{yID}
/api/Files/Z/{zID}
在维护方面,后一种选择似乎更合适;与文件有关的任何内容都包含在同一个控制器中。
虽然前一个选项对我来说似乎更明确,但不知何故,这意味着在整个控制器中传播类似的调用
或者,有什么不同的方法可以解决吗?
【问题讨论】:
-
由于类没有封装任何不同类型的数据,是否有理由不使用或不能使用具有附加属性的单个总体信息类,该属性可以标记它是否为 X 、Y 还是 Z?
-
也许,虽然这是主要问题的一个非常普遍的例子 - 那么当一个新类
W进来并有一个P列表并且每个 P 都是文件时会发生什么 -如果你明白我的意思。猜猜我追求的是最佳实践。我想要这个文件,但有一个 X id - 我该往哪边走…… -
这个意见的依据是什么??和downvote?有最佳实践,我不确定它们是什么......
-
@Darren,它并不是真正基于意见的,但社区中的一部分人认为 stackoverflow 不是问答网站。我将尝试在后续评论中提供我的答案,因为我无法提供“答案”
-
@Darren 根据经验,您的资源接口不一定与它下面的实现细节相匹配。您的问题的非答案是,它实际上取决于您尝试在服务墙上展示哪种交互模型。您的域的这个区域是更面向文件还是更面向“X、Y 和 Z”?对此的答案将回答您的主要问题,即“文件”是否位于您的“X、Y、Z”下方,或者您的“X、Y、Z”是否位于“文件”下方。如果你是从内到外设计这个而不是“到服务”和“到服务”......
标签: c# rest asp.net-web-api restful-url