어느 분야인지에 따라 조금 다를 수 있겠지만 공공데이터 포털 등에서 제공하는 OPEN API, 혹은 외부에 있는 API들을 사용해야 하는 경우가 생각보다 많다.
혹은 포트폴리오를 만들면서도 OPEN API를 사용해보는 경우도 많기 때문에 정리해본다.
나의 경우는 내가 담당하는 API에서 외부의 API를 호출하는 코드를 짜야했다.
쉽게 말하자면 내가 만든 API url을 호출하면 나는 외부의 API를 호출해서 결과를 받아오는 방식이다.
일단 OPEN API의 경우는 그냥 쓸 수 있는 API들도 있지만 보통은 API를 제공하는 사이트에서 활용신청을 해서 API KEY라고 하는 인증키를 받아와야 합니다.
API마다 활용 기간이나 사용방법이 다르기 때문에 사용하고자 하는 OPEN API 사이트에 가서 확인하는 것이 좋다.
그리고 가장 중요한 OPEN API 관련 문서를 확인해야한다.
OPEN API 서비스를 이용하기 위해 필요한 파라미터들, 개발환경, 운영환경 등 정보와 어떤 서비스를 제공하는지가 정리된 문서가 있기 때문에 이 문서를 꼭!! 확인하고 코드를 짜야한다.
OPEN API마다 형식이 다르겠지만 아래의 내용은 검색어를 입력하면 영화 정보에 대한 결과를 응답해주는 임의의 API를 가정하고 작성하였다.
▷ API 정보
호출 방식 | 요청 URL | 출력 결과 |
GET | test.smile_place.go.kr/movie/search | JSON |
▷ 요청 변수
요청변수명 | 타입 | 필수여부 | 기본값 | 설명 |
search | String | Y | - | 검색어(인코딩 필요) |
api_key | String | Y | - |
※위의 api_key는 OPEN API에서 받는 인증키
▷ 요청 예시
타입 | 예시 |
URL PARAM | http://test.smile_place.go.kr/movie/search?search=테스트&api_key=1a2b3c4d5e6f7g8 |
▷ 출력 결과
출력변수명 | 타입 | 필수여부 | 설명 |
title | String | N | 영화 제목 |
director | String | N | 영화 감독 |
releaseDate | String | N | 영화 개봉일 |
score | Integer | N | 영화 평점 |
▷ 출력 예시
타입 | 예시 |
JSON | { "title": "스파이더맨: 노 웨이 홈", "director": "존 왓츠", "releaseDate": "20211215", "score": 94 } |
API 결과에 대한 내용이 나오는 View단은 생략하고 위의 가상의 문서를 토대로 Java 코드에 대해서만 작성해보았다.
API 샘플 코드들이 자바를 포함한 여러 프로그래밍 언어별로 OPEN API 페이지에서 제공되므로 샘플 코드를 참고해서 각각의 상황에 맞는 코드를 작성하면 될 것 같다.
@Controller
public class MovieSearchController
{
@RequestMapping(value = "/movie/search" , produces ="application/json")
public void movieSearch(
@RequestParam(value = "search", required = false)
String search,
@RequestParam(value = "api_key", required = false)
String api_key,
HttpServletResponse response )
throws Exception {
//결과를 담을 변수들
StringBuffer result = new StringBuffer();
String strResult = "";
try {
// URL 설정
StringBuilder urlBuilder = new StringBuilder("http://www.smileplace_movie/movie/search");
// search 변수는 인코딩이 필요하다고 했으므로 그 부분만 인코딩
urlBuilder.append("?search=" + URLEncoder.encode(search, "UTF-8"));
urlBuilder.append("&api_key=" + api_key);
urlBuilder.append("&type=json");
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
// Request 형식 설정
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/json");
// 응답 데이터 받아오기
BufferedReader rd;
if(conn.getResponseCode() >= 200 & conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
String line;
while((line = rd.readLine()) != null) {
result.append(line);
}
rd.close();
conn.disconnect();
strResult = result.toString();
} catch ( Exception e ){
e.printStackTrace();
}
// Response 형식 설정 -> JSON으로 데이터 보내기
response.setContentType( "application/json" );
response.setCharacterEncoding( "UTF-8" );
response.getWriter().write( strResult );
}
}
'개발 > JAVA' 카테고리의 다른 글
자바에서 구현과 상속을 동시에 사용하는 경우(implements, extends) (0) | 2023.05.10 |
---|---|
[JAVA] 자바에서 역슬래시, 따옴표 등 이스케이프 시퀀스 출력하기 (0) | 2022.01.27 |
JDOM(Java Document Object Model) 관련 (0) | 2021.11.18 |
[JAVA] indexOf() / lastIndexOf() (0) | 2021.11.16 |
[SPRING] Mybatis에서 다중 insert하기 (3) | 2021.11.07 |