簡體   English   中英

如何在不對URL進行硬編碼的情況下調用REST API get方法?

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

我正在開發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客戶端1.8依賴項,它需要一個硬編碼的URL才能在指定的路徑上訪問我的API。

所有這些在本地都可以正常運行,但是當我將API / Webapp部署到生產環境中時,這肯定會停止工作,對嗎?

我想我正在尋找以下三種解決方案之一:

  1. 一些實現允許我使用相對路徑訪問REST API(例如,我僅需指定“ / api / get”)。 我計划在生產中的同一域上部署API和Webapp,所以我認為這不是問題。
  2. 動態確定適當的基本URL的某種方法,無論我在其中部署應用程序的環境如何,該方法都將起作用
  3. 在這方面使我的應用程序無懈可擊的任何其他建議

我嘗試使用

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>".

所以我暫時不使用這種方法。

任何幫助表示贊賞。

謝謝 :)

為了調用標准的Web服務或REST API,您將需要在Internet中發布應用程序。

這意味着您不能使用localhost,您將需要一個EndPoint,可以從使用該API的所有移動應用程序或Web應用程序中訪問該EndPoint。

該端點是您在客戶端中編寫的內容

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

並且此基本URL(www.myApi.org)必須由使用您的API的所有客戶端知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM