카테고리 없음

REST, RESTful, REST API, REST 특징

sungw00 2024. 5. 17. 00:06
728x90

REST

REST(Representational State Transfer): 자원을 이름으로 구분하여 상태를 주고 받는 모든 것.

REST를 통해

1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,

2. HTTP Method(POST, GET, PUT, DELETE)를 통해

3. 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미한다.

REST의 구성 요소

1. 자원(Resource): HTTP URI

2. 자원에 대한 행위(Verd): HTTP Method

3. 자원에 대한 행위의 내용(Representations): HTTP Message Pay Load

 

RESTful: REST API를 제공하는 웹 서비스를 RESTful하다고 할 수 있다.

CRUD Operation

- Create: 데이터 생성(POST)

- Read: 데이터 조회(GET)

- Update: 데이터 수정(PUT, PATCH)

- Delete: 데이터 삭제(DELETE)

그밖의 HTTP Method

- HEAD: 서버 리소스의 헤더(메타 데이터의 취득)

- OPTIONS: 리소스가 지원하고 있는 메소드의 취득

- CONNECT: 프록시 동작의 터널 접속을 변경

REST API

GET

GET 메서드는 주로 데이터를 읽거나 검색할 때 사용되는 메서드이다.

만약 GET 요청이 성공적으로 이루어진다면 XML이나 JSON과 함께 200(ok) HTTP 응답 코드를 리턴한다.

에러가 발생하면 주로 404(Not Found) 에러나 400(Bad Request) 에러가 발생한다.

예시

// 1번째 사용자를 조회
GET /user/1

POST

POST 메서드는 주로 새로운 리소스를 생성할 때 사용된다.

조금 더 구체적으로는 POST는 하위 리소스(부모 리소스의 하위 리소스)들을 생성하는 데 사용된다.

데이터를 생성하는 것이기 때문에 요청 시 Body 값과 Content-Type 값을 작성해야 한다.

성공적으로 작업을 완료하면 201(Created) 응답 코드를 리턴한다.

예시

// JSON을 이용한 예시
POST /user
body : {date : "example"}
Content-Type : "application/json"

PUT

리소스를 생성/업데이트 하기 위해 서버로 데이터를 보낼 때 사용하는 메서드이다.

동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과가 생성된다.(멱등성)

//JSON을 이용한 예시
PUT /user/1
body : {date : "update example"}
Content-Type : "application/json"

데이터를 수정하는 것이기 때문에 요청 시 Body 값과 Content-Type 값을 작성해야 한다.

PATCH: 정보의 일부분을 변경할 때 사용한다.(멱등성X)

DELETE

지정된 리소스를 삭제하는 메서드이다.

DELETE /user/1

데이터를 삭제하는 것이기 때문에 Body와 Content-Type 값이 비워져 있다.

REST의 특징

1. Server-Client(서버-클라이언트 구조)

2. Stateless(무상태)

3. Cacheable(캐시 처리 가능)

4. Layered System(계층화)

5. Uniform Interface(인터페이스 일관성)

 

REST API 설계 예시

1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.

https://www.naver.com/search

https://www.naver.com/Search

 

2. 마지막에 슬래시(/)를 포함하지 않는다.

https://www.naver.com/search

https://www.naver.com/search/

 

3. 언더바 대신 하이픈을 사용한다.

https://www.naver.com/search-test

https://www.naver.com/search_test

 

4. 파일확장자는 URI에 포함하지 않는다.

https://www.naver.com/search

https://www.naver.com/search.jpg

 

5. 행위를 포함하지 않는다.

https://www.naver.com/search

https://www.naver.com/searching/1

 

728x90