向WEB API添加自定义路由是否使其成为非REST?

向WEB API添加自定义路由是否使其成为非REST?,rest,soap,asp.net-web-api,Rest,Soap,Asp.net Web Api,快速提问-昨天我在读有关RESTful服务的文章,有人问为什么SOAP不是RESTful。答案是SOAP没有REST所要求的“接口通用性”属性 然后我突然想到,我一直在向Web API添加自定义路由,如下所示: 通过这样做-我使我的web API非通用,从而使服务非RESTful,对吗?这不是什么大不了的事,我只是想知道我是否正确地掌握了这些概念。好吧,剩下的部分会指导你单独确定解决方案,而不是对它们采取行动。 例如,您可能在Person上有一个action addComment,您的路线是

快速提问-昨天我在读有关RESTful服务的文章,有人问为什么SOAP不是RESTful。答案是SOAP没有REST所要求的“接口通用性”属性

然后我突然想到,我一直在向Web API添加自定义路由,如下所示:


通过这样做-我使我的web API非通用,从而使服务非RESTful,对吗?这不是什么大不了的事,我只是想知道我是否正确地掌握了这些概念。

好吧,剩下的部分会指导你单独确定解决方案,而不是对它们采取行动。 例如,您可能在Person上有一个action addComment,您的路线是

POST persons/2/addComment
这将使它变得不安宁。实现这一目标的理想方法是:
POST persons/2/评论
删除评论
DELETE persons/2/comments/{commebntid}

因此,如果您不这样做,您的服务将变得非restful。很难创建一个完全restful的界面。 例如,如果您有一个对象帐户,您可以直接增加或减少余额
账户/2
。您可能有取款和存款操作<代码>记账后/2/提取。在rest中,您需要在递减余额(PUT)后将其作为参数传递。在某些情况下,您可能不想这样做。您可能不想让世界知道用户的平衡。那么你就不能轻易地使用put了。您必须创建一个新实体:
交易
,并创建交易,并根据交易计算账户余额


没有通用API这样的东西。因为实体和操作不同,所以不能交替使用amazons api和facebooks api。不要太担心泛化。只要理解什么是宁静的方式,看看你是否能实现它。如果你必须稍微调整一下,那很好

谢谢,我们的观点是一致的。我有一些类似于/timeline/getTimeTable的东西-因此是非restful的。@spike我完全建议您阅读restful服务食谱-它可以帮助您决定采取哪种方法,同时确定各种权衡: