REST ( Representational State Transtfer )
자원(정보)에 이름을 지어 구분하고, 고유한 주소를 지정해 해당 자원의 상태/정보를 주고 받는 방법론이다.
URL를 통해 자원을 정의하고, 메서드를 통해 할 일(CRUD)을 지정하며, JSON 같은 특정한 형태로 데이터를 주고 받는 것을 의미한다.
자원 : 이미지, 동영상, DB
고유한 주소 : URI
Method : Post, Get, Put, Delete
CRUD : Create, Read, Update, Delete
API ( Application Programming Interface )
제공하는 정보(ex. 날씨 정보)를 어떤 방식으로 요청해야 하는지, 그 요청으로 어떤 데이터를 제공 받을 수 있을지에 대해 정보 제공자(ex. 기상청)가 만들어 놓은 규격이다.
TV는 리모콘으로 제어한다면, 운영 체제나 프로그래밍 언어가 제공하는 기능은 API를 통해 제어하여 우리의 App에 활용한다.
REST API
server - client 간에 정보를 주고받을 수 있게 하는 REST 기반의 인터페이스다. 요청하는 메세지 자체에 자원, 그에 대한 메서드, 자원의 형태가 담겨있으므로, 요청을 한눈에 파악할 수 있다.
모든 자원을 하나의 Endpoint 에 연결해놓고, 각 Endpoint 는 그 자원과 관련된 내용만 관리한다.
[ Rest API 의 구성요소 ]
HTTP POST, https://twofivezero.tistory.com/
{
"users": {
"name": "twofivezero"
}
}
1. 자원(Resource) : 각 자원의 고유 ID인 URI를 이용하여 자원을 지정한다. 일반적으로 동사보다 명사를 사용한다.
2. 행위(Verb) : HTTP 기본 Method인 GET/POST/DELETE/PUT 를 이용한다. ( =CRUD Method )
할 일 (CRUD) | HTTP Method | Path (Route) |
resource들의 목록을 표시 | GET | /resource |
resource 하나의 내용을 표시 | GET | /resource/:id |
새로운 resource 생성 | POST | /resource |
resource 수정 | PUT | /resource/:id |
resource 삭제 | DELETE | /resource/:id |
3. 표현(Representation of Resource) : Client의 요청에 대한 Server의 응답. JSON이 가장 많이 활용된다.
[ Rest API 의 특징 ]
1. Uniform Interface (일관된 인터페이스)
client - server 사이의 인터페이스를 GET, PUT, POST, DELECT 4가지로 통일했다. 이 일관된 Interface 덕분에 모든 언어( Phython, PHP, C#, Ruby, Java )와 Platform( iOS, Android, Mac, Windows )에서 Rest API를 요청할 수 있다.
2. Stateless (무상태성)
server 에 작업을 위한 client 의 상태 정보를 저장하지 않는다. 때문에 server 는 각각의 요청을 별개의 것으로 받아들여 (같은 사람이 하더라도) 이전 요청이 다음 요청과 연관되지 않아 구현이 쉽고 단순하다. 대신 client의 요청에는 server 가 요청을 처리하는 데 필요한 모든 정보가 담겨 있어야 한다.
3. Cacheable (캐시 가능)
HTTP 라는 기존의 웹표준을 적용하기 때문에, 웹의 기존 인프라인 캐싱 기능을 사용할 수 있어 전체 응답 시간과 성능 그리고 server의 자원 사용이 효율적이다.
4. Client-Server Architecture (서버-클라이언트 구조)
자원을 가지고 있는 server는 API를 제공하고, 자원을 요청하는 client가 사용자 인증, Context(세션, 로그인 정보) 등을 직접 관리하고 사용자가 원하는 화면을 보여준다. 맡은 역할을 구분해 서로 간의 의존성을 줄인다.
5. Layered System(계층 구조)
client 에서는 REST API server 만 호출하기 때문에, server는 client 모르게 API server에 여러 계층(사용자 인증, 암호화, 로드밸런싱 등)을 추가하여 유연한 구조로 개발할 수 있고, Proxy, Gateway 같은 네트워크 기반의 중간매체를 사용할 수 있다. client 측에서는 server와 직접 통신하는지, 중간 server와 통신하는지 알 수 없다.
6. Code on Demand (옵션)
client 가 자원에 대한 표현을 응답으로 받고 처리할 때, server에서 Java applet, Javascript 실행 코드를 받아 기능을 일시적으로 확장할 수 있다.
도움을 준 정보들
유튜브:
얄팍한 코딩사전 [ REST API가 뭔가요? ] youtu.be/iOueE9AXDQQ
칼럼:
https://ko.wikipedia.org/wiki/REST
https://mangkyu.tistory.com/46
https://m.blog.naver.com/azure0777/221066646741
https://engkimbs.tistory.com/855
https://velog.io/@taylorkwon92/REST-API%EB%9E%80
https://medium.com/@lidiach217/network-restful-api-d35522ef00e
https://programmer7895.tistory.com/28
'WEB' 카테고리의 다른 글
IE11 크로스브라우징_Polyfill의 적용과 SVG의 스타일링 이슈 (0) | 2023.01.03 |
---|---|
검색창에 https://www.google.com 입력 후 일어나는 일 (URL, DNS 중심) (1) | 2022.12.25 |
[WEB] Cookie와 Session으로 HTTP의 비연결성, 비상태성 보완하기 (0) | 2020.08.19 |
[WEB] Browser의 Rendering_2. Render Tree의 생성, 배치, 그리기 (0) | 2020.08.12 |
[WEB] Attribute와 Property (0) | 2020.07.31 |
댓글