Php RESTAPI请求应该是客户端还是服务器端?

Php RESTAPI请求应该是客户端还是服务器端?,php,ajax,api,rest,curl,Php,Ajax,Api,Rest,Curl,例如: 有一个检查结果验证API,还有一个web应用程序将该API用作服务。根据api响应,如果成功,用户是否可以进入网站 要做到这一点,我有一个基本问题, 我有两个选择,可能有很多:任何一个好的都可以接受 01。使用跨域AJAX请求并根据响应调用API。向web应用程序、服务器脚本发送另一个请求并创建会话 $.get("http://api.resultval.com/v1/", {index_no : no,subject : sub,grade : grade},function(r

例如:

有一个检查结果验证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   
       }
   }
);
02。不要向API发送AJAX请求,而是将用户插入的结果发送到服务器端,并使用服务器端脚本使用guzzle库调用API


最好的方法是什么?保安怎么样?我觉得第二个很好!但我仍然在想,在客户端有一种方法可以做到这一点?

考虑使用以下方法实现您的解决方案:


JSON Web Token JWT是一种紧凑的URL安全方法,用于表示在双方之间传输的声明。JWT中的声明被编码为使用JSON Web签名进行数字签名的JSON对象JWS

考虑使用以下方法实现您的解决方案:


JSON Web Token JWT是一种紧凑的URL安全方法,用于表示在双方之间传输的声明。JWT中的声明被编码为使用JSON Web签名JWS进行数字签名的JSON对象,我宁愿选择在服务器端执行此操作,原因如下:

JavaScript可以由用户操作。Ajax请求可能是有害的,因为JS代码中试图达到安全漏洞的错误更改

在服务器端,您有更好的选项记录特定用户发送的调用,并根据API提交的结果执行操作。也许有一天你需要根据你得到的结果做昂贵的手术

用户知道的越少越好。你的用户不需要知道你到底在呼叫什么服务。至少他们不知道API URL和您直接发送到API的数据,而使用developertools或流量嗅探器可以做到这一点

您不能保证可能的第三方API的安全性,但可以为您自己的系统提供安全性。如果用户有可能通过发送的数据和准确的URL跟踪您正在调用的API,则用户可能会尝试攻击此API。虽然您不知道API是否足够安全以抵御这种攻击,但您可以知道您的系统确实如此。此外,如果发生攻击或安全漏洞,您还可以立即更新项目。你不能说在第三方项目中什么时候会发生这种情况。我认为这是需要考虑的最重要的一点


我宁愿选择在服务器端执行此操作,原因如下:

JavaScript可以由用户操作。Ajax请求可能是有害的,因为JS代码中试图达到安全漏洞的错误更改

在服务器端,您有更好的选项记录特定用户发送的调用,并根据API提交的结果执行操作。也许有一天你需要根据你得到的结果做昂贵的手术

用户知道的越少越好。你的用户不需要知道你到底在呼叫什么服务。至少他们不知道API URL和您直接发送到API的数据,而使用developertools或流量嗅探器可以做到这一点

您不能保证可能的第三方API的安全性,但可以为您自己的系统提供安全性。如果用户有可能通过发送的数据和准确的URL跟踪您正在调用的API,则用户可能会尝试攻击此API。虽然您不知道API是否足够安全以抵御这种攻击,但您可以知道您的系统确实如此。此外,如果发生攻击或安全漏洞,您还可以立即更新项目。你不能说在第三方项目中什么时候会发生这种情况。我认为这是需要考虑的最重要的一点


你说的是登录吗?因此,被调用的API决定用户是否可以访问或不访问传输的数据?@KhorneHoly Yeh这是我的问题@我更喜欢你的第二个解决方案。最好在服务器端调用您的API,用户不需要知道您正在调用API,使用AJAX,他们可以知道您的API URL和在浏览器中使用开发工具发送的数据。编辑问题并添加特定的库来完成任务!你说的是登录吗?因此,被调用的API决定用户是否可以访问或不访问传输的数据?@KhorneHoly Yeh这是我的问题@我更喜欢你的第二个解决方案。最好是在服务器端调用API,用户不需要知道您正在调用API,而使用AJAX,他们可以知道您的API URL和使用开发工具发送的数据
在浏览器中。编辑问题并添加特定库以执行任务!
 $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   
            }