【问题标题】:Best approach to create rest url to call external api in Java and SpringBoot创建rest url以在Java和SpringBoot中调用外部api的最佳方法
【发布时间】:2018-12-17 01:50:26
【问题描述】:

我正在一个 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中主机名的最佳方法/做法?我应该这样硬编码还是使用不同的方法?

大家非常感谢任何帮助,我自己一个人工作,不幸的是没有导师来问这些问题并被困在这里。

干杯!

【问题讨论】:

  • 一个小问题,为什么要通过 PathVariable 传递参数?
  • 你可以转发这篇文章stackoverflow.com/questions/13715811/…
  • 是的,PathVariable
  • 如果这些参数来自互联网客户端,您真的希望在从中构造 URL 之前对其进行验证。
  • @AndyBrown 这是一个完整的端点。客户将发送地理坐标。

标签: java spring api spring-boot endpoint


【解决方案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();

这是文档的网址 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/util/UriComponentsBuilder.html

【讨论】:

  • 谢谢@Mykhailo!我会检查出来的!非常感谢!
  • 添加示例。谢谢
  • @RafaelPaz 除此之外,我强烈建议您将基本 url https://host-name:6443/external/Image/ 存储在 application.properties 文件中,而不是在代码中硬编码
  • 感谢@KunalPuri 的提示!会这样做!非常感谢您的帮助!
  • 再次感谢@MykhailoMoskura 帮了大忙! :)
猜你喜欢
  • 2014-10-09
  • 1970-01-01
  • 2010-11-20
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-18
  • 2018-01-24
相关资源
最近更新 更多