2021. 11. 5. 12:20ㆍWeb
웹 프로그래밍에 있어 필수적인 개념인 API, 그리고 REST API 에 대해 알아보겠습니다.
두 개념을 먼저 설명한 후 실습을 통하여 이해를 해보겠습니다.
실습코드, 예제는 밑에서 볼 수 있습니다.
REST API 란, RESTful API 라는 뜻으로 REST 아키텍처의 제약 조건을 준수하는 API 를 말합니다.
우선 API에 대해서 짚고 넘어가야 겠습니다.
API 란?
API(Application Programming Interface)의 사전적 정의는 애플리케이션 소프트웨어를 구축하고 통합하는 정의 및 프로토콜 세트입니다.
API를 사용하면 사용자가 구현방식을 알지 못해도 생산자(서버)에게 필요한 정보를 요구할 수 있습니다.
무슨 내용인지 이해하기가 쉽지 않네요. 밑의 예를 보겠습니다.
- 손님은 웨이터를 불러 음식을 주문한다.
- 웨이터는 요리사에게 음식 주문을 요청(request) 합니다.
- 요리사는 요리가 완료되면 웨이터에게 음식을 전달합니다.
- 웨이터는 손님에게 음식을 제공합니다.
웨이터가 손님이 필요한 리소스를 요리사에게 요청해 손님에게 가져다주는 모습입니다. 손님은 응용 프로그램, 요리사는 요리를 만들어 전달하는 운영체제라고 볼 수 있습니다. 이 둘을 연결하는 웨이터가 API입니다.
또 API란 응용 프로그램 간에 데이터를 주고 받기 위한 방법(규격) 으로,
특정 사이트에서
• 어떤 방식으로 정보를 요청(request) 해야 하는가?
• 어떤 데이터를 제공받을 수 있는가?
- 데이터를 주고받는데 정해진 규격, 메뉴얼
- 어떤 소프트웨어가 다른 소프트웨어로부터 지정된 형식으로 요청, 명령을 받을 수 있는 수단
을 의미하기도 합니다.
API 실습
Themoviedb api 를 사용하여 영화 프로그램을 만들어 보았습니다.
DB 출처: https://api.themoviedb.org
프로젝트 주소: Jungsu-lilly/9-JSProjects (github.com)
구현 기능
1. 영화 목록 로딩
2. 영화 검색하기
3. 각 영화 별 평점 및 영화 개요
SEARCH 하는 과정을 살펴볼까요?
사용자: Harry Potter 영화 시리즈를 알고 싶어! ㅡ> harry potter 검색
그러면 이 프로젝트는
`https://api.themoviedb.org/3/search/movie?api_key=${KEY}&query=harry potter`;
라는 Search API 를 통해 해리포터 영화를 보여줍니다.
그리고 이 API는 themoviedb api 에서 정해진 규격에 따라 저희가 작성한 것입니다. 즉,
- 해당 사이트의 API에 따라서 해리포터 영화 목록을 보았다.
- API에 따라 영화 포스터 이미지, 평점을 볼 수 있음
API의 개념이 뭐였죠?
어떤 특정 사이트에서 특정한 데이터를 공유하는 경우
• 어떤 방식으로 정보를 요청(request) 해야 하는가?
• 어떤 데이터를 제공받을 수 있는가?
이러한 정해진 규격들이 API 입니다.
이뿐만이 아니라 우리는 다양한 목적에 맞는 API를 선택해서 다양하게 활용 가능합니다.
여유가 된다면 위의 themovie api주소로 가서 다양한 API를 활용해보시면 크게 도움이 될 것입니다.
API KEY
근래 대부분의 서비스들은 API를 기반으로 통신합니다. 앱과 서버, 웹클라이언트와 서비스 간 대부분의 통신이 API를 통해 이루어지기 때문에 한 번 보안이 뚫리면 해커들, 나쁜 개인들이 개인정보를 악용할 수 있는 심각한 문제가 벌어지게 됩니다.
위 프로젝트에서는 API 인증 방식 중 하나인 API KEY 를 통해 moviedb 에 접근 권한을 얻고, API를 사용했습니다.
API KEY
가장 기초적인 방법입니다. API KEY란 특정 사용자만 알 수 있는 문자열입니다.(key 값)
모든 클라이언트가 같은 API 키를 공유하므로, API 키가 한번 노출되면 전체 API가 뚫려버립니다. 따라서 높은 보안 인증이 필요할 때에는 권장되지 않습니다.
- API를 사용하고자 할 때 사용자는 API를 제공하는 사이트, 페이지에서 API 키를 발급받습니다.
- API를 호출할 때 API 키를 메시지 안에 넣어서 호출합니다.
- 서버는 메시지 안에서 API키를 읽어 누가 호출했는지를 인증합니다.
REST API
RESTful API 라는 뜻으로, REST 형식을 따르는 API입니다.
REST 란?
• 자원을 이름으로 구분하여 해당 리소스의 상태 정보를 주고 받는 모든 것.
• 즉, 리소스의 표현(representation) 에 의한 상태 전달을 뜻합니다.
각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론이 가능한 것입니다.
예를 들어, 한 개발자가
"REST 그딴거 난 모르겠고! 기능만 잘 돌아가면 된거 아니야?"
라며 다음과 같은 API를 작성합니다.
• https://(사이트도메인)/hello-myboy : 유저 리스트 불러오기
• https://(도메인)/다람쥐 : 유저 정보 삭제.
나중에 이 프로젝트를 이어받을 다른 개발자들이나, 이 API를 사용하는 사람들은 정말 곤란할 것입니다.
"다람쥐 가 뭔데" 라며 이렇게 API를 작성한 개발자를 쌍욕을 할 수도 있겠죠.
위처럼 API를 작성하면 매우 곤란하다는 것을 아시겠나요?
API를 작성할 때에는 누가나 요청을 보면 대략적으로 알 수 있게, 코드를 RESTful 하게 짜는 것이 중요합니다.
RESTAPI = HTTP methods + URL 로 표현합니다.
우선 URL부터 살펴봅시다.
어떻게 요청하는 URL을 잘 작성할 수 있을까요?
URL 작성 규칙
1. Remove all verbs in URL : only nouns
2. 소문자를 사용한다.
3. Unique identifier (고유 식별자)
안좋은 API 작성예시를 봅시다. 아래 API는 영화 관련 API 들입니다.
/createMovie
/seeMovies
/getMovie/Dewn
/deleteMovie/Dewn
우리는 작성 규칙에 따라 위 4가지 URL을
movies/dewn 으로 통일할 수 있겠습니다.
HTTP methods
REST API는 CRUD 기능을 수행하도록 설계해야 하는데요,이를 HTTP 메서드로 표현합니다.
CRUD :
Create, Read, Update, Delete
※ 모든 사이트가 CRUD 를 전부 포함하는 것은 아닙니다!
100%인 것을 없습니다. 사이트마다 사용하는 메서드가 다를 수 있습니다.
4 http request methods
• GET - Read
• POST - Create
• PUT - Update
• DELETE – delete ㅡ> CRUD
REST API 작성 예시
GET /movies : get all movies list
GET /movies/harry-potter/actors : ‘Harry Potter’ 영화의 배우 정보 열람
POST /movies : 영화 생성
Delete /movies/dewn : delete ‘Dewn’
PUT /movies/dewn : ‘Dewn’ 영화 수정
Search & filtering 을 하는 경우는 어떻게 작성할 수 있을까요?
Query Parameters 이용할수 있습니다.
•GET /movies?release_date=2021
•GET /movies?sort_by=popularity.desc
•GET /movies?sort_by=popularity.asc&page=4&release_date=2021
'Web' 카테고리의 다른 글
Node.js 특징과 장단점 (0) | 2021.11.01 |
---|---|
정적 언어와 동적 언어 (0) | 2021.10.12 |