본문 바로가기
CS

REST(RESTful) API란?

by devved 2022. 9. 22.
반응형

REST API?

RESTfull API(rePresentational State Transfer)라는 용어의 약자로
'특정자원(데이터)를 어떤 방식으로 전달하는 것'으로 간주하고 이를 표현하는 방식을 통일하여
개발자들간의 의사소통을 원활히 하도록 도와주는 약속이다.

즉 REST란
1. HTTP URI를 통해 자원을 명시하고
2. HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD를 적용하는 것을 의미

CRUD란 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create, Read, Update, Delete를 묶어서 일컫는 말로 REST에서 CRUD는 다음과 같다

Create : 데이터 생성(POST)
Read : 데이터 조회(GET)
Update : 데이터 수정(PUT)
Delete : 데이터 삭제(DELETE)

 

REST는 아래에서 설명할 제약조건(특징)들을 가지고 있는데 이 모든 제약조건이 지켜진 형태를 REST “-ful” 하다고 표현한다.

 

RESTfull의 6가지 제약조건

Client-Server : 서로 상호무관하게 작성해야 한다.
Stateless : 무상태성, 접속했다는 사실을 기억해서는 안된다.
Cacheable : 관련 정보를 서버에 저장할 수 있어야한다.
Uniform interface : 동일한 인터페이스
Layered system : 각 영역이 나뉘어져 있어야한다.
Code on demand : 실행가능한 코드를 내려줘야 한다.

 

여기서 더 자세히 알아야 하는 영역은 Uniform interface이다.

 

Uniform interface

Uniform interface를 실현하기 위해서는 다음 규칙을 지켜서 네이밍을 하면 된다.

1.URI는 동사보다는 명사로 구성합니다.(URI는 정보의 자원을 표현)
2.Resource에 대한 행위를 HTTP method (GET, POST, PUT, DELETE)만으로 표현합니다.

// 예시
GET /members/delete/1 (X) 동사로 표현x 
DELETE /members/1 (o) method로 행위 표현 후 리소스는 명사로 구성 

// 예시2(회원정보를 가져오는 URI) 
GET /members/show/1 (x) 
GET /members/1 (o) 

// 예시3(회원 추가시) 
GET /members/insert/2 (x) 
GET 메서드는 리소스 생성에 맞지 않음 POST /members/2 (o)

3.Resource 사이에 연관 관계 및 계층 관계가 있는 경우 slash('/') 를 사용합니다.
ex) [GET] /users/{user_id}/profile

http://restapi.example.com/houses/apartments http://restapi.example.com/animals/mammals/whales

4.URI 마지막 문자로 /를 포함하지 않습니다.
5.URI가 길어지는 경우 - 를 사용하여 가독성을 높입니다.
6.밑줄(_)은 URI에 사용하지 않습니다.
7.URI 경로에는 소문자가 적합합니다.(대소문자가 구별되므로 대문자의 사용은 피합니다)
8.파일 확장자는 URI에 포함시키지 않습니다. (이때, payload에 포함되는 파일의 확장자는 headers에 포함하도록 합시다)
9.응답 Response 의 status code의 기본적인 규칙을 따릅니다.

 

추가 팁

1.리소스간의 연관 관계를 표현

// /리소스명/리소스 ID/관계가 있는 다른 리소스명 
GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때) 

// 만약 관계명이 복잡한경우 서브리소스에 명시적으로 표현하는 방법 
// 사용자가 좋아하는 디바이스 목록을 표현해야할 경우 아래와 같이 사용할 수 있음 
GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때) 

2.HTTP 응답 상태 코드
정확한 응답의 상태코드만으로도 많은 정보를 전달할 수가 있기 때문에 잘 설계된 REST API는 URI만 잘 설계된 것이 아닌 그 리소스에 대한 응답을 잘 내어주는 것까지 포함되어야 한다.

Reference

https://ko.wikipedia.org/wiki/REST
https://velog.io/@westeeven0612/RestFull-API
https://meetup.toast.com/posts/92
https://velog.io/@onady/REST-API-RESTfull-API%EB%9E%80

반응형

'CS' 카테고리의 다른 글

디자인 패턴 - 옵저버 패턴  (0) 2023.04.05
디자인 패턴 - 전략패턴  (0) 2023.04.03
디자인 패턴 - 의존성 주입(DI)  (0) 2023.04.01
디자인 패턴 - 팩토리 패턴  (0) 2023.03.30
디자인패턴 - 싱글톤 패턴  (0) 2023.03.28