如何与 Bluemix 中的另一个应用程序共享我的应用程序的 URL?

How do I share the URL of my application with another application in Bluemix?

我在 Bluemix 上有两个应用程序,我需要将一个应用程序的 URL 提供给另一个应用程序。

$response = http_get("myOrdersApp12345.mybluemix.net/api");

在我的源代码中硬编码 URL 似乎不是个好主意...如果 url 发生变化怎么办?

硬编码 URL 或源中的任何凭据是不好的做法。在 Bluemix 中,您可以使用 VCAP_SERVICES 环境变量将这些凭证传递给您的应用程序。这是保存 Bluemix 服务凭证的相同环境变量。

您实质上是在创建您自己的组织可见的服务,并且 space 通过创建 用户提供的服务

创建一个新服务,向该服务的消费者提供 url:

$ cf cups myOrdersAppService -p "url"
url> myOrdersApp12345.mybluemix.net/api
Creating user provided service myOrdersApp in org **** / space ****
OK

然后将此服务绑定到需要此“url”信息的应用程序

$ cf bind-service myOtherApplication myOrdersAppService

myOtherApplication 如何通过解析VCAP_SERVICES 环境变量得到url。例如,在 PHP:

$services = getenv("VCAP_SERVICES");
$services_json = json_decode($services, true);

for ($i = 0; $i < sizeof($services_json["user-provided"]); $i++){
    if ($services_json["user-provided"][$i]["name"] == "myOrdersApp"){
        $ordersHost = $services_json["user-provided"][$i]["credentials"]["url"];
        $response = http_get($ordersHost);
    }
}

您可以使用相同的方法共享任何外部服务(如数据库)的凭据。当使用微服务架构时,这个特性变得非常有用。

$ cf cups myExternalDB -p "host, username, password"
host> 123.123.123.123
username> myusername
password> mypassw0rd

有关详细信息,请查看此文档:http://docs.cloudfoundry.org/devguide/services/user-provided.html

我同意 Ram 关于通过 VCAP_SERVICES 检索服务参数的建议,尤其是当它指定将服务绑定到您的应用程序时所固有的信息(如凭据)。然而,对于更普通的配置属性(例如,支持哪些语言以及翻译位于何处?应该使用什么 URL 来调用此 REST 服务?),传统方法如在命令行上传递它们、检索它们从配置文件中获取它们,或者从管理员在部署时指定的环境变量中获取它们是完全合法的。

Pat Mueller 的 Keeping secrets – how your cloud application should access credentials and other private data 很好地总结了选项和权衡。最重要的是,他强调了 而非 对敏感信息进行硬编码的重要性,特别是考虑到代码可能会存储在存储库中,而与维护的部署脚本不同,存储库中的访问权限并不明显由系统管理员提供。