OpenAPI 가이드 보는 법과 사용법 (feat. 카카오 검색 / 번역)
# 기초 지식 - API 개념과 활용
하나의 웹서비스를 제공하기 위해서 필요한 구성요소는 간단하게
1) front-end
2) back-end
3) front-end와 back-end의 interface
라고 볼 수 있습니다.
front-end는 화면의 구성을 처리하는 곳
back-end는 화면에 보여줄 정보를 처리하는 곳을 의미합니다.
그리고, front-end가 back-end에 요청을 할때, 특정 규칙에 맞게 요청해야 하는데요,
이러한 사용 규칙을 제공하는 것 = API (Application Programming Interface) 입니다.
OpenAPI는 제공처(카카오/네이버/ETRI등)에서 backend를 만들어 놓고, 그 backend를 이용하는 방법을 제공한다는 의미입니다.
그래서 사용자는 backend주소와 사용규칙만 알면, front-end를 만들어 backend의 자원을 사용하게 되는거죠. 얼
이렇게 back-end 없이(제공처의 back-end 이용) front-end만 만들어서 쓰는 것을 serverless 라고 부릅니다.
복잡한 기능은 back-end에서 처리하고, 필요한 기능만 구현하여 front-end만 만드는 것이지요.
카카오 책 검색 OpenAPI를 예로 들어보면 다음과 같습니다.
backend 사용법은 제공처에서 가이드(문서,설명서)를 제공하고 있습니다. 상세하게 작성하여 제공하는 곳도 있고 아닌곳도 있지만, 구현하기에는 충분합니다. 만약 기대했던 결과가 나오지 않을때는 Q&A를 할 수 있는 창구도 마련되어 있으니 필요시 도움을 받으면 됩니다.
가이드의 상세함이 다르다고 했지만, 아래내용들은 반드시 설명하고 있습니다. 꼭! 필요한 부분이라고 할 수 있겠죠?
요청 (request) - 어디로 / 어떻게 요청해야 하는지 기술되어 있음 |
응답 (response) - 어떤 결과가 전달되는지 기술되어 있음
HTTP/1.1 200 OK 정상적인 경우 응답이 오면 Content-Type: application/json;charset=UTF-8 담겨진 내용물의 type은 json을 사용하고, text는 UTF-8로 encoding되어 있습니다. |
카카오에서 제공하는 OpenAPI를 이용해보면서, 감을 익혀보도록 하겠습니다.
책 검색과 번역입니다.
여러분이 책검색 서비스를 만들고, 번역 서비스를 만들 수 있다는 의미입니다.
# 카카오 OpenAPI - 책 검색
Step1) | TOOL로 책 검색 결과 보기 |
Step2) | API가이드 보면서 책 검색 OpenAPI 사용하기 |
Step1) TOOL 로 책 검색 결과 보기
간단하게 카카오에서 제공하는 tool (Link)을 사용하여 정상동작 여부를 확인 봅시다.
query에 질의어(검색어)를 입력하고, [요청]버튼을 클릭합니다.
결과
책 검색 결과입니다. 응답에 200 이라는 의미는, HTTP요청에 대한 상태를 나타내는 상태 코드(Status code)이며 '정상'을 의미합니다. 200이외의 값은 에러입니다.
(참고) 응답코드 링크 : https://developers.kakao.com/tool/rest-api/open/reference
그리고 검정 블록에 결과값이 보입니다. 펭수와 관련한 책이 "오늘도 펭수 내일도 펭수(한정판 꽃눈 에디션)" 이라는게 있네요.
Step 2) API가이드 보면서 책 검색 OpenAPI 사용 하기
참고 : API 가이드 - 카카오 책검색
가이드를 보면 Request / Response가 각기 적혀져 있는 것을 알 수 있다.
각 내용은 목적에 따라 다르니, 사용할 때 파악하면 된다.
주요하게 볼 문장들은 다음과 같다.
[Request] - HOST + GET 은 어디 / 어떤 방식으로 요청을 보내야 하는지에 대한 주소를 의미(URL) - 앱키는 헤더(header)에 담아 - GET 요청, 파라메터는 query가 필수 |
[Response] - 바디(body)는 JSON 객체
|
(참고) API별로 GET요청인지 POST 요청인지 확인한다.
카카오스토리API의 경우를 예시로 보면, METHOD란에 기재되어 있음을 알 수 있다.
그럼 이제 구현해 보겠습니다.
전체코드
import requests
import json
url = "https://dapi.kakao.com/v3/search/book"
headers={ "Authorization" : "KakaoAK <REST API키 값>"}
data = {"query" : "펭수"}
response = requests.get(url, headers=headers, data=data)
print(response.status_code)
if response.status_code == 200:
print("========= [meta] =========")
print(response.json()['meta'])
print("========= [documents] =========")
print(response.json()['documents'])
실행 결과
200
=> 200은 성공을 의미합니다.
다른 값이 나왔다면, 에러를 의미하고 각 에러별 의미가 다르니 원인을 파악하고 수정해야 합니다.
TOOL에서 나온 결과와 동일합니다.
코드 설명
dict_keys(['documents', 'meta'])
=> JSON객체로 meta와 documents를 보내준다고 했는데, 결과가 제대로 나옴이 확인되었다.
print(response.json()['meta'])
{'pageable_count': 13, 'total_count': 14, 'is_end': False}
print(response.json()['documents'])
Step1, Step2에서 나온 결과가 정상적인지 알고 싶으신가요? 그럼 www.daum.net 에 접속해서 "책 검색"을 해보면 동일한 결과를 확인할 수 있습니다.
이 의미를 다시 한번 생각해 봅시다. 이렇게 결과가 동일하게 나온다는 의미는? 여러분들도 www.daum.net처럼 책 검색 front-end를 만들 수 있다는 의미입니다. 카카오에서 제공하는 OpenAPI(=back-end)를 이용하여 책 검색 front-end를 만들 수 있다! 정말 멋지죠?
하나만 하면 아쉬우니깐, 1개를 더 해보시죠!!
# API 가이드 보기 - 번역
참고 : API 가이드 - 카카오 번역
주요하게 볼 문장들은 다음과 같다.
[Request] - HOST + GET 은 어디로 요청을 보내야 하는지에 대한 주소를 의미 - 앱키는 헤더(header)에 담아 - GET 또는 POST로 요청, 파라메터는 query / src_lang / target_lang가 필수 |
[Response] - 바디(body)는 JSON 객체
|
구글 번역기를 통해 번역 기능을 위한 구성요소를 보면,
- 원문 언어 : 영어 ==> src_lang
- 변경하고 싶은 언어 : 한국어 ==> target_lang
- 문장 : Good afternoon! ==> query
라는 것을 알 수 있겠죠?
POST로 해보겠습니다!!
ㅁ Request
import requests
import json
url = 'https://kapi.kakao.com/v1/translation/translate'
headers={ "Authorization" : "KakaoAK <REST API 키값>"}
data = {"src_lang" : "kr",
"target_lang" : "en",
"query" : "지난해 3월 오픈한 카카오톡 주문하기는 현재까지 약 250만명의 회원을 확보했으며, 주문 가능한 프랜차이즈 브랜드는 38개, 가맹점수는 약 1만 5천여곳에 달한다." }
response = requests.post(url, headers=headers, data=data) #, verify=False)
ㅁ Response
print(response.status_code)
200
response.json().keys()
dict_keys(['translated_text'])
response.json()['translated_text']
번역결과 만족하시나요?
여기까지, OpenAPI문서 보는 방법과 파이썬으로 코딩을 해보았습니다.
어렵지 않죠?^^
# Reference
- [JavaScript 기초와 활용 #2] API의 개념과 활용!
저작물의 저작권은 작성자에게 있습니다.
공유는 자유롭게 하시되 댓글 남겨주세요~
상업적 용도로는 무단 사용을 금지합니다.
끝까지 읽어주셔서 감사합니다^^