일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 코딩
- 원티드
- Java
- 백준 java
- 프로그래머스
- IT개발자
- apm 수동설치
- 알고리즘
- 자바
- cs지식
- 백준 자바
- IT
- 알고리즘풀이
- IT취업
- 프리온보딩
- 백엔드개발자
- 코테
- 코딩테스트
- 백엔드 개발자
- 개발자
- 프리온보딩 백엔드 챌린지
- IT개발
- 개발공부
- 개발자취준
- 기술면접
- apm 소스설치
- IT취준
- 백엔드
- IT공부
- 백준
- Today
- Total
코이팅
REST, REST API, RESTful 본문
1. REST란?
1) REST의 정의
REST란 'Representational State Transfer'의 약자입니다. 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다.
좀 더 구체적으로 이야기 하자면
1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
2. HTTP Method(POST, GET, PUT, DELETE)를 통해
3. 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미합니다.
** [CRUD Operation]
CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말로 REST에서의 CRUD Operation 동작 예시는 다음과 같습니다
- Create : 데이터 생성(POST)
- Read : 데이터 조회(GET)
- Update : 데이터 수정(PUT, PATCH)
- Delete : 데이터 삭제(DELETE)
2) REST의 구성 요소
REST는 다음과 같은 3가지로 구성이 되어있습니다.
- 자원(Resource) : HTTP URI
- 자원에 대한 행위(Verb) : HTTP Method
- 자원에 대한 행위의 내용 (Representations) : HTTP Message Pay Load
3) REST의 특징
- Server-Client(서버-클라이언트 구조)
- Stateless(무상태)
- Cacheable(캐시 처리 가능)
- Layered System(계층화)
- Uniform Interface(인터페이스 일관성)
4) REST의 장단점
[장점]
- HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해 준다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
- Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
- 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
- 서버와 클라이언트의 역할을 명확하게 분리한다.
[단점]
- 표준이 자체가 존재하지 않아 정의가 필요하다.
- HTTP Method 형태가 제한적이다.
- 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구된다.
- 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.(Explorer)
2. REST API란?
1) REST API의 정의
REST API란 REST의 원리를 따르는 API를 의미합니다. 즉 , REST 기반으로 서비스 API를 구현한 것입니다.
OpenAPI(누구나 사용할 수 있는 공개된 API) 는 대부분 REST API를 제공합니다.
**[API란?]
데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것입니다.
2) REST API의 특징
- 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있습니다.
- REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있습니다.
- 즉, REST API를 제작하면 델파이 클라이언트 뿐 아니라, 자바, C#, 웹 등을 이용해 클라이언트를 제작할 수 있습니다.
3) REST API의 작동 방식
REST API는 HTTP 요청을 통해 통신하여 데이터 생성, 읽기, 업데이트 및 삭제 기능을 완료합니다. CRUD 작업이라고도 합니다. REST는 요청된 리소스에 대한 정보를 제공하고 리소스로 수행할 작업을 설명하는 네 가지 방법을 사용합니다.
- POST — 리소스 생성
- GET — 리소스 가져오기
- PUT — 리소스 업데이트
- DELETE — 리소스를 삭제합니다.
4) REST API의 설계 규칙, 예시
- URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 합니다.
Bad Example http://khj93.com/Running/
Good Example http://khj93.com/run/
- 마지막에 슬래시 (/)를 포함하지 않습니다.
Bad Example http://khj93.com/test/
Good Example http://khj93.com/test
- 언더바 대신 하이폰을 사용합니다.
Bad Example http://khj93.com/test_blog
Good Example http://khj93.com/test-blog
- 파일확장자는 URI에 포함하지 않습니다.
Bad Example http://khj93.com/photo.jpg
Good Example http://khj93.com/photo
- 행위를 포함하지 않습니다.
Bad Example http://khj93.com/delete-post/1
Good Example http://khj93.com/post/1
**[참고 응답상태코드]
- 1xx : 전송 프로토콜 수준의 정보 교환
- 2xx : 클라어인트 요청이 성공적으로 수행됨
- 3xx : 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함
- 4xx : 클라이언트의 잘못된 요청
- 5xx : 서버쪽 오류로 인한 상태코드
2. RESTful이란?
1) RESTful의 정의
RESTful은 일반적으로 REST라는 아키텍처를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어입니다.
‘REST API’를 제공하는 웹 서비스를 ‘RESTful’하다고 할 수 있습니다. RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아닙니다.
즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭됩니다.
2) RESTful의 목적
- 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것입니다.
- RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 컨벤션을 통한 API의 이해도 및 호환성을 높이는 것이 주 동기이니, 성능이 중요한 상황에서는 굳이 RESTful한 API를 구현할 필요는 없습니다.
**[RESTful 하지 못한 경우]
ex1) CRUD 기능을 모두 POST로만 처리하는 API
ex2) route에 resource, id 외의 정보가 들어가는 경우(/students/updateName)
[참고]
http://www.incodom.kr/RestFul_API
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
'CS' 카테고리의 다른 글
OAuth2.0란? (0) | 2023.01.23 |
---|---|
객체지향 프로그래밍의 5가지 설계 원칙, SOLID (2) | 2023.01.19 |
비동기 통신 Ajax와 Fetch API (0) | 2023.01.17 |
스프링 배치(Spring Batch)와 스케쥴러(Scheduler) (0) | 2023.01.17 |
시간복잡도(Time Complexity) (0) | 2023.01.15 |