業務でSpringBootを使ったアプリケーションから外部のWebAPIをコールする必要があったので、その方法のメモ。
概要
SpringBootアプリケーションでWebAPIをコールする場合は「RestTemplate」を使います。
流れは以下の通り。
- RestTemplateをBean登録
- APIコール用のServiceクラスを作成
- Serviceクラス内でRestTemplateを使って外部APIをコール
- レスポンスをコントローラに返す
手順① RestTemplateをBean登録
まずはConfigクラスにRestTemplateのBeanを登録します。
@Configuration
public class WebConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
これをやらないと後述のServiceクラスでAutowiredに失敗します。
手順② APIコール用のServiceクラスを作成
RestTemplateを使って外部のWebAPIをコールするServiceクラスを作成します。
以下のコード例では、郵便番号検索APIをコールしています。
※検索したい郵便番号をパラメータとしてセット
@Service
public class CallApiService {
@Autowired
private RestTemplate restTemplate;
public String findZipCode() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add(HttpHeaders.ACCEPT, "application/json; charset=UTF-8");
ResponseEntity<String> response = restTemplate.exchange(
"https://zipcloud.ibsnet.co.jp/api/search?zipcode={zipCode}",
HttpMethod.GET,
new HttpEntity(httpHeaders),
String.class,
"125-0061");
return response.getBody();
}
}
ResponseEntityクラスのgetBody()で実際のレスポンスを取得できます。
その際、RestTemplate#exchangeメソッドの4つ目の引数で指定した型でマッピングされます。
今回の場合、String.classを指定しているので、Json形式の文字列で取得されます。
手順③ コントローラから呼び出す
上記のServiceクラスをControllerクラスから呼び出します。
@RestController
public class ZipCloudController {
@Autowired
public CallApiService service;
@GetMapping(path = "/find")
public String find() {
return service.findZipCode();
}
}
これを実行すると画面にJson形式の文字列が表示されて、ちゃんとレスポンスを受け取れていることが分かります。

まとめ
SpringBootではRestTemplateを使うと簡単に外部APIをコールすることが出来ます。
本来であれば、Serviceクラスでは検索したい郵便番号を引数として受け取ったりする必要があると思いますが、今回は非常に雑な作りにしていますので悪しからず・・・。
ただ、これだけで最低限の実装は可能なので非常に簡単ですね。
コメント