REST API请求应该是客户端还是服务器端?

Alu*_*tha 1 php api ajax rest curl

例如:

有检查结果验证API,还有另一个Web应用程序将该API用作服务。根据该api响应(如果成功),用户可以进入或不进入网站

为了做到这一点,我在基础方面有问题,
我提供了两种选择(可能有很多:),任何好的选择都可以接受!)

01)。使用跨域AJAX请求并根据响应调用API。向Web应用,服务器脚本发送另一个请求并创建会话

$.get("http://api.resultval.com/v1/",
   {index_no : no,subject : sub,grade : grade},function(response_msg){
       obj = JSON.parse(response_msg);
       if(obj.msg.valid){
       // results validated marked as validated result on user cv   
       }
   }
);
Run Code Online (Sandbox Code Playgroud)

02)。无需向API发送AJAX请求,而是将用户插入的结果发送到服务器端,并使用服务器端脚本使用guzzle库调用API

 $client = new \GuzzleHttp\Client();
            $response = $client->get('http://api.resultval.com/v1/'.Input::get('index_no').'/'.Input::get('subject').'/'.Input::get('grade'));
            if($response->json()['msg']==='verified'){
             // results validated marked as validated result on user cv   
            }
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?安全性如何?我认为第二个很好!但是我仍然在考虑在客户端执行此操作的方法吗?

Kho*_*oly 5

由于以下原因,我宁愿选择在此服务器端进行操作:

  1. JavaScript可以由用户操纵。Ajax请求可能是有毒的,因为JS代码中的不良更改试图达到安全漏洞。

  2. 在ServerSide上,您有更好的选择来记录特定用户发送的调用,并根据API的结果执行操作。也许有一天您需要根据获得的结果进行昂贵的操作。

  3. 用户知道的越少越好。您的用户不需要知道您确切在呼叫什么服务。至少他们不知道API Urls和您直接发送到API的数据(使用developertools或traffic sniffer可以做到)

  4. 您不能保证可能的第三方API的安全性,但是可以针对自己的系统。如果用户可以使用发送的数据和确切的URL来跟踪正在调用的API,则用户可以尝试攻击该API。虽然您不知道API是否足够安全以承受这种攻击,但是您可以知道您的系统可以。此外,如果发生攻击或安全漏洞,您可以立即更新项目。您不能说这将在第三方项目中何时发生。我认为这是最重要的一点!