2016-09-23 80 views
0

好吧,有一個名爲VENDOR_API_SERVER的遠程服務器,我正在點擊以獲取各種數據。我有一個運行在MY_APP_SERVER上的應用程序,其中包含一個使用AJAX處理來自/來自VENDOR_API_SERVER的請求和響應的JavaScript文件。然後我有通過<script>標籤嵌入上述JavaScript文件的MY_USER_FACING_APP。所有3個應用程序運行在不同的主機當JavaScript文件使其REST調用VENDOR_API_SERVER時,我希望從MY_APP_SERVER執行該文件,然後將響應數據提供給MY_USER_FACING_APP上的頁面。使用下面的配置,正在從MY_USER_FACING_APP執行JavaScript文件,這正是我試圖避免的。上MY_APP_SERVER是否有可能獲得遠程JavaScript文件在嵌入頁面之前在服務器上執行?

req.js
URL(例如):對MY_USER_FACING_APP http://my_app_server.io/js/req.js

var jqxhr = $.get("http://vendor_api_server.io/api/dothis", function() { 
    console.log('request made'); 
}) 
    .done(function() { 
    console.log('success - check log'); 
    }) 
    .fail(function() { 
    console.log('fail - wassup'); 
    }) 

results.html
URL(例如):http://my_user_facing_server.io/search/results.html

<!doctype html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Results</title> 
    <script src="http://my_app_server.io/js/req.js"></script> 
</head> 

<body> 
    <h1>Results</h1> 
</body> 
</html> 

我說MY_APP_SERVER不能讓MY_APP_SERVER執行javascript文件,然後才能將響應數據提供給MY_USER_FACING_APP,我想必須有一些安全,優雅的方式來使用MY_APP_SERVER作爲代理/委託,但我很難包裝我的頭在附近。或者我正在嘗試做的事情可能只是其核心內容的巨大破綻......我不知道,因爲我對這種類型的開發很陌生。

有任何洞察力和/或智慧可以傳授的人嗎?

+0

爲什麼不在YOUR_APP_SERVER中創建服務器端請求而不是javascript請求? –

+0

爲什麼腳本駐留在my_app_server而不是它屬於的my_user_facing_app?它有什麼特別之處?什麼是my_app_server的好處? – Bergi

+0

是的,無論腳本如何,您的服務器都可以。但不能簡單地通過執行一個專門用於瀏覽器環境的腳本。 – Bergi

回答

0

現在,我已將JavaScript插件文件向駐留在MY_APP_SERVER上的PHP頁面發出AJAX請求。該頁面反過來使用cURL對REND調用VENDOR_API_SERVER,並將返回的數據發送回javascript/plugin文件,以便在CUSTOMERS_USER_FACING_APP上運行的應用程序中對DOM進行操作和顯示。

plugin.js上MY_APP_SERVER
URL(例如):http://my_app_server.io/plugin.js

var jqxhr = $.get("http://my_app_server.io/curl.php", function() { 
    console.log('request made'); 
}) 
    .done(function(data) { 
    console.log('success - check log'); 
    console.log('response data: %o', data); 
    }) 
    .fail(function() { 
    console.log('fail - wassup!'); 
    }) 


上MY_APP_SERVER curl.php
URL(例如):http://my_app_server.io/curl.php

<?php 
$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL,"http://vendor_api_server.io/api/dothis"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 
      "postvar1=value1&postvar2=value2&postvar3=value3"); 


// receive server response ... 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$server_output = curl_exec ($ch); 

curl_close ($ch); 

print $server_output; 

?> 


結果。HTML上CUSTOMERS_USER_FACING_APP
的網址(例如):http://customers_user_facing_server.io/search/results.html

<!doctype html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <title>Results</title> 
    <script src="http://my_app_server.io/js/req.js"></script> 
</head> 
<body> 
    <h1>Results</h1> 
</body> 
</html> 

所以我仍然不相信這是最好的方式,但它確實實現我保持請求的起源目標到來自MY_APP_SERVER而不是CUSTOMERS_USER_FACING_APP的API。

請隨時在我在這裏完成的任何事情中打洞。對我來說,它似乎很「解決問題」。我很想聽聽有關不那麼棘手的解決方案的任何想法。

相關問題