[英]Efficiency of RESTful APIs
我当前正在创建一个应用程序(例如,Notes应用程序-Web应用程序+移动应用程序)。 我想在这里使用RESTful API,所以我阅读了很多有关此主题的内容,发现那里存在很多歧义。
因此,让我们从头开始。 REST的开始是我们必须首先请求/(根),然后它返回可以进一步检索的路径列表,等等,等等。这不是REST完全浪费的第一部分吗? 代替固定的路径,我们每次想做某事时都必须获取它们。 罗。
我遇到的第二个问题是批量操作 。 如何在REST中实现它们? 假设用户暂时无法访问互联网,进行了一些更改,并且都必须在服务器上进行。 假设用户修改了50个便笺,添加了30个便笺,然后删除了20个便笺。我们现在必须发出100个单独的请求 。 进行批量操作的方法将非常有用-我看到了这个stackoverflow主题: 在REST Web服务中处理批处理操作的模式? 但实际上我没有发现任何有趣的东西。 只要您想对一种资源进行一种操作就可以了。
最后但并非最不重要的-检索整个项目集合。 在写一个我提到的示例应用程序(便笺应用程序)时,您可能想一次检索所有项目集合(便笺,标签,可用的便笺颜色等)。 使用REST,您必须首先检索项目链接列表,然后一个个地获取项目。 100笔记=超过100个请求。
由于我目前正在学习所有这些REST知识,所以我在这里所说的可能完全错了。 无论如何,我读得越多,对我来说看起来就越可怕。 所以最后我的问题是:我在哪里错和/或如何解决我提到的问题?
这都是关于资源的 。 通过统一接口(通常通过URI和HTTP方法)获得的资源。
POST
包含多个项目的特定资源的有效载荷。 同样,这完全取决于您使用/提供的资源,最终取决于服务器实现如何处理请求。 您的100个请求的案例:我可能会坚持100个请求。 编写起来很干净,开销也不是那么大。 GET bookCollection/
vs GET book/1
, GET/book/2
...甚至GET book/all
。 或者也许是GET book/?includeDetails=true
来返回所有与GET
一一对应的细节相同的书。 我认为此链接可以为您设计RESTful服务提供有趣的提示: https : //templth.wordpress.com/2014/12/15/designing-a-web-api/ 。
也就是说,这是我对您的问题的回答:
无需为根路径实现资源。 因此,我认为您是指HATEOS。 另外,还不需要有效载荷内的链接。 否则,您可以使用Swagger或RAML等可用格式来记录RESTful服务。 这向您的最终用户显示可用的内容。
关于批量操作,您可以自由使用POST
或PATCH
方法在列表资源上实施此操作。 我认为这两个答案可能对您有所帮助:
REST API-在单个请求中 批量创建或更新-REST API- 在单个请求中 批量创建或更新
如何更新REST资源集合 - 如何更新REST资源集合
实际上,您可以随意考虑方法GET
所需的内容。 这意味着由资源(列表资源和元素资源)管理的根元素可以包含其提示以及依赖项。 因此,您可以在返回的内容中包含多个级别。 例如,您可以为元素Book
引用这样的内容,该元素引用Author
的列表:
GET /books { "title": "the title", (...) "authors": [ { "firstName": "first name", "lastName": last name" }, { (...) }, (...) ] }
您会注意到,您可以利用查询参数来要求RESTful服务恢复期望的水平。 例如,如果您只想要书的提示或与相应作者的书的提示:
GET /books { "title": "the title", (...) } GET /books?include=authors { "title": "the title", (...) "authors": [ { "firstName": "first name", "lastName": last name" }, { (...) }, (...) ] }
您会注意到,您可以在此处区分两个概念:
OData规范通过其功能“导航链接”及其查询参数expand
解决此类问题。 有关更多详细信息,请参见以下链接:
希望对您有帮助,蒂埃里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.