코드스테이츠 PMB 14기
들어가며 오늘은 API에 대해서 배웠다. 그 전에 스터디로 API를 찍먹해봤는데 오늘 강의에서 한번 더 배우면서 어떤 개념인지 확실하게 알게 되었다. API를 비유할 때 보통 하는 말이 '은행창구'와 같다는 말을 한다. 요청자(사용자가) 서버에게 필요한 기능을 사용하게 하기 위한 하나의 주문이라고 생각하면 된다. 우리가 컴퓨터와 직접적으로 대화를 나눌 수 없으니, api라는 약속을 사용해서 컴퓨터와 소통하게 되는 것이다!
얼핏 들으면 어려워보이지만, 공부를 하면서 지금 이순간에도 내가 API 코드를 끊임없이 보내고 있다는 것을 알았다. 바로 주소창이다.
지금 티스토리에 글을 작성하고 있는 순간 보이는 내 주소창이다. 요것이 내가 티스토리에 글을 쓰게 해달라고 요청하는 API 코드인것이다! 물론 내가 지금까지는 인식하지 못하고 있었지만, 웹에서 활동을 할 때 항상 내가 API코드를 짜서 요청하고 있었다는 사실. 생각보다 놀랍다.
그래서 오늘 살펴볼 오픈 API 소스는 바로 '카카오'다
+종종 기업들은 자신들의 API를 무료로 공개하는데 그것이 '오픈 API'다. 공개된 오픈 API를 사용하면, 그 API를 활용하여 서비스를 이용할 수 있따. 오픈 API를 공개하는 이유는 자사의 서비스 기능을 이용하여, 다양한 서비스에 활용할 수 있도록 풀어주는 것이다. 그로 인해 서비스 저변을 확대하고, 또 색다른 시장으로의 확대를 노릴 수 있다.
그 중에 카카오도 별도의 developers 페이지를 운영해서 오픈 API를 제공하고 있어, 누구나 이 API를 사용하여 기능을 활용할 수 있게 만들어 놓았다.
카카오가 오픈해놓은 API는 매우매우 많지만... 난 그중에서도 기본적인 '검색 기능'에 대해서 탐색해보고자 한다!
다음 검색 기능의 오픈 API 소스를 이용하면 다음 검색을 기능을 서비스 내에서 활용할 수 있다. 중간에 JOSN 은 하나의 포맷이라고 이해하면 된다. 본래는 자바스크립트 전용 포맷이었는데 이제는 다른 언어로도 이용할 수 있어서 데이터 교환 목적으로 많이 이용한다고 한다. (+이 부분은 다음에 더 자세하게 공부해보도록... 아직까지는 정확하게는 이해가 안된다.)
다음 검색에서 이용할 수 있는 기능들은 (웹문서 검색, 동영상 검색, 이미지 검색, 블로그 검색, 블로그 검색, 책 검색, 카페 검색) 이 있다. 너무 많아서 다 살펴볼 수는 없으니... 이중에서 나는 '웹문서 검색' 기능을 살펴보기로 했다.
다음 검색 서비스에서 질의어로 웹 문서를 검색합니다. 원하는 검색어와 함께 결과 형식 파라미터를 선택적으로 추가할 수 있습니다. 응답 바디는 meta, documents로 구성된 JSON 객체입니다.
다음(카카오)는 웹문서 검색 기능의 오픈 API 기본 정보를 이렇게 말하고 있다.
아래의 개발 문서를 보면 Request(요청), Respons(응답) 두 가지로 이루어져 있는 걸 알 수 있다. 즉 사용자(클라이언트)가 요청하고, 서버가 응답하여 결과를 보여주는 방식으로 API가 구성된 것!
요청은 일단 사용자(클라이언트)가 자원을 요청하는 API입니다. 서버에서 이러이러한 정보를 달라고 요청한다는 뜻입니다.
내용을 살펴보면 일단 첫번째로 GET (전송방식:method) 이 적혀있는 것을 볼 수 있다. 정보 요청, 즉 URI가 가진 정보를 검색하기 위해 서버에 요청하는 method다. 그 뒤로 이어지는 값이 어떤 정보를 요청하고 있는지?(date) 이다.
이어서, 위에 적은 API 기본 정보를 보면 형식 파라미터(Parameter)를 선택적으로 추가할 수 있다고 되어있다. 파라미터는 변수라는 뜻이다. 요청하는 정보 뒤에 변수값을 붙여서, 그 변수가 적용된 정보를 요청할 수 있다.
Request에서 사용할 수 있는 파라미터 값은 다음과 같다.
여기서 'query' 값이 필수로 지정되어 있는 것을 볼 수 있다. 즉 검색을 원하는 질의어는 필수적으로 들어가야 요청이 가능하다는 뜻이다.
그디로 sort, page, size는 필수값이 아니라서 필요할 때만 변수값을 사용하면 된다.
GET -> Method : 정보 요청, 서버에 정보를 요청한다
https://dapi.kakao.com/v2/search/web -> 데이터를 요청할 주소입니다 쉽게 말해서 다음 웹 검색이 이루어질 주소라고 보면 됩니다.
query=이효리 -> 파라미터 변수값을 말합니다. 검색을 원하는 질의어를 "이효리"라고 넣었다는 뜻입니다. 그 외에 다른 변수는 사용하지 않았어요
이제 요청을 받았으니 어떻게 응답을 해야할지 알아봐야겠습니다. 응답에는 meta와 documents로 나뉘어져 있습니다.
meta는 쉽게 말해서 데이터입니다. 요청을 받고, 보여줄 응답값에서 보여지지지 않을 (백그라운드) 정보 값이라고 보면 됩니다.
documnets는 세부정보입니다. meta와는 다르게 노출될 세부 항목들을 말하는 것입니다. 즉, 요청을 받으면 문서 제목, 문서 본문 중 일부, url, 글 작성시간을 응답해준다는 뜻입니다.
아까 요청에서 파라미터 값, 즉 질의어를 "이효리"로 넣고 요청을 보냈을 때 받을 수 있는 응답값입니다.
일단 맨처음에 200은 응답 코드입니다. REST API는 이 응답이 잘 수행되었는지 아닌지를 응답코드로 보여주게 설계되어있습니다.
지금은 200이 출력되었으니까 요청이 정상적으로 수행되었다고 알 수 있습니다.
200 클라이언트의 요청을 정상적으로 수행함
201 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨 (POST를 통한 리소스 생성 작업 시)
400 클라이언트의 요청이 부적절할 경우 사용하는 응답 코드
401 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용하는 응답 코드 (로그인하지 않은 유저가 로그인했을 때, 요청 가능한 리소스를 요청했을 때)
403 유저 인증 상태와 관계없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 때 사용하는 응답 코드(403 보다는 400이나 404를 사용할 것을 권고, 403 자체가 리소스가 존재한다는 뜻이기 때문에)
405 클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용했을 경우 사용하는 응답 코드
301 클라이언트가 요청한 리소스에 대한 URI가 변경되었을 때 사용하는 응답 코드 (응답 시 Location header에 변경된 URI를 적어 줘야 한다)
500 서버에 문제가 있을 경우 사용하는 응답 코드
출처: https://yusang.tistory.com/69 [YS's develop story:티스토리]
meta 데이터의 응답값을 살펴보면 다음과 같습니다.
total_count : 검색된 문서수 -> 897323
pageble_count : 검색된 전체 문서 수 중에 노출 가능 문서수 -> 775
is_end : 마지막 페이지인가? -> fales 값이 떴음으로 마지막 페이지가 아닙니다. 고로 다음 페이지로 넘어 갈 수 있습니다.
요부분까지는 유저에게 노출되지 않습니다! 다만 유저 뒤 백그라운드에서 응답값 이러한 정보들을 가지고 있다는 걸 의미합니다.
이어서 documents 세부정보 항목을 살펴보면 다음과 같습니다. 여기서부터는 유저에게 노출됩니다.
datatime : 문서 글 작성시간
contents : 문서 본문 중 일부
title : 문서 제목
url : 문서의 url 표시
다음과 같은 세부정보 내용이 검색시에 노출된다는 뜻입니다. 세부적인 값에 대해서는 예시에 있는 API를 확인해보심 됩니다!
마치며 API... 알다가도 모르겠는 너란 녀석... 다행스럽게 걱정했던거보다는 쉽게 이해한거 같다.
#pm부트캠프 #오픈API #프로덕트매니저