2015-03-11 2 views
1

Я занимаюсь разработкой REST API с идеей создания веб-сайта (Java Webapp), который будет вызывать этот API, и мобильного приложения, которое также будет вызывать API.Как я могу вызвать метод REST API, чтобы получить метод без жесткого кодирования URL?

Однако, несмотря на то, что вы нигде не публикуете ни одно из указанных выше онлайн (в моем собственном домене), я не вижу, как мое приложение будет работать, если оно будет развернуто в любом месте, кроме моего компьютера.

Причина этого в том, что у меня есть жестко закодированные экземпляры «localhost: 8080» по всему магазину!

Например:

server.xml (я использую Tomcat 8.0.20):

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

SomeClass.java (Это один из файлов классов в моем веб-приложение , а не мой REST API)

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

выше WebResource от 1,8 зависимости Джерси клиента, и REQ uire жестко закодированный URL для доступа к моему API по указанному пути.

Все это прекрасно работает на месте, но, конечно, когда я развертываю API/Webapp в производство, это перестанет работать, верно?

Я предполагаю, что я ищу один из трех решений здесь:

  1. Некоторые реализации позволяет мне получить доступ к моему REST API, используя относительные пути (так что я только должен указать «/ апи/получить», например,). Я планирую развертывать API и Webapp в одном домене в производстве, поэтому я предполагаю, что это не будет проблемой (?)
  2. Некоторые методы динамического определения соответствующего базового URL-адреса, которые будут работать независимо от среда, развернуть приложение в
  3. любых других предложений, которые сделали бы мое приложение пуленепробиваемое в этом отношении

Я попытался вариантом 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>". 

поэтому я выводящий от использования этого метода в настоящее время.

Любая помощь приветствуется.

Спасибо :)

+0

Это исключение не имеет ничего общего с вашей проблемой URL-адреса - посмотрите на трассировку стека, чтобы узнать, откуда она. –

+0

Это единственная строка в исключении (нет следа, похоже, что она была подавлена). В любом случае ни один из моих файлов HTML/XSL не содержит элемента


. Мое исследование подсказывает мне, что это исключение вызвано прерванным ответом, результатом чего является не-правильно сформированный XML. – Adam

+0

Ну, если нет трассировки стека, это звучит так, как будто есть какая-то диагностическая проблема - неясно, где вы видите это исключение вообще. –

ответ

0

Для того, чтобы позвонить в стандартный Webservice или REST API вам нужно будет опубликовать приложение в Интернете.

Это означает, что вы не можете использовать localhost, вам понадобится EndPoint, к которому будут доступны все мобильные или веб-приложения, которые используют ваш API.

Это конечная точка, что вы сочинительство в вашем клиенте

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

И эта база URL (www.myApi.org), оно должно быть известно всем клиентам, которые используют свой API.

+0

Мне нравится этот ответ, но как я могу проверить его локально? – Adam

+0

Чтобы протестировать локально, вы можете сделать несколько вещей, зависит от вашего проекта. Основываясь на приложении с Tomcat sever и приложением для Android, чтобы проверить его, если бы я был вами, у меня был бы локальный сервер, и я сгенерирую специальный андроид apk для тестирования локально с вашей локальной конечной точкой. После тестирования всего, у меня будет производственный сервер с проверенным кодом, а также конечный андроид apk с конечной точкой производства. – AntuanSoft

+0

Итак, нет способа избежать дублирования? Постскриптум извините, я не могу проголосовать за ваш ответ, видимо, у меня недостаточно репутации ... – Adam

Смежные вопросы