REST? RESTful? REST API?
REST는 웹 개발을 하게 되면서 자주 접하게되는 컨셉으로 REST에 대해 어느 정도 개념적으로는 알고 있었지만 깊게 생각해보지는 않아 이번에 한 번 정리해보려고 합니다.
출처: https://www.linkedin.com/pulse/understanding-rest-architecture-gabriel-gitonga
REST(REpresentational State Transfer)는 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다. 이 용어는 로이 필딩(Roy Fielding)의 2000년 박사학위 논문에서 소개되었다. 필딩은 HTTP의 주요 저자 중 한 사람이다. 이 개념은 네트워킹 문화에 널리 퍼졌다.
출처 : 위키백과<REST>
REST는 네트워크 소프트웨어 아키텍처로 쉽게 말해 '네트워크에서 통신을 구성할 때 이런 구조로 설계하라는 지침' 정도로 볼수 있다. 이러한 지침에는 여러 원칙이나 구성 요소, 제약 사항을 통하여 일관성을 가지고 네트워크 아키텍처를 설계하고 구현하게 된다.
원래는 네트워크 통신을 위하여 제시되었으나, 현실적으로 '네트워크'의 상당 부분은 '웹'을 기반으로 하고 있기 때문에 웹을 통한 전송에서 대부분 쓰이고 있다. 태생 자체가 데이터 송수신에 최적화 되어 있어 이를 위한 웹 API쪽에서 굉장히 많이 사용되고 있다. 이를 'REST API'라고 부른다.
REST를 표준하는 제약 사항이자 스타일이다.
Method | 의미 | Idempotent |
---|---|---|
POST | Create | No |
GET | Select | Yes |
PUT | Update | Yes |
DELETE | Delete | Yes |
Idempotent : 한 번 수행하냐, 여러 번 수행했을 때 결과가 같나?
HTTP POST, http://myweb/users
{
"users" : {
"name" : "Van"
}
}
REST는 웹 기반의 분산 시스템을 위한 아키텍처 스타일로 클라이언트와 서버 간의 역할 분리, 무상태성, 자체 서술적인 메시지, 캐싱, 계층화, 단일 인터페이스 등의 원칙을 따르며 이를 통해 시스템은 확장 가능하고 유연하며, 상호 운용성이 높아진다. REST는 HTTP를 기반으로 클라이언트와 서버 간의 통신을 단순하고 직관적으로 만들어주며, 표준 메소드를 사용하여 리소스를 조작합니다. 이를 통해 개발자는 일관된 방식으로 리소스를 관리하고 상호 작용 할수 있습니다.
REST는 웹 API, 마이크로서비스 아키텍처 등 다양한 분산 시스템에서 널리 사용되며, 확장성, 유연성, 상호 운용성, 성능 개선 등의 이점을 가지게 됩니다.
출처 : https://hanamon.kr/rest-api/
REST 기반으로 서비스 API를 구현하는 것
우리가 위에서 알아본 REST 원칙을 따르는 API를 작성한다면 바로 그것이 'REST API'일 것이다.
API는 Application Programing Interface의 약자로, 응용 프로그램 간 상호 작용을 위한 인터페이스를 제공하는 것을 말합니다. 또한 API는 다른 프로그램이 기능을 활용할 수 있도록 메소드, 데이터 구조, 프로토콜 등의 집합입니다.
자원 기반(Resource-based): 각각의 리소스(데이터 또는 서비스)는 고유한 URI(Uniform Resourece Identifier)로 식별됩니다, 클라이언트는 URI를 통해 특정 리소스에 접근하고 조작할 수 있습니다
HTTP 메소드 활용: REST API는 HTTP 메소드(GET,POST 등)를 사용하여 리소스를 조작합니다. 각 메소드는 특정한 동작을 의미하며, 클라이언트는 적절한 메소드를 선택하여 리소스에 대한 요청을 전송합니다
자체 서술적인 메시지(Self-descriptive Message): REST API의 요청과 응답 메시지는 자체적으로 설명 가능해야 합니다. 메시지의 헤더와 본문은 메시지의 의도와 내용을 명확하게 전달하며, 데이터 형식은 일반적으로 JSON 또는 XML을 사용합니다
Hypermedia as the Engine of Application State(HATEOAS): 클라이언트는 서버로부터 받은 응답을 통해 애플리케이션 상태를 파악할 수 있어야 합니다. 서버는 응답에 하이퍼미디어 링크를 포함시켜 클라이언트가 다음 동작을 수행할 수 있는 정보를 제공합니다
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html