创建 rest url 以在 Java 和 Spring Boot 中调用外部 api 的最佳方法
Best approach to create rest url to call external api in Java and SpringBoot
我在一个 SpringBoot 项目中工作,我正在开发一个 rest 端点,它将接收一些参数,我将根据这些参数创建一个 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 class 上,我调用了一个外部端点。
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 的最佳 approach/practices 是什么?我基本上硬编码了几乎所有上面的 url 只是用来自方法 retrieveImageryBaseMap 的参数替换值。想知道是否有更好的方法或者是否可以。
2) 我还在 url String url = "https://host-name:6443/external/Image/export?bbox="+ param1 +"%" + param2+ "+%"+ param3 + "%" + param4 +"&format=png&f=image";
中硬编码了主机名和端口现在我只是使用开发主机名测试它,但在生产中主机名和端口会有所不同。所以还想请问最好approach/practice在url中管理主机名?我应该像这样硬编码还是使用不同的方法?
伙计们非常感谢任何帮助,我自己工作,不幸的是没有导师来问这些问题,所以被困在这里。
干杯!
您可以将 UriComponentBuilder 用于此类目的,它非常灵活
这是一个例子:
String URI = UriComponentsBuilder.newInstance()
.scheme("https").host("host-name").port(6443).pathSegment("external”,”Image”,”export”)
.queryParam(“paramName1”, value1)
.queryParam(“paramName2”,value2)
.build(). toUriString();
我在一个 SpringBoot 项目中工作,我正在开发一个 rest 端点,它将接收一些参数,我将根据这些参数创建一个 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 class 上,我调用了一个外部端点。
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 的最佳 approach/practices 是什么?我基本上硬编码了几乎所有上面的 url 只是用来自方法 retrieveImageryBaseMap 的参数替换值。想知道是否有更好的方法或者是否可以。
2) 我还在 url String url = "https://host-name:6443/external/Image/export?bbox="+ param1 +"%" + param2+ "+%"+ param3 + "%" + param4 +"&format=png&f=image";
中硬编码了主机名和端口现在我只是使用开发主机名测试它,但在生产中主机名和端口会有所不同。所以还想请问最好approach/practice在url中管理主机名?我应该像这样硬编码还是使用不同的方法?
伙计们非常感谢任何帮助,我自己工作,不幸的是没有导师来问这些问题,所以被困在这里。
干杯!
您可以将 UriComponentBuilder 用于此类目的,它非常灵活
这是一个例子:
String URI = UriComponentsBuilder.newInstance()
.scheme("https").host("host-name").port(6443).pathSegment("external”,”Image”,”export”)
.queryParam(“paramName1”, value1)
.queryParam(“paramName2”,value2)
.build(). toUriString();