如何在不对URL进行硬编码的情况下调用我的REST API get方法?

时间:2015-03-11 12:17:17

标签: java spring rest tomcat jersey

我正在开发REST API,其想法是创建一个将调用此API的网站(Java Webapp),以及一个也将调用API的移动应用程序。

然而,尽管无法在线发布上述任何内容(我自己的域名),但如果部署在我的计算机以外的任何地方,我无法看到我的应用程序如何工作。

原因是因为我有" localhost:8080"的硬编码实例。遍布商店!

例如:

server.xml (我使用的是Tomcat 8.0.20):

<Engine defaultHost="localhost" name="Catalina">
...
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

SomeClass.java (这是我的Web应用程序中的一个类文件,而不是我的REST API)

final WebResource webResource = client.resource( "http://localhost:8080/api/get" );

上述WebResource来自Jersey Client 1.8依赖项,需要使用硬编码的URL来访问指定路径的API。

这一切在本地都可以正常工作,但当我将API / Webapp部署到生产环境中时,这肯定会停止工作,对吗?

我想我在这里寻找三种解决方案之一:

  1. 允许我使用相对路径访问我的REST API的一些实现(所以我只需要指定&#34; / api / get&#34;例如)。我打算在生产中的同一个域上部署API和Webapp,所以我认为这不是一个问题(?)
  2. 动态确定适当的基本网址的一些方法,无论我在哪个环境中部署应用程序,都可以使用
  3. 使我的申请在这方面具有防范性的任何其他建议
  4. 我使用

    尝试了选项2
    HttpServletRequest.getRequestURL()
    

    虽然它返回正确的路径(至少在本地 - http://localhost:8080),但我仍然遇到以下异常:

    com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: The element type "hr" must be terminated by the matching end-tag "</hr>".
    

    所以我现在已经不再使用这种方法了。

    感谢任何帮助。

    谢谢:)

1 个答案:

答案 0 :(得分:0)

要调用标准Web服务或REST API,您需要在Internet中发布应用程序。

这意味着您无法使用localhost,您将需要一个可以从使用您的API的所有移动或Web应用程序访问的EndPoint。

此端点就是您在客户端中编写的内容

client.resource("http://www.myApi.org/api/get");

此基本URL(www.myApi.org)必须为使用您的API的所有客户所知。