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

How can I call my REST API get method without hard-coding a URL?

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

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

这是因为我在商店里到处都是 "localhost:8080" 的硬编码实例!

例如:

server.xml(我用的是Tomcat8.0.20):

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

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

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

以上WebResource来自Jersey Client 1.8依赖,需要硬编码URL才能在指定路径访问我的API。

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

我想我正在寻找以下三种解决方案之一:

  1. 一些实现允许我使用相对路径访问我的 REST API(例如,我只需要指定“/api/get”)。我计划在生产环境中将 API 和 Webapp 部署在同一个域中,所以我认为这不会成为问题(?)
  2. 一些动态确定适当基础的方法URL,无论我在哪个环境中部署应用程序,它都可以工作
  3. 任何其他可以使我的申请在这方面无懈可击的建议

我使用

尝试了选项 2
HttpServletRequest.getRequestURL()

虽然它 returns 是正确的路径(至少在本地 - http://localhost:8080),但我不断收到以下异常:

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

所以我暂时不使用这种方法。

感谢任何帮助。

谢谢:)

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

这意味着您不能使用本地主机,您将需要一个端点,该端点将从使用您的 API.

的所有移动或 Web 应用程序访问

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

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

并且这个基础 URL (www.myApi.org) 它必须被所有使用你的 API 的客户知道。