[1] 네트워크 - RESTful API란?

2024. 10. 20. 21:32네트워크

728x90

출처 : https://learnbatta.com/course/django-rest-framework/introduction-to-restful-apis/

[ REST ]

REST의 정의)

- Representational State Transfer의 약자이며, 자원을 이름으로 구분하고 자원의 상태(정보)를 주고 받는 것을 의미합니다. 자원의 표현에 의한 상태 전달이라고 할 수 있습니다.

- 자원 : 소프트웨어가 관리하는 모든 것을 지칭 합니다.(데이터, 문서 등)

- 자원의 표현 : 그 자원을 표현하기 위한 이름

- ex) DB의 회원 정보가 자원일 때, 'members'를 자원의 표현으로 볼 수 있음.

- 상태(정보) 전달 : 데이터가 요청되는 시점에 자원의 상태(정보)를 전달

- 일반적으로 JSON 혹은 XML형태로 데이터를 주고 받음.

※ 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나

 

REST의 개념)

- HTTP URL을 통해 자원(Resource)을 명시하고, HTTP method(POST,GET,PUT,DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미합니다.

 

CRUD Operation)

- Create : 생성(POST)

- Read : 조회(GET)

- Update : 수정(PUT)

- Delete : 삭제(DELETE)

※ HEAD - header 정보조회(HEAD)도 있다.

 

REST의 구성 요소)

1) 자원(Resource) : HTTP URL

-  Client는 URL을 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 server에 요청한다.

 

2) 행위(Verb) : HTTP Method

- HTTP프로토콜의 Method를 사용하고, GET, POST, PUT, DELETE 같은 메서드를 제공한다.

 

3) 표현(Representation of Resource) : HTTP Message Pay Load

- Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 그에 맞는 응답을 보낸다.

- REST정의에서 말했듯이, JSON 혹은 XML을 통해 일반적으로 데이터를 주고 받는다.

 

REST의 특징)

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

- REST서버는 API제공하고 클라이언트는 사용자 인증이나 컨텍스트(세션,로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되어 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로 간 의존성이 줄어들게 됩니다.

 

2. Stateless (무상태성)

- REST는 무상태성 성격을 가지며 작업을 위한 상태정보를 따로 저장하고 관리하지 않습니다. 세션이나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API서버는 들어오는 요청을 처리만 하면됩니다. 그 결과로 서비스의 자유도가 높아지고 불필요한 정보를 관리하지 않게 되어 구현이 단순해집니다.

 

3. Cacheable (캐시 처리 가능)

- REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹 표준을 그대로 사용하기 때문에 웹의 기존 인프라를 그대로 활용할 수 있습니다. 따라서 HTTP가 가진 캐싱 기능을 사용 할 수 있습니다. 그 덕분에 서버 부하를 줄이고 성능을 향상시킬 수 있습니다.

 

4. Layered System (계층화)

- REST서버는 다중 계층으로 구성될 수 있으며 보안,로드밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 프록시, 게이트웨이 같은 네트워크 기반의 중간 매체를 사용할 수 있습니다.

 

5. Self-descriptiveness (자체 표현 구조)

- REST API메시지만 보고 쉽게 이해할 수 있는 자제 표현 구조로 되어 있습니다.

 

6. Uniform-Interface (균등한 인터페이스)

- HTTP 표준만 따른다면 안드로이드/IOS 플랫폼이든 특정 언어나 기술에 종속되지 않고 모든 플랫폼에 사용할 수 있으며 URL로 지정한 리소스에 대한 조작이 가능한 아키텍처 스타일입니다.

 

 

[ REST API ]

REST API란)

- REST의 원리와 특징을 기반으로 구현한 API를 의미합니다.

 

REST API설계 규칙)

1) URL은 동사보다는 명사를 사용해야한다

- 좋은예시 ) http://test.com/running

- 나쁜예시 ) http://test.com/run

 

2) URL은 대문자보다는 소문자를 사용하여야한다.

- 좋은예시 ) http://test.com/run

- 나쁜예시 ) http://test.com/Run

 

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

- 좋은예시 ) http://test.com/run

- 나쁜예시 ) http://test.com/run/

 

4) 언더바(_)대신 하이픈(-)을 사용한다

- 좋은예시 ) http://test.com/test-blog 

- 나쁜예시 ) http://test.com/test_blog

 

5) 파일확장자를 URL에 포함하지 않는다.

- 좋은예시 ) http://test.com/test-blog

- 나쁜예시 ) http://test.com/test-blog.png

 

6) 행위(Method - GET, POST, PUT, DELETE)를 포함하지 않는다.

- 좋은예시 ) http://test.com/gets

- 나쁜예시 ) http://test.com/get-post

 

REST API설계 예시)

CRUD HTTP Method(메서드) Route(경로)
resource들의 목록 표시 GET /resource
resource 특정 한 개 표시 GET /resource/:id
resource 생성 POST /resource
resource 수정 PUT /resource/:id
resource 삭제 DELETE /resource/:id

 

 

HTTP 응답 상태 코드)

코드 번호 코드에 대한 설명
1xx 전송 프로토콜 수준의 정보 교환
2xx 클라이언트 요청이 성공적으로 수행됨
3xx 클라이언트는 요청을 완료하기 위해 추가적인 행동이 필요함
4xx 클라이언트의 잘못된 요청
5xx 서버쪽 오류로 인한 상태 코드

 

 

[ RESTful API ]

※ RESTful의 목적은 이해하기 쉽고 사용하기 쉬운 REST API를 만들기 위함입니다.

RESTful과 RESTful API)

- RESTful은 REST라는 아키텍처를 구현하는 웹 서비스를 나타나기 위해 사용되는 용어입니다.

- RESTful API는 REST의 원리를 잘 따르는 API라고 할 수 있습니다. 

- 또한 REST를 사용하되, REST API의 설계 규칙을 올바르게 지켰을때 RESTful하다라고 할 수 있습니다.

 

RESTful이 실패한 경우)

- 모든 CRUD기능을 각 메서드를 올바르게 사용하지않고 전체 POST로 사용하는 경우

- URL 규칙을 올바르게 지키지 않은 경우

- 그 외에 REST API설계 규칙을 벗어난 모든 경우

 

 

[ 정리 ]

- RESTful API는 REST의 원리를 잘 따르고, 설계규칙을 잘 따른 시스템을 말합니다.

- 반대로 원리와 규칙을 잘 따르지 못하다면 RESTful에 실패했다고 할 수 있습니다. 

- RESTful한 API를 잘 설계하여 이해하기 쉽고 사용하기 쉬운 시스템을 만드는 것이 목적입니다.

- 협업과 유지보수에도 용이합니다.

 

 

 

[ 참고 ]

https://aws.amazon.com/ko/what-is/restful-api/

https://grape-blog.tistory.com/8

https://tao-tech.tistory.com/11#RESTful%20API-1

https://velog.io/@seokkitdo/Network-REST%EB%9E%80-REST-API%EB%9E%80-RESTful%EC%9D%B4%EB%9E%80

https://velog.io/@alwaysryu13/REST-%ED%86%B5%EC%8B%A0%EC%9D%B4%EB%9E%80-Java%EB%A1%9CREST%ED%86%B5%EC%8B%A0%EA%B5%AC%ED%98%84%ED%95%B4%EB%B3%B4%EA%B8%B0

https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html

https://ko.wikipedia.org/wiki/REST

 

 

728x90