我目前正在创建一个应用程序(例如,应用笔记应用程序,例如webapplication + mobile app)。我想在这里使用RESTful API,所以我读了很多关于这个主题的内容,我发现那里有很多含糊不清的内容。
所以让我们从头开始吧。 REST的开头是我们必须首先请求/(root),然后它返回我们可以进一步检索的路径列表等等。难道这不是REST完全浪费的第一部分吗?我们必须在每次想要做某事时获得它们,而不是僵硬的路径。全息
我遇到的第二个问题是批量操作。如何在REST中实现它们?假设用户暂时无法访问互联网,进行了一些更改,所有这些都必须在服务器上进行。所以,假设用户修改了50个音符,添加了30个音符并删除了20.我们现在必须进行 100个单独的请求。进行批量操作的方法非常有用 - 我看到了这个stackoverflow主题:Patterns for handling batch operations in REST web services?但我实际上并没有发现任何有趣的内容。只要您想在一种资源上进行一种操作,一切都会好的。
最后但并非最不重要 - 检索整个项目集合。在编写我提到的示例应用程序时 - 注意应用程序 - 您可能想要一次检索所有项目集合(注释,标签,可用的注释颜色等)。使用REST,您必须首先检索项链接列表,然后逐个获取项。 100个音符=超过100个请求。
由于我目前正在学习所有这些REST的东西,我在这里说的可能完全错了。无论如何,我读的越多,它对我来说就越可怕。所以我的问题最终是:我错在哪里和/或如何解决我提到的问题?
答案 0 :(得分:2)
关于资源的全部内容。通过统一接口获得的资源(通常通过URI和HTTP方法)。
POST
包含多个项目的有效负载停止到特定资源。同样,它取决于您使用/提供的资源以及最终服务器实现如何处理请求。您的100个请求的情况:我可能会坚持100个请求。写得很干净,开销也不大。GET bookCollection/
vs GET book/1
,GET/book/2
...甚至GET book/all
。或者也许GET book/?includeDetails=true
可以将所有与GET
相同的详细信息的书逐一归还。答案 1 :(得分:0)
我认为此链接可以为您提供设计RESTful服务的有趣提示:https://templth.wordpress.com/2014/12/15/designing-a-web-api/。
那就是说,这是我对你问题的回答:
无需为根路径实现资源。有了这个,我认为你提到了HATEOS。此外,还不需要有效载荷内的链路。否则,您可以使用Swagger或RAML等可用格式来记录您的RESTful服务。这将向您的最终用户展示可用的内容。
关于批量操作,您可以自由使用方法POST
或PATCH
在列表资源上实现此操作。我认为这两个答案对您有所帮助:
REST API - 在单个请求中批量创建或更新 - REST API - Bulk Create or Update in single request
如何更新REST资源集 - How to Update a REST Resource Collection
事实上,您可以自由地考虑方法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
。有关详细信息,请参阅以下链接:
希望它可以帮到你, 亨利