了解REST协议时的一个问题,所以想在这里与专家联系。请澄清。
REST建议不要维护服务器状态。 REST还建议分层次地获取资源,一次一个级别。考虑到这两者,服务器被认为难以保持从DB重新获取记录而不是过滤现有的块。例如,如果任何应用程序必须获取Continent信息,则REST形式的URL将为http://host:port/fetchSomeInfo/ContinentName。作为回复,该应用程序返回所有国家/地区名称,客户对此感到满意。当需要进一步的细节时,麻烦从这里开始。在响应内容上,如果客户端在任何国家/地区查询以获取其中的城市,则现在REST URL将采用http://host:port/fetchSomeInfo/ContinentName/CountryName形式。由于服务器不维护状态,因此必须使用ContinentName和CountryName重新运行数据库查询。更进一步,查询重新运行发生在每个级别,城市中的城市信息,城市中的区域信息。层次结构越多,每次都会将更多AND条件添加到数据库查询并重新运行查询。这是一个很好的设计策略吗?
答案 0 :(得分:0)
不一定。 RESTful API的核心概念是每个资源都有一个唯一的URI。通常,您将使用允许快速数据检索的路径,例如PK值。
在您获取具有特定国家/地区的特定大陆的示例中,更合适的URI将是: 的 http://host/Continents/continentID/Countries/countryID 强>
RESTful API的使用者有责任了解他想要获得国家/地区的大陆ID。 (您还可以在API中提供便利界面)。
所以RESTful服务的消费者会:
但消费者也可以免费使用STORE ID以供将来参考,从而允许他直接执行:GET http://host/continents/id/countries/id
至于您担心重新运行数据库查询,由于RESTful服务不维护状态,因此它们消耗的资源要少得多。它们本质上是数据库密集型服务。但是关系数据库针对数据检索进行了极为优化,尤其是在针对常见查询条件进行了适当索引时。
在这种情况下,我强调一个共同的建议: 避免早期优化,它会扼杀您的项目。优化何时需要优化
总而言之,如果你的RESTful服务设计得很好并且你的数据库结构合理,我怀疑你会因为重复的数据库查询而遇到任何性能问题。
答案 1 :(得分:0)
RESTfulness不是公开内部细节,而是描述服务的行为。因此它应该表现无状态。你在问题中用简单的词语提出的是"虽然我正在实施一项宁静的服务,但我可以使用缓存吗?"。答案是肯定的。只要您的服务行为正确。