REST是首选吗?

时间:2016-02-23 16:02:12

标签: rest

了解REST协议时的一个问题,所以想在这里与专家联系。请澄清。
REST建议不要维护服务器状态。 REST还建议分层次地获取资源,一次一个级别。考虑到这两者,服务器被认为难以保持从DB重新获取记录而不是过滤现有的块。例如,如果任何应用程序必须获取Continent信息,则REST形式的URL将为http://host:port/fetchSomeInfo/ContinentName。作为回复,该应用程序返回所有国家/地区名称,客户对此感到满意。当需要进一步的细节时,麻烦从这里开始。在响应内容上,如果客户端在任何国家/地区查询以获取其中的城市,则现在REST URL将采用http://host:port/fetchSomeInfo/ContinentName/CountryName形式。由于服务器不维护状态,因此必须使用ContinentName和CountryName重新运行数据库查询。更进一步,查询重新运行发生在每个级别,城市中的城市信息,城市中的区域信息。层次结构越多,每次都会将更多AND条件添加到数据库查询并重新运行查询。这是一个很好的设计策略吗?

2 个答案:

答案 0 :(得分:0)

不一定。 RESTful API的核心概念是每个资源都有一个唯一的URI。通常,您将使用允许快速数据检索的路径,例如PK值。

在您获取具有特定国家/地区的特定大陆的示例中,更合适的URI将是: 的 http://host/Continents/continentID/Countries/countryID

RESTful API的使用者有责任了解他想要获得国家/地区的大陆ID。 (您还可以在API中提供便利界面)。

所以RESTful服务的消费者会:

  1. 获取http://host/continents
  2. 搜索大陆数据以获取所需的大陆ID
  3. 获取http://host/continents/id/countries
  4. 搜索国家/地区数据以获取所需的国家/地区ID
  5. 获取http://host/continents/id/countries/id
  6. 但消费者也可以免费使用STORE ID以供将来参考,从而允许他直接执行:GET http://host/continents/id/countries/id

    至于您担心重新运行数据库查询,由于RESTful服务不维护状态,因此它们消耗的资源要少得多。它们本质上是数据库密集型服务。但是关系数据库针对数据检索进行了极为优化,尤其是在针对常见查询条件进行了适当索引时。

    在这种情况下,我强调一个共同的建议: 避免早期优化,它会扼杀您的项目。优化何时需要优化

    总而言之,如果你的RESTful服务设计得很好并且你的数据库结构合理,我怀疑你会因为重复的数据库查询而遇到任何性能问题。

答案 1 :(得分:0)

RESTfulness不是公开内部细节,而是描述服务的行为。因此它应该表现无状态。你在问题中用简单的词语提出的是"虽然我正在实施一项宁静的服务,但我可以使用缓存吗?"。答案是肯定的。只要您的服务行为正确。