API는 무엇인가?
Application Programming Interface의 약자로 둘 이상의 computer program간 소통을 할 수 있는 방법을 정의한 규칙의 집합이다.
API를 통해 어떤 system에 resource를 요청하고 그에 대한 응답을 받을 수 있다.
(물론 system이 필요한 정보를 제공하는 API를 서비스하고 있다면)
resource를 요청하는 측을 client, 제공하는 측을 server라 한다.
예를 들어 Google Books APIs는 Google Books service 안에서의 도서 검색이나 bookshelf를 비우는 등의 요청을 할 수 있는 method를 지원한다.
REST는 무엇인가?
REST는 REpresentational State Transfer의 약자로 distributed hypermedia system을 위한 architectural style 이다.
여섯가지 규칙들을 묶은 집합이라 볼 수 있다.
- Uniform Interface
- 같은 resource에 대한 모든 API request는 같은 형태여야 한다.
- user의 이름, 이메일과 같은 data는 오직 하나의 Uniform Resource Identifier(URI)에 속함이 보장되어야 한다.
- resource는 client가 필요한 정보를 모두 포함하고 있으면서 너무 크지 않아야 한다.
- Client-server decoupling
- client와 server는 독립적이어야 한다.
- client는 오직 요청하는 resource의 URI만 알아야 하고 server는 요청받은 resource만을 HTTP를 통해 전달할 뿐이다.
- Statelessness
- 각 request는 이 request를 처리하기 위한 모든 정보를 포함하고 있어야 한다.
- server side에서 client의 request에 대한 정보를 저장하고 있다던가의 일은 일어나선 안된다.
- Cacheability
- 가능하다면 resource는 cilent side든 server side든 cacheable 해야한다.
- server의 response는 전달된 resource의 caching이 허용되는지에 대한 정보를 포함해야 한다.
- Layered sysytem architecture
- call과 response는 여러 layer를 통과한다.
- client와 server가 직접적으로 연결되어있다고 가정하면 안된다.
- 이들 사이에 몇몇 중간자들이 있다.
(인증, 보안, load balancing 등의 기능을 더할 수 있음)
- Code on demand (optional)
- 일반적으로 static resource를 보내지만 executable code를 포함할 수도 있다.
- 이러한 경우 code는 오직 on-demand로 실행되어야 한다.
REST API는 어떻게 동작하는가
REST를 따르는 API를 REST API 혹은 RESTful API라 부른다.
REST API는 HTTP로 소통하며 일반적인 database 기능들을 수행한다.
(Creating, Reading, Updating, Deleting, a.k.a. CRUD)
GET : record를 찾을 때 (reading)
POST : record를 만들 때 (creating)
PUT : record를 갱신할 때 (updating)
DELETE : record를 삭제할 때 (delete)
특정한 시간의 resource state를 resource representation이라 부르는데 이 정보는 client에 JSON, HTML, XLT, Python, PHP, 평문 등의 형식으로 전달될 수 있다.
REST API call에서 request header와 parameter는 중요한데 이들이 중요한 식별 정보를 포함하고 있기 때문이다.
(metadata, authorization, URIs, caching, cookies, ...)
'인턴 > 준비' 카테고리의 다른 글
Go Language #2 (0) | 2023.01.06 |
---|---|
Git #4 Branching (0) | 2022.12.31 |
Git #3 Revert, reset and restore (0) | 2022.12.30 |
Git #2 Basics (1) | 2022.12.29 |
Git #1 Origins story and terms (0) | 2022.12.27 |
댓글