RESTful API: 如何区分用户请求和前端请求?

RESTful API: how to distinguish users requests from front-end requests?

所以,我有一个 RESTful API(用 Hapi.js 构建),它有用户使用的端点和我的前端应用程序(用 Next.js 构建) . GET api/candies就是其中之一,我就以它为例

前端询问存储在我的数据库中的糖果列表,并将它们显示在任何人都可以访问的页面上(必须这样)。前端不提供 API 令牌,因为人们可以 read/use 它。但是,想要获得这份糖果列表(用它来构建他们想要的任何东西)的用户必须提供一个有效的 API 令牌(他们通过在我的前端应用程序上创建一个帐户来获得)。

我的 API 如何判断对 api/candies 的请求是来自用户还是来自我的前端应用程序,以便验证(或不验证)他们令牌的有效性?

我想知道我的问题是否也与网络抓取有关。

有人可以帮帮我吗? :D

您的要求可以通过检查不同用户代理发送的不同 headers 来解决。您还可以从 front-end 添加自定义 headers 并在后端对其进行验证。

我刚才也想过同样的问题。如果您的前端有一个客户端 REST 客户端(JS+XHR/fetch),那么我认为不可能可靠地执行此操作,因为无论您如何识别您的前端 REST 客户端,您的用户都可以复制它只是通过 CTRL+SHIFT+I 检查浏览器中的 HTTP 请求。甚至还有使用浏览器的自动化工具,例如硒。如果您有服务器端 REST 客户端(例如 PHP+CURL),则只需为前端创建一个消费者 ID 并使用令牌。即使在这种情况下,我也可以轻松编写几行代码,使用前端处理相同的请求。因此,如果您想出售在前端免费提供的相同服务来赚钱,那么您在这里就不走运了。这并不意味着没有消费者愿意为此买单。

我认为你的问题是糟糕的商业模式。