상세 컨텐츠

본문 제목

공공데이터 OpenAPI 사용법

언어/자바

by Pyidros 2024. 3. 26. 22:41

본문

API(Application Programming Interface)란,

애플리케이션 소프트웨어나 데이터베이스, 컴퓨터 하드웨어 간의 상호작용을 가능하게 하는 인터페이다. 즉, 서로 다른 소프트웨어 시스템이 서로 통신하고 데이터를 교환할 수 있도록 돕는 도구와 규약의 집합이다. API는 '계약'처럼 작동하여, 한 시스템이 다른 시스템에게 요청할 수 있는 작업들과 그에 대한 형식, 규칙을 정의한다.

 


공공데이터 포털에서 한국환경공단_에어코리아_대기오염정보 API 신청


공공데이터 API를 사용하기 위해 주의 깊게 서비스 정보에 대해서 파악 해야한다.

  1. 데이터명: API가 제공하는 데이터의 종류와 형태를 나타낸다. JSON과 XML 형식으로 제공되는 경우가 많으며, 사용하는 시스템이 어떤 형식을 지원하는지에 따라 적절한 형식을 선택해야 한다.
  2. 서비스 유형: 이 API가 REST 방식으로 제공되는지, SOAP 방식인지 등의 웹 서비스 유형을 나타낸다. REST는 가장 일반적인 API 유형 중 하나로, HTTP 요청을 사용하여 데이터를 쉽게 교환할 수 있다.
  3. 활용기한: API를 사용할 수 있는 기간으로, 이 기간이 지나면 API 사용에 제약이 생긴다.
  4. 엔드포인트(End Point): API를 요청할 때 사용해야 하는 주소(URL)다. 이 주소로 API 요청을 보내서 필요한 데이터를 받아올 수 있다.
  5. 인코딩/디코딩 방식: API를 사용할 때 요청과 응답 데이터의 인코딩(암호화)과 디코딩(복호화) 방식을 명시하고 있다. 이는 데이터의 안전한 전송을 보장하기 위한 중요한 정보다.
  6. 첨부문서: API 사용법, 데이터 구조, 예제 코드 등을 담고 있는 문서가 제공된다. 이 문서를 통해 API의 정확한 사용 방법을 숙지할 수 있으며, 개발 과정에서 참조해야 할 중요한 자료이다.

이미지에 나타난 내용들은 API를 효율적으로 활용하고, 개발 과정에서 발생할 수 있는 문제를 예방하는 데 도움을 줄 수 있는 핵심 정보이다. 따라서 API를 사용하기 전에 해당 정보들을 꼼꼼히 확인하고 이해하는 것이 중요하다.

 


  다음은 자바에서 인증키와 End Point를 이용해 API의 데이터를 가져오는 예시이다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class SimpleAirKoreaApiCaller {

    // API URL 및 파라미터 설정
    private static final String API_URL = "여기에 End Point 즉, 주소를 기입";
    private static final String SERVICE_KEY = "여기에 서비스키를 기입"; 

    public static void main(String[] args) {
        try {
            // API 요청 URL 생성
            String encodedCityName = URLEncoder.encode("서울특별시", "UTF-8");
            StringBuilder urlBuilder = new StringBuilder(API_URL);
            urlBuilder.append("?serviceKey=").append(SERVICE_KEY);
            urlBuilder.append("&returnType=json");
            urlBuilder.append("&stationName=").append(encodedCityName);
            urlBuilder.append("&dataTerm=DAILY");
            urlBuilder.append("&ver=1.3");

            // HTTP 연결 설정 및 요청 수행
            URL url = new URL(urlBuilder.toString());
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/json");

            // 응답 받기
            BufferedReader rd;
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                ObjectMapper mapper = new ObjectMapper();
                JsonNode rootNode = mapper.readTree(rd);
                rd.close();

                // JSON 데이터에서 필요한 부분 가져오기
                JsonNode itemsNode = rootNode.path("response").path("body").path("items");
                System.out.println(itemsNode);

            } else {
                System.err.println("API 호출 실패: " + conn.getResponseCode());
            }
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}