最近我遇到了一个问题,我不知道在REST API中哪种方法是好的(标准的)处理方法。
问题很简单,我们都知道在标准的REST API中,我们使用Get请求来获取数据,Post请求来向服务器发送数据,以创建/更新资源。
为此,如果我们想获得应用程序中所有用户的列表,我们将使用带有如下url的GET请求:HTTP GET /用户
这很简单。让我们来看看我们的场景。我们的应用程序允许用户创建自己的帖子,人们可以评论、点赞或关注他们或其他用户创建的帖子。最重要的是,我们有数十亿的现有用户。
现在,假设我们有一个帖子,已经与成千上万的用户进行了交互(热门帖子),我们希望返回该用户列表。要使此工作正常进行,我们至少需要将帖子ID发送到服务器以供查找。显然,我们不希望一次返回数千个用户的列表。这对于前端处理来说太多了。为此,我们会引入一个分页号和页面大小来限制返回的用户数。2因此,除了帖子ID,我们还需要发送页面号和页面大小。
现在,我们有两种方法来构造请求:
GET request: /users?postId=123&pageNumber=1&pageSize=10
POST request /users with body request
{
"postId": 123,
"pageNumber": 1,
"pageSize": 10
}
GET看起来是一个标准的方法,因为它查询数据并将数据返回到前端,但同样,postId是公开的。另一方面,POST更安全一些,因为参数不存储在浏览器中
哪一种更标准,在这种情况下推荐使用?
2条答案
按热度按时间rkttyhzu1#
使用获取。
您对URL中出现的帖子ID有何顾虑?
如果所有相关的端点都是安全的,那么用户就不能对该id做任何事情,除非经过身份验证并被授权对该帖子执行操作。
此外,发布的请求的主体可以在浏览器的开发工具中查看,所以发布只是对数据进行了一点模糊处理,实际上并没有保护数据。
jgzswidk2#
获取。您应该保护程序,使其不被滥用。
如果你发送一个post请求来获取成千上万的数据,你的服务器就会宕机。
你应该使用get和pagination来得到最好的结果。