웹 강의를 들으면서 REST API를 사용하게 되었는데,
사용하는 기술의 개념은 알아야 할 것 같아서 구글링을 통해 개념을 정리해보았다!
REST란?
REST : Representational State Transfer
월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다.
- 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다.
- 즉, 자원(resource)의 표현(representation)에 의한 상태 전달을 의미한다.
자원 : 해당 소프트웨어가 관리하는 모든 것 예) 문서, 그림, 데이터, 해당 소프트웨어 자체 등
자원의 표현 : 그 자원을 표현하기 위한 이름 예) DB의 학생 정보가 자원일 때, ‘students’를 자원의 표현으로 정한다. - 상태(정보) 전달
JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다. - 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다.
- REST는 네트워크상에서 Client와 Server 사이의 통신 방식 중 하나이다.
REST의 구체적인 개념.
- HTTP UR을 통해 자원을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
- 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URL를 부여한다.
- HTTP Method
- GET : 정보 요청, URI가 가진 정보를 검색하기 위해 서버에 요청한다. (Read)
- POST : 정보 입력, 클라이언트에서 서버로 전달하려는 정보를 보낸다. (Create)
- PUT : 정보 업데이트, 데이터 전체를 바꿀 때 사용한다. (Update)
- PATCH : 정보 업데이트, 데이터 일부만 바꿀 때 사용한다. (Update)
- DELETE : 정보 삭제, 안전성 문제로 대부분 서버에서 비활성화한다. (Delete )
REST의 장단점
장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
- Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
- 서버와 클라이언트의 역할을 명확하게 분리한다.
단점
- 표준이 존재하지 않는다.
- 사용할 수 있는 메소드가(HTTP Method) 4가지 밖에 없어 제한적이다.
REST 구성 요소
1. 자원(Resource) : HTTP URI
- 모든 자원은 고유한 ID를 가지고 ID는 서버에 존재하고 클라이언트는 각 자원의 상태를 조작하기 위해 요청을 보낸다. HTTP에서 이러한 자원을 구별하는 ID는 HTTP URI 이다.
2. 자원에 대한 행위(Verb) : HTTP Method
- 클라이언트는 URI를 이용해 자원을 지정하고 자원을 조작하기 위해 Method를 사용한다.
HTTP 프로토콜에서는 GET, POST, PUT, DELETE같은 Method를 제공한다.
3. 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load
- 클라이언트가 서버로 요청을 보냈을 때 서버가 응답으로 보내주는 자원의 상태
JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.
REST의 특징
1. 인터페이스 일관성
- URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.
2. 무상태(Stateless)
- 클라이언트의 context가 서버에 저장되어서는 안 된다
3. 캐시 처리 기능(Cacheable)
- 웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있다.
HTTP가 가진 가장 강력한 특징 중 하나인 캐싱 기능을 적용할 수 있다.
4. 계층화(Layered System)
- Client는 REST API Server만 호출한다.
- REST Server는 다중 계층으로 구성될 수 있다.
- API Server는 순수 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있다.
5. Code on demand(optional)
- 자바 애플릿이나 자바스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있다.
- Server로부터 스크립트를 받아서 Client에서 실행한다.
6. 클라이언트/서버 구조
- 자원이 있는 Server, 자원을 요청하는 Client의 구조를 가진다.
REST API란?
API - Application Programming Interface
- 인터페이스는 어떤 장치끼리 정보를 교환하기위한 수단이나 방법이다.
- API는 응용프로그램 프로그래밍 인터페이스, 말 그대로 프로그램을 위한 인터페이스이다.
- API란 클라이언트가 리소스를 요청할 수 있도록 서버측에서 제공된 인터페이스(interface)를 말하며
클라이언트나 서버같은 다른 프로그램끼리 데이터를 주고받는 방법을 뜻한다.
REST API
- REST의 특징을 기반으로 서비스 API를 구현한 것이다.
- REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.
- 즉, REST API를 제작하면 델파이 뿐 아니라, 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있다.
- URI는 정보의 자원만 표현해야 하며, 자원의 행위는 HTTP Method에 명시한다
REST API를 왜 쓸까?
- 클라이언트와 서버의 역할을 명확하게 분리할 수 있다
- 애플리케이션을 모듈, 기능별로 분리할 수 있다.
- 다른 애플리케이션, 플랫폼으로의 확장성(멀티 플랫폼)
- 유지보수가 용이하다.
- API가 의도하는 바를 명확하게 나타내므로 협업에 유리하다.
REST API의 설계 규칙
1. URI는 명사를 사용한다.(리소스명은 동사가 아닌 명사를 사용해야 한다.)
아래와 같은 동사를 사용하지 않아야 한다.
- /getAllUsers
- /createNewUser
- /updateUser
- /deleteUser
2. 슬래시( / )로 계층 관계를 표현한다.
- http://restapi.example.com/houses/apertments
3. URI 마지막 문자로 슬래시 ( / )를 포함하지 않는다.
- REST API는 분명한 URL를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URL 경로의 마지막에는 슬래시(/ )를 사용하지 않는다.
4. 밑줄( _ )을 사용하지 않고, 하이픈( - )을 사용한다.
5. URI는 소문자로만 구성한다.
- PFC 3986(URL 문법 형식)은 URL 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문이다.
6. HTTP 응답 상태 코드 사용
상태코드
- 상태 코드는 클라이언트와 서버 간의 통신상태를 나타내는 일련의 표준화된 코드 모음이다.
- 클라이언트는 해당 요청에 대한 실패, 처리완료 또는 잘못된 요청 등에 대한 피드백을
상태 코드를 통해 서버에게 보낸 요청이 어떻게 처리되었는지 알 수 있다. - 1xx : 정보 응답 / 2xx : 성공 응답 / 3xx : 리다이렉트 / 4xx : 클라이언트 요청 오류 / 5xx : 서버 오류
7. 파일확장자는 URI에 포함하지 않는다.
- Ex) http://localhost:8080/eStore/photo.jpg (X)
REST API와 RESTful API의 차이
- REST의 설계 규칙을 잘 지켜서 설계된 API를 RESTful한 API라고 한다.
- 'REST API'를 제공하는 웹 서비스를 'RESTful' 하다고 할 수 있다.
https://usefultoknow.tistory.com/entry/REST%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
https://ko.wikipedia.org/wiki/REST
https://be-a-weapon.tistory.com/m/138
'Study > REST API' 카테고리의 다른 글
[REST API] 프로젝트 생성 (0) | 2022.08.12 |
---|