목요일은 인싸이트데이, 우리팀의 발표 주제는 API였다.
발표팀으로 선정되서 정말 오랜만에 발표를 했는데
1~2분 정도의 짧은 분량이지만 떨리기도하고, 또 어떻게 잘 전달할까 고민하면서
의사소통 스킬을 조금 더 키울 수 있는 기회였던 것 같다!
API
API란?
API(Application Programming Interface)는 클라이언트, 서버와 같은 서로 다른 프로그램에서 요청과 응답을 주고 받을 수 있게 만든 체계이다. API의 정의, 요청과 응답 부분은 비전공자를 위한 이해할 수 있는 IT지식 도서를 참고했다. (비전공자를 위한 이해할 수 있는 IT 지식)
요청과 응답(request, response)
클라이언트는 요청(request)을 보내고, 서버는 요청을 받아서 응답(response)을 준다. API를 통해 요청과 응답을 주고 받을 때에는 데이터도 같이 담긴다. 요청은 크게 4가지 요소로 나눌 수 있는데, 이를 CRUD라고 부른다.
요청: CRUD의 정의와 메소드
- C (Create) : 데이터를 올리는 요청 → POST
- U (Update) : 데이터를 바꾸는 요청 → PUT(전체), PATCH(일부)
- R (Read) : 데이터를 불러오는 요청 → GET
- D (Delete) : 데이터를 지우는 요청 → DELETE
응답: Response의 대표적인 예시
- 200: 성공했다 (201, 202 … 등)
- 400: 클라이언트의 요청이 잘못됐다 (대표적인 오류: 404 not found)
- 500: 서버의 문제로 실패했다 (500, 501 … 등)
GET과 POST 방식 비교 (출처_[인생의 로그캣:티스토리] https://noahlogs.tistory.com/35 )
- GET방식
GET은 클라이언트에서 서버로 정보를 요청하기 위해 사용되는 메서드이다. GET을 통한 요청은 URL 주소 끝에 파라미터로 포함되어 전송되며, 이 부분을 쿼리 스트링(query string) 이라고 부른다. URL 끝에 " ? " 를 붙이고 그다음 변수명1 = 값1 & 변수명2 = 값2... 형식으로 이어 붙이면 된다. (단, 길이에 제한이 있다.)
www.example.com/show?name1=value1&name2=value2
서버에서는 name1 과 name2 라는 파라미터 명으로 각각
value1 과 value2 의 파라미터 값을 전달 받을 수 있다.
- POST방식
POST는 클라이언트에서 서버로 리소스를 생성하거나 업데이트하기 위해 데이터를 보낼 때 사용 되는 메서드이다. POST는 전송할 데이터를 HTTP 메시지 body 부분에 담아서 서버로 보낸다. POST로 데이터를 전송할 땐 길이 제한이 따로 없어, 용량이 큰 데이터를 보낼 때 사용하거나 GET처럼 데이터가 외부적으로 드러나지 않기때문에 보안이 필요한 부분에 많이 사용된다.
GET과 POST의 차이점
- 사용목적 : GET은 서버의 리소스에서 데이터를 요청할 때, POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용한다. DB로 따지면 GET은 SELECT에 가깝고, POST는 Create 에 가깝다고 보면 된다.
- 요청에 body 유무 : GET은 URL 파라미터에 요청하는 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 없다. POST는 body에 데이터를 담아 보내기 때문에 HTTP 메시지에 body가 존재한다.
- 멱등성 (idempotent) : GET 요청은 멱등이며, POST는 멱등이 아니다.
- 멱등이란? 멱등의 사전적 정의는 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 의미한다. GET은 리소스를 조회한다는 점에서 여러 번 요청하더라도 응답이 똑같다. 반대로 POST는 리소스를 새로 생성하거나 업데이트할 때 사용되기 때문에 멱등이 아니라고 볼 수 있다.
API 가이드 예시
오픈 API는 가이드도 함께 제공한다.
- 네이버: https://developers.naver.com/docs/common/openapiguide/
- 카카오: https://docs.kakaoi.ai/kakao_work/webapireference/commonguide/
API의 유형
- 퍼블릭, 오픈 API
- 폐쇄형, 프라이빗 API
- 파트너 API 등
가장 대표적인 AP방식: REST API (Representational State Transfer)
REST는 프로토콜이나 표준이 아닌 아키텍처 제약 조건의 집합이다. API 개발자는 다양한 방법으로 REST를 구현할 수 있다. API는 자율성이 높다. 클라이언트와 서버는 HTTP를 사용하여 데이터를 교환한다. 정보 표현은 주로 JSON 형태로 이루어져있다. 최근에는 Websocket API (GraphQL)도 등장하여 REST API보다 효율적이고, 복잡한 시스템에 이용된다고 한다.
API의 인증 방식(출처_REST API 보안 및 인증 방식_개발자 이동욱)
- API Key 방식
API Key란 특정 사용자만 알 수 있는 일종의 문자열 API를 호출하고자 할 때, 사용자는 API 제공사의 포탈 페이지에서 API 키를 발급 받고 API를 호출 할 때 API 키를 메시지 안에 넣어 호출한다. 서버는 메시지 안에서 API 키를 읽어 누가 API를 호출했는지 인증한다.
- API 토큰 방식
ID, 비밀번호 등으로 사용자를 인증한 다음, 그 사용자가 API 호출에 사용할 기간이 유효한 API 토큰을 발급해서 사용자를 인증하는 방식이다.
API 활용 사례
- 구글 지도 API
- 우버(Uber) : 구글 지도로 목적지까지 경로 표시, 예상 소요시간 제공
- 포켓몬고 : 위치 기반 게임. 포켓몬을 찾을 수 있는 위치 정보 제공
- T맵 위치 정보 API
- 배달의 민족 : 사용자의 위치에 맞는 주변 음식점 정보를 제공 받아 사용자에게 보여줌
- 네이버 지도 API, 카카오 지도 API
- 해외 금융 분야에서의 활발한 오픈 API 활용
- 영국의 오픈 뱅킹 제도
- 유럽연합(EU)의 개인 정보 이동권
- 홍콩의 오픈 API 프레임워크
- API를 구축하여 고객의 동의를 받아 제3자에게 제공할 수 있도록 유도하는 제도나 법을 장려 중
- 스마트폰 앱을 통한 은행 환율 정보 조회 : 환율 조회 API
- 게임 API
- 라이엇게임즈 API, 넥슨 API 등
- Riot API(게임사)의 timeline api를 활용한 LoL 데이터 수집 : https://shinminyong.tistory.com/30
- 닉네임 중복 체크
- 유튜브 API로 댓글 자료 수집
- 번역 API, 부동산 API, 날씨 API 등