Лучший подход к созданию URL-адреса отдыха для вызова внешнего API в Java и SpringBoot

Я работаю в проекте SpringBoot, где я разрабатываю конечную точку отдыха, которая получит несколько параметров, и на основе этих параметров я создам uri и вызову другую внешнюю конечную точку для получения изображения.

Прямо сейчас у меня есть контроллер отдыха со следующей конечной точкой:

 @GetMapping(value = "/{param1}/{param2}/{param3}/{param4}", produces = MediaType.IMAGE_JPEG_VALUE)
    public byte[] getImageryBaseMap(@PathVariable("param1") Long param1, @PathVariable("param2") Long param2,
                                    @PathVariable("param3") Long param3, @PathVariable("param4") Long param4)
    throws IOException{
        //calls my service
        return myService.getMyMethod(param1, param2, param3, param4);
    }

В классе myService я вызываю внешнюю конечную точку.

 public byte[] retrieveImageryBaseMap(Long param1,  Long param2, Long param3, Long param4){
        String url = "https://host-name:6443/external/Image/export?bbox = "+ param1 +"%" + param2+ "+%"+ param3 + "%" + param4 +"&format=png&f=image";

       // here I call the external api endpoint to retrieve an image
        byte[] image = getImage(url);
        return image;
    }

Мои вопросы были бы такими:

1) Каков наилучший подход / методы управления созданием указанного выше URL-адреса? Я в основном жестко закодировал почти все URL-адреса выше, просто заменив значения параметрами, полученными из метода retrieveImageryBaseMap. Хотел бы знать, есть ли для этого лучший подход или все в порядке.

2) Я также жестко запрограммировал имя хоста и порт в URL-адресе String url = "https://host-name:6443/external/Image/export?bbox = "+ param1 +"%" + param2+ "+%"+ param3 + "%" + param4 +"&format=png&f=image";. Сейчас я просто тестирую это, используя имя хоста разработчика, но в производстве имя хоста и порт будут другими. Итак, также хотел бы спросить, как лучше всего управлять именем хоста в URL-адресе? Следует ли мне жестко запрограммировать это или использовать другой подход?

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

Ваше здоровье!

Один небольшой вопрос, почему вы передаете параметры через PathVariable?

Mykhailo Moskura 17.12.2018 03:16

Вы можете прокрутить этот пост stackoverflow.com/questions/13715811/…

Mykhailo Moskura 17.12.2018 03:20

Да, переменная пути

Rafael Paz 17.12.2018 03:41

Если эти параметры поступают от интернет-клиентов, вы В самом деле хотите проверить их перед построением из них URL.

Andy Brown 17.12.2018 10:01

@AndyBrown - это спокойная конечная точка. Клиент пришлет географические координаты.

Rafael Paz 17.12.2018 10:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
2 965
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать UriComponentBuilder для таких целей, он очень гибкий.

Вот пример:

String URI = UriComponentsBuilder.newInstance()
      .scheme("https").host("host-name").port(6443).pathSegment("external”,”Image”,”export”)
      .queryParam(“paramName1”, value1)
      .queryParam(“paramName2”,value2)
      .build(). toUriString();

Вот URL для документации https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/util/UriComponentsBuilder.html

Спасибо @Mykhailo! Я проверю это! Очень оценил это!

Rafael Paz 17.12.2018 02:54

Добавлен пример. Спасибо

Mykhailo Moskura 17.12.2018 03:10

@RafaelPaz В дополнение к этому я настоятельно рекомендую вам сохранить базовый URL-адрес https://host-name:6443/external/Image/ в файле application.properties вместо жесткого кодирования в коде

Kunal Puri 17.12.2018 03:10

Спасибо за подсказку @KunalPuri! Сделаю это! Большое спасибо за вашу помощь!

Rafael Paz 17.12.2018 03:12

Еще раз спасибо @MykhailoMoskura очень помог, дружище! :)

Rafael Paz 17.12.2018 03:40

Другие вопросы по теме