-
REST API란 무엇인가?CS 2023. 12. 5. 17:53
취업을 위해 모집공고를 보다보면 REST API/ RESTful API라는 단어를 찾아볼 수 있다. 그래서 지난 포스트에서 REST API에 대해 알아보고 정리를 하려고 했으나, HTTP API, HTTPmethod가 선행 되어야 할 것 같아서 HTTP API에 대해 먼저 정리를 했다.
REST란 무엇인가?
REST는 (REpresentational State Transfer)의 약자로 네트워크 아키텍처 스타일이다.
네트워크 아키텍처 스타일 : 네트워크 자원을 정의하고 처리하는 방법의 전반을 말한다.
REST는 2000년도 로이필딩(Roy Fielding)의 박사학위 논문에서 최초로 소개되었다. 로이필딩은 HTTP의 주요 저자 중 한명으로 그 당시 웹(HTTP)의 설계의 우수성에 비해 제대로 사용되어지지 못하는 것을 보고 HTTP의 장점을 최대한 활용할 수 있는 아키텍쳐로서 REST를 발표했다.
REST API, RESTful API란 무엇인가?
즉, REST는 HTTP를 잘 활용하기 위한 원칙이며, REST API는 REST원칙을 준수해서 만든 API를 뜻한다.
이 원칙을 완벽하게 지키면서 개발하는 것을 RESTful API라고 한다.
REST의 제약조건 4가지
- 자원의 식별
요청 내에 기술된 개별 자원을 식별할 수 있어야 한다.
--> URI를 통해 리소스가 식별되어야 한다. - 메시지를 통한 리소스 조작
클라이언트가 어떤 자원을 지칭하는 메시지와 특정 메타데이터만 가지고 있다면 이것으로 서버 상의 해당 자원을 변경·삭제할 수 있는 충분한 정보를 가지고 있다는 것이다.
보통 HTTP method를 통해서 표현하게 된다. - 자기서술적 메시지
각 메시지는 자신을 어떻게 처리해야 하는지에 대한 충분한 정보를 포함해야 한다.
예를 들어 요청 메시지에서 HOST에 대한 정보가 빠져있다거나, 응답 메시지에서 Content-Type이 빠져있는 경우는 자기서술적인 메시지라고 할 수없다.
그렇다면 위와 같은 응답 메시지는 자기서술적이라고 할 수 있을까?HTTP/1.1 200 OK Content-Type: application/json [ { "op": "remove", "path": "/a/b/c" } ]
Content-Type에 JSON이라 제대로 적혀있기 때문에 자기서술적인 메시지라고 볼 수 있으나, 받는사람 입장에서 "op"가 무엇을 뜻하는지 알 수 없기 때문에 자기서술적이지 않다. - 애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어
만약에 클라이언트가 관련된 리소스에 접근하기를 원한다면, 리턴되는 지시자에서 구별될 수 있어야 한다.
즉, HTML처럼 하이퍼링크가 추가되어 다음에 어떤 API를 호출해야하는지를 해당 링크를 통해 받을 수 있어야한다.
사용자가 어떤 글을 등록한다면 삭제, 수정과 같은 추가적인 동작을 할 수 있는데, 이런 행동을 상태 전이라고 한다
즉, 링크에 상태전이에 대한 정보가 담겨있어야한다.
{ "seq": 1, "title": "post 1 ", "content": "posted!!", "createdAt": "2023-12-05 17:42:00", "_links": { "self": { "href": "http://localhost/board/posts/1" }, "get": { "href": "http://localhost/board/posts/1" }, "delete": { "href": "http://localhost/board/posts/1" }, "edit": { "href": "http://localhost/board/posts/1" } } }
위의 제약조건을 완벽하게 지키면서 개발하는 것을 RESTful API라고 한다.
하지만, 실무에서 이런 방법으로 개발하는 것은 현실적으로 어렵고, 또 추가 개발 비용대비 효과가 있는 것도 아니라고 한다.
그러나 이미 많은사람이 해당조건을 지키지 않아도 REST API라고 하기 때문에, HTTP API나 REST API를 거의 같은 의미로 사용하고 있다.
참고자료
https://www.inflearn.com/questions/126743/http-api-vs-rest-api
https://bentist.tistory.com/37
https://ko.wikipedia.org/wiki/REST
https://velog.io/@bluewind8791/what-is-rest-api
'CS' 카테고리의 다른 글
동시성 제어(Concurrency Control) (0) 2024.03.26 쿠키(Cookie)란 무엇인가? (+ Session 추가정리) (0) 2023.12.18 NoSQL이란 무엇인가? (0) 2023.12.14 HTTP API와 HTTP Method (0) 2023.12.04 HTTP 기초 (1) 2023.11.11 - 자원의 식별