所以在REST中我有一个产品资源......
http://api/product
问题是如果我有一些域逻辑?在面向对象的世界中,我可能有
public class product
{
int id;
public product(){}
public int Calc(int first, int second)
{
return first + second;
}
}
我如何表示此业务逻辑?我想我能做到......
public int GetCalc(int id, int first, int second)
{
localProduct = products[id];
return localProduct(first + second);
}
因此,服务的URL将变为
http://api/product/Calc?id=1&first=1&second=2
或(或者)
http://api/product/1/Calc?first=1&second=2
这会返回正确的结果....我只是想知道这是否应该代表业务逻辑?或者我应该以不同的方式做这件事还是试图完全避免它?我欢迎有关如何改进这一点的任何想法......
答案 0 :(得分:1)
这可能在很大程度上取决于您构建的系统。花些时间思考这会如何随着时间的推移而发展,因为这很难重构。你前进的总体方向看起来不错。
此API调用
http://api/product/Calc?id=1&first=1&second=2
看起来对我来说。因此,您有一个Product
控制器,其方法为Calc
,并且接收参数id
,first
和second
。
我不太清楚如何处理这个API
http://api/product/1/Calc?first=1&second=2
对我而言,Product
有ids
个id
,每个Calc
都可以使用参数first
和second
调用方法{{1}} 。也许在你的业务领域它是有道理的,我只是没有看到它。
答案 1 :(得分:0)
好吧,从理论上讲,REST不应该处理逻辑,而应该处理状态(REST =代表性状态转移)。
当然,我可以看到你的观点,如果我需要计算值,该怎么办?
在我看来,你应该尽量避免它。
如果那是不可能的,我只会公开一个ViewModel,它代表你的对象的状态,并保持模型与外界隐藏的逻辑。这样可以确保您进行显式转换,并且还明确声明您要发送对象的状态而不是对象本身。
但它基本上取决于情况,并没有真正的硬性规则。我会说现在用最有意义的东西去。如果您发现它变得笨拙,请将其重构为更好的解决方案。