[OpenAPI] OpenAPI에서 데이터 받아서 응답하기

Coastby·2023년 5월 24일
0

New project

목록 보기
1/1

OpenAPI 데이터 신청하기

공연예술통합전산망의 Open API에서 공연 정보를 받아오고, 데이터를 이용해 요청에 응답하려고 한다. 공공데이터포털를 주로 사용하지만, 활용신청하고 1-2시간 정도 지나야 이용가능해서 위의 데이터를 이용하였다.

  1. 링크에서 인증키 발급신청을 한다.

  2. 입력한 이메일로 인증키가 발급된다. 해당 인증키를 저장해 둔다.

프로젝트 만들기

  1. Spring Initializr를 이용하여 프로젝트를 빌드한다.

  2. root 디렉토리에 api 패키지를 추가하고, 아래 KpiApi 클래스를 추가한다.

@Component
public class KpiApi {
	@Value("${openapi.kpikey}")
	private String key;

	public String getPerform() throws IOException {
		System.out.println(key);
		StringBuilder urlBuilder = new StringBuilder("http://kopis.or.kr/openApi/restful/pblprfr"); /*URL*/
		urlBuilder.append("?" + URLEncoder.encode("service","UTF-8") + "=" + URLEncoder.encode(key, "UTF-8")); /*Service Key*/
		urlBuilder.append("&" + URLEncoder.encode("stdate","UTF-8") + "=" + URLEncoder.encode("20160101", "UTF-8")); /*페이지번호*/
		urlBuilder.append("&" + URLEncoder.encode("eddate","UTF-8") + "=" + URLEncoder.encode("20160630", "UTF-8")); /*한 페이지 결과 수*/
		urlBuilder.append("&" + URLEncoder.encode("rows","UTF-8") + "=" + URLEncoder.encode("10", "UTF-8")); /*지역코드*/
		urlBuilder.append("&" + URLEncoder.encode("cpage","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*계약월*/
		URL url = new URL(urlBuilder.toString());
		System.out.println(url);
		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setRequestMethod("GET");
		conn.setRequestProperty("Content-type", "application/json");
		System.out.println("Response code: " + conn.getResponseCode());
		BufferedReader rd;
		if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
			rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		} else {
			rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
		}
		StringBuilder sb = new StringBuilder();
		String line;
		while ((line = rd.readLine()) != null) {
			sb.append(line);
		}
		rd.close();
		conn.disconnect();
		System.out.println(sb.toString());
		return sb.toString();
	}

}
  1. 인증키를 변수에 넘겨주기 위해 application.yml에 속성을 입력한다.
    이 속성은 KpiApi의 @Value값에 주입될 것이다.
openapi:
  kpikey: password

그리고 보안을 위해 진짜 인증키를 yml에 적지 않고, 환경 변수로 넘겨줄 것이다.

OPENAPI_KPIKEY=[진짜인증키]

📌 @Value
스프링 컨테이너 내부에서 빈을 등록할 때 @Value("${}") 안에 맞는 값을 application.yml파일에서 찾아서 넣어준다. 따라서 스프링 빈에 등록되지 않은 객체에서는 @Value 값이 등록되지 않는다.
그리고 처음에는 main 메서드에서 실행했는데, static 변수로 선언된 변수에는 injection할 수 없다고 한다.

  1. ApiController 작성한다.
@RestController
@RequiredArgsConstructor
public class ApiController {
	final private KpiApi kpiApi;

	@GetMapping(value = "/api/performs")
	public String getPerform() {
		String result;
		try {
			result = kpiApi.getPerform();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
		return result;
	}

}
  1. 실행한다.
    출력화면

  2. Postman에서 요청을 보낸다.

profile
훈이야 화이팅

0개의 댓글