이번시간엔 OpenAPI를 통해 데이터를 가져오는 코드를짜보겠다.
OpenAPI는 개발자라면 누구나 사용할 수 있도록 공개된 API를 말하며, 개발자에게 사유 응용 소프트웨어나 웹 서비스의 프로그래밍 적인 권한을 제공한다.
즉, 데이터를 제공하는 외부 API라고 보면된다.
이 OpenAPI를 통해 우리는 실생활 데이터를 수집하여 프로젝트에 써먹을수있다.
그런데 이 실생활 데이터는 대부분 JSON을 지원한다.
XML도 있긴하지만, 여러태그가 붙어서 JSON이 훨씬 가볍다.
OpenAPI를 직접 체험해볼수있고 문제도 풀어볼수있는 환경이다.
카카오 2021 2차 코딩테스트 문제를 예시로 들어보자.
https://programmers.co.kr/skill_check_assignments/67
이 포스팅은 Java언어로 RESTAPI 호출 처리와 JSON Parser코드 만을 다룬다.
실제 문제는 여러분의 몫으로 남겨두겠다.
0. JSON라이브러리 설치
Build.Gradle 를 들어가서 라이브러리를 추가하자.
Maven 또는 최신버전으로 하고싶으신분은 여기서 확인하시면 된다.
https://mvnrepository.com/artifact/org.json/json
1. GlobalData 밑준비
앞으로 사용할 여러 데이터를 내가 알기쉬운 단어로 치환한다.
꼭 굳이 안해도 되긴 하지만 해두면 다른사람이볼때 가독성이 매우 좋아지니, 협업하는 마인드로
단번에 이해하기 힘든 데이터는 치환해두는 연습이 꼭 필요하다.
2. Connection 클래스
싱글톤 패턴을 적용했다.
Connection클래스는 OpenAPI와 연결하여 데이터를 받아오는 클래스므로, 자주 사용할예정이니
싱글톤을 사용하면 자원을 많이 아낄수있다.
본격적으로 연결을해보자.
우선 문제를 풀기위한 토큰을 발급받자.
2-1. URL 연결
먼저 URL를 하나 생성하여 주소를 입력한다.
입력한후, url.openConnection()으로 연결을한다
원래 openConnection을하면 반환타입으론 UrlConnection을 반환하지만, HttpURLConnection으로 캐스팅해주자.
Http주소를 다루기위한 여러 메소드를 더욱 제공해준다.
토큰을 받으려면 다음과같은 문서의 양식을 지키자.
Header부분
1. Post로 보내기
2. X-Auth-Token 으로 발급된 토큰 설정하기
3. Content-Type 을 application/json 설정하기
Parameter 부분
1. problem 숫자 담기
다음과같이 입력을넣자.
Get방식의 Parameter는 쿼리스트링으로 보내버리자.
conn.getResponseCode()로 잘 입력되었는지 확인을 해보자.
잘 입력이 되었다면, 데이터를 읽어보자.
BufferReader을 통해 , InputStream을 호출합니다. InputStream은 외부데이터를 읽는용도입니다.
반대로 OutputStream은 데이터를 외부로 보내는(출력하는) 용도구요.
conn에서 읽은 getInputStream을 호출하여
while문을통해 읽은 내용을 StringBuffer로 저장을합시다.
모든 과정이완료가됬다면 StringBuffer에서 JSON데이터를 뽑아옵시다.
JSON데이터를 뽑아올땐 JSON라이브러리에 있는 JSONObject로 뽑는다.
JSONObject로 뽑으면 알아서 Json형태로 매핑을 해주기때문에,
사용할때는 Key- value 형태로 값을 뽑아오면된다.
우리의 목적은 StartAPI에 토큰(auth_Key)을 얻기위함이니, auth_Key를 뽑아오고 반환한다.
실제로 구현해보고 출력을해보면 매우 잘나온다.
---------------------------------------------------------------------------------------------------------------
StartAPI를 구현을 해보았다.
이 외에도 구현해야할 API는
locations , trucks, simulate , scoreAPI가 남아있다.
이것도 문서의 양식대로 StartAPI처럼 구현만 하면 된다.
'자바 > 스프링(Spring)' 카테고리의 다른 글
스프링시큐리티 + OAuth2.0 사용해보자 (Google편) (1) | 2022.09.24 |
---|---|
스프링 시큐리티를 사용해보자!! (0) | 2022.09.23 |
ArgumentResovler 와 Interceptor에 대하여 (0) | 2022.08.23 |
스프링(Spring) JSon 역직렬화 문제 (중복배열) (0) | 2022.07.08 |
스프링 타임리프(Thymleaf) 한눈에 정리하기 (0) | 2022.05.18 |