꾸준하고 즐겁게
Restful API의 URL, Methods, Message 본문
API
API(Application Programming Interface, 애플리케이션 프로그래밍 인터페이스, 응용 프로그램 프로그래밍 인터페이스)란, 원래 응용프로그램을 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
리눅스도 API가 있다. 윈도우즈에도 API가 있다.
윈도우를 쓴다면 우리가 흔히 보는 알집 같은 것들도 윈도우즈의 API를 이용해서 만든 프로그램이다.
보다 넓은 의미로 쓰여서는, 저장되어있는 데이터를 바로 클라이언트가 억세스할 수 있는 게 아니라 한 단계를 더 거쳐서 억세스할 수 있게 제공하는 기능이다.
뒤에 나오겠지만, 그 거치는 곳을 Restful API라고 부른다.
만들어낸 앱을 클라이언트에게 서비스로 제공하기 위해서 서버에 API를 만들어둔다.
API서버를 만들기 위해 python을 사용할 수도 있고, nodejs를 사용할 수도 있고 java를 사용할 수도 있다.
공부할 당시 가장 쉽게 와닿았던 설명은, 음식점의 점원 같은 역할로 생각하라는 설명이였다.
거기에 덧붙이면, 손님이 출입해서는 안되는 식품 저장고에 손님이 출입하는 것을 막는다.
외국인 손님이 오든, 외계인이 오든, 똑같은 음식을 주문하면 똑같은 음식을 서빙한다.
클라이언트(손님)의 주문을 받고, 데이터베이스(주방, 저장고)에게 가서 무엇(음식)을 몇 개 가져와야한다고 전하는 역할이 API(점원)이다.
데이터베이스에 아무나 접속해서 데이터를 가져가고 수정할 수 있으면 안되므로, 권한을 부여받은 사람만 데이터에 접근할 수 있도록 한 것이다.
Restful API
Rest는 Representational State Transfer의 약자이다.
REST는 특정 아키텍처 원칙들을 말한다.
그걸 준수하는 API를 Rest API, 혹은 Restful API라고 부른다.
그 조건들은 아래 링크에서 확인해볼 수 있다.
REST - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
불러오는 중입니다...
REST 아키텍처에 적용되는 6가지 제한 조건[편집]다음 제한 조건을 준수하는 한 개별 컴포넌트는 자유롭게 구현할 수 있다.
|
서버나 서비스에 존재하는 모든 고유한 자원(이미지,동영상,DB에 저장되어있는 정보들)에 URI를 부여해 사용하는 것이다.
URI는 그냥 URL이라고 생각하면 된다.
자원을 정의하고 자원에 대한 주소를 지정하는 방법론을 의미한다.
restful API는 크게 3가지로 구성 요소를 가지고 있다.
자원(Resource)
행위(Method)
표현(Message
HTTP POST, http://service.com/users
{
"users": {
"name": "sol"
}
}
이것은 위의 restful API의 3가지 구성 요소를 모두 표시한 것이다.
restful API는 http https를 사용한다.
post는 위에 있는 method다.
그 다음은 url이다. 도메인이 있고, users라는 path에 있다.
이렇게 요청을 하면, 그 아래와 같이 정보를 post로 전달해준다.
post로 전달해줘야하는 데이터가 message다.
Restful API의 구성요소 - 1. Resource
URI(URL)을 간략하게 살펴보자.
이런 URI가 있다고 하자.
http, https로 되어있는 부분은 프로토콜이다.
https://ko.wikipedia.org/wiki/HTTP
그리고 뒤에 이어지는 ~~.com , ~~.co.kr 이런 것들을 호스트(또는 도메인)이라고 한다.
그리고 콜론이 있고, 3000이 있다.
이 3000은 포트번호다.
http는 보통 80포트를 쓰고 80포트를 쓸 경우 생략할 때가 많다.
도메인 뒤에 이어지는 포트번호를 본 적이 별로 없다면 그런 이유일 것이다.
그 다음엔 슬래시가 나온다.
슬래시 뒤로 나오는 걸 path라고 한다. 말 그대로 경로다.
그리고 물음표 뒤로 나오는 부분은 query string이다.
이런 용어들이 API 개발할때 쓰인다.
path도 여러개가 나올 수 있고, query string도 여러개가 나올 수 있다.
querys string의 경우 여러개를 조합할 땐 위와 같이 &을 붙인다.
앰퍼샌드를 기준으로 두개의 query string이 쓰인 것이다.
내가 어떤 데이터를 얻고 싶으면 이런 URL을 만들어서 URL에 접속해야한다. 그래야 데이터를 얻을 수 있다.
네이버 파파고 유튜브 API 구글의 주소 API든 정보를 얻고 싶으면 다 URL이 있어야한다.
한 가지 더 첨언을 하면, URL에서 슬래시는 이 도메인의 루트경로다.
naver.com/ 와 같이 슬래시 뒤에 아무것도 쓰지 않으면 그냥 naver.com으로 가는 걸 볼 수 있다.
Restful API의 구성요소 - 1. Method
URL에 대한 메소드가 있어야한다.
get/post/delete/put이 있다.
이런 메소드들을 제공해줘야 Restful API라고 할 수 있다.
method는 http protocol에서 온 것이다.
http는 프로토콜에 메소드(http methods)가 여러개 있다.
클라이언트가 데이터를 request하고(클라이언트에서 서버로) 서버가 response(서버에서 클라이언트로) 할 때
서버에 어떻게 요청할 거냐.
데이터를 얻어오기만 할지, 데이터를 서버에 저장해달라고 할지, 서버쪽에 데이터를 업데이트해달라고 할 거냐
서버 쪽 데이터를 삭제해달라고 할 거냐.
그 방법론에 명칭들을 붙인 것이다.
데이터를 가져오고 싶을 때는 get 메소드로 요청한다.
클라이언트가 정보를 서버에 저장하고 싶을 땐 post 메소드로 요청한다.
클라이언트가 서버에 저장된 정보를 업데이트(혹은 변경)하고 싶을 때 사용하는 건 put메소드.
클라이언트가 서버에 저장된 정보를 삭제하고 싶을 때 사용하는 건 delete 메소드.
이런 메소드를 가지고 누가 설계를 하느냐, 백엔드 개발자가 이 API를 설계하는 것이다.
이 http method는 원래 10개가 넘는데,
그중에서 가장 많이 쓰이는 것이 저 4가지이다.
정보를 가져오고 싶을 땐 get 메소드,
뭔가를 저장하고 싶을 땐 post 메소드,
이미 서버에 저장되어있는 무언가를 변경하고 싶을 때 쓰는 메소드는 put,
뭔가를 저장해뒀는데 지우고 싶을 때 쓰는 메소드가 delete이다.
Restful API의 구성요소 - 3. Message
메세지는 일반적으로 json을 가장 많이 사용한다.
json문법은 자바스크립트에서 왔다.
XML도 사용되었지만 최근엔 많이 사용되지는 않는다고 한다.
json은 리스트와 딕셔너리를 사용하는 것과 비슷하다.
다만 json에서는 대괄호를 array라고 부른다.
그리고 중괄호를 object라고 부른다.
object에서도 딕셔너리처럼 키 밸류를 쓴다.
명칭만 다르다고 봐도 된다.
request를 하기 위해서는 URL, Method, Headers, Body 항목을 세팅해줘야한다.
Header는, 메세지가 어떤 형식인지를 알려주는 내용도 들어갈 수 있고, 인증코드를 넣을 수도 있다.
인증 코드가 특히 중요하다.
인증이 안된 사람이 요청을 하는 걸 해킹이라고 하고, 서버가 이를 막아줘야한다.
인증할 수 있는 인증 코드를 헤더 담아 보내서, 서버에서 우리가 인증을 한 클라이언트인지 아니면 해킹 시도인지를 파악하게 한다.
예를 들어 회원가입을 한다면, body에 이메일이나 비밀번호 같은 정보들을 세팅한다.
이때 json 형식으로 세팅해서 보내야한다.
그럼 그 정보가 서버로 가고 서버쪽에서 회원가입하는 코드가 동작해서, 데이터베이스에 클라이언트가 보낸 정보들을 insert한다.
서버에서 DB에 작업을 다 하면 반드시 클라이언트에게 response를 해줘야한다.
단어 그대로다.
request는 클라이언트가 서버로 데이터를 요청하는 것을 말하고,
response는 서버가 클라이언트에게 데이터를 전달해주는 것을 말한다.
리퀘스트든 리스폰스든, json으로 주고 받는다.