Ibm cloud 如何与Bluemix中的其他应用程序共享我的应用程序的URL?

Ibm cloud 如何与Bluemix中的其他应用程序共享我的应用程序的URL?,ibm-cloud,microservices,Ibm Cloud,Microservices,我在Bluemix上有两个应用程序,我需要将一个应用程序的URL提供给另一个 $response = http_get("myOrdersApp12345.mybluemix.net/api"); 在我的源代码中硬编码URL似乎是个坏主意。。。如果url发生更改怎么办?硬编码源中的url或任何凭据是一种糟糕的做法。在Bluemix中,可以使用VCAP_服务环境变量将这些凭据传递给应用程序。这与保存Bluemix服务凭据的环境变量相同 通过创建用户提供的服务,您实际上是在创建组织和空间可见的您自

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

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

在我的源代码中硬编码URL似乎是个坏主意。。。如果url发生更改怎么办?

硬编码源中的url或任何凭据是一种糟糕的做法。在Bluemix中,可以使用VCAP_服务环境变量将这些凭据传递给应用程序。这与保存Bluemix服务凭据的环境变量相同

通过创建用户提供的服务,您实际上是在创建组织和空间可见的您自己的服务

创建一个新服务,向此服务的使用者提供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);
    }
}

有关更多详细信息,请查看此文档:

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

通过创建用户提供的服务,您实际上是在创建组织和空间可见的您自己的服务

创建一个新服务,向此服务的使用者提供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);
    }
}

有关更多详细信息,请查看此文档:

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


Pat Mueller的文章很好地总结了各种选择和权衡。最重要的是,他强调了不硬编码敏感信息的重要性,特别是考虑到代码可能会存储在一个不确定谁可以访问的存储库中,与系统管理员维护的部署脚本不同。

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


Pat Mueller的文章很好地总结了各种选择和权衡。最重要的是,他强调了不硬编码敏感信息的重要性,特别是考虑到代码可能会存储在一个存储库中,与系统管理员维护的部署脚本不同,在该存储库中谁将拥有访问权限并不明显。

但如果值发生变化,您必须从用户提供的服务中解除绑定/重新绑定您的应用程序,才能查看VCAP_服务中更改的值,对吗?或者有没有办法让它动态更新?因此,如果您在问题中只设置一个像URL这样的值,那么这样做是否真的比仅使用cf set env有任何优势?对。cf uups更新服务信息,然后cf解除绑定服务、cf绑定服务和cf重新启动应用程序。cups代替set env的一个优点是…在Bluemix控制台中轻松可视化依赖关系映射,尤其是绑定到多个应用程序时。第二,虽然不适用于单值实体,但您可以获得Liberty server.xml和客户端库对外部服务的自动配置支持。但是,如果值确实发生了变化,您必须从用户提供的服务中解除绑定/重新绑定您的应用程序,以便在VCAP_服务中看到变化的值,对吗?或者有没有办法让它动态更新?因此,如果您在问题中只设置一个像URL这样的值,那么这样做是否真的比仅使用cf set env有任何优势?对。cf uups更新服务信息,然后cf解除绑定服务、cf绑定服务和cf重新启动应用程序。cups代替set env的一个优点是…在Bluemix控制台中轻松可视化依赖关系映射,特别是 绑定到多个应用程序时为y。第二,虽然不适用于单值实体,但您可以获得Liberty server.xml和客户端库对外部服务的自动配置支持。