Лучший подход для создания rest url для вызова внешнего API в Java и SpringBoot - PullRequest
0 голосов
/ 17 декабря 2018

Я работаю в проекте 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"; Сейчас я просто тестирую это с помощью devимя хоста, но в производстве имя хоста и порт будут другими.Так что также хотел бы спросить лучший подход / практика для управления именем хоста в URL?Должен ли я жестко запрограммировать это или использовать другой подход?

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

Ура!

1 Ответ

0 голосов
/ 17 декабря 2018

Вы можете использовать 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

...