본문 바로가기

Frontned Development/WEB

[WEB] Rest API

Rest API(REpresentational State Transfer API)란?

로이 필딩의 박사학위 논에서 웹의 장점을 최대한 활용할 수 있는 Rest 아키텍처가 발표되었습니다. 이 아키텍처 스타일의 디자인 원칙을 준수하는 API를 Rest API 또는 Restful API라 합니다.

2000년도에 발표되어서 이미 보편화가 되어버린 방식으로, 현재는 쉽게 접할 수 있습니다. Restful API는 개발자들에게 비교적 높은 수준의 유연성과 자유를 제공하는 장점이 있습니다.

 

Rest API 디자인 원칙

Rest API는 자유롭고 다양한 지원이 가능하지만, 아래 6가지 디자 원칙을 지켜야합니다.

  1. 균일한 인터페이스 : 요청이 어디에서 오는지와 무관하게, 동일한 리소스에 대한 모든 API 요청은 동일하게 보여야 합니다. REST API는 사용자의 이름이나 이메일 주소 등의 동일한 데이터 조각이 오직 하나의 URI(Uniform Resource Identifier)에 속함을 보장해야 합니다. 리소스가 너무 클 필요는 없지만, 이는 클라이언트가 필요로 하는 모든 정보를 포함해야 합니다.
  2. 클라이언트-서버 디커플링 : REST API 디자인에서 클라이언트와 서버 애플리케이션은 서로 간에 완전히 독립적이어야 합니다. 클라이언트 애플리케이션이 알아야 하는 유일한 정보는 요청된 리소스의 URI이며, 이는 다른 방법으로 서버 애플리케이션과 상호작용할 수 없습니다. 이와 유사하게, 서버 애플리케이션은 HTTP를 통해 요청된 데이터에 전달하는 것 말고는 클라이언트 애플리케이션을 수정하지 않아야 합니다.
  3. Stateless : REST API는 stateless입니다. 이는 각 요청에서 이의 처리에 필요한 모든 정보를 포함해야 함을 의미합니다. 즉, REST API는 서버측 세션을 필요로 하지 않습니다. 서버 애플리케이션은 클라이언트 요청과 관련된 데이터를 저장할 수 없습니다.
  4. 캐싱 가능성 : 가능하면 리소스를 클라이언트 또는 서버측에서 캐싱할 수 있어야 합니다. 또한 서버 응답에는 전달된 리소스에 대해 캐싱이 허용되는지 여부에 대한 정보도 포함되어야 합니다. 이의 목적은 서버측의 확장성 증가와 함께 클라이언트측의 성능 향상을 동시에 얻는 것입니다.
  5. 계층 구조 아키텍처 : REST API에서는 호출과 응답이 서로 다른 계층을 통과합니다. 경험에 따르면 클라이언트와 서버 애플리케이션이 서로 간에 직접 연결된다고 가정하지 않는 것이 좋습니다. 통신 루프에는 다수의 서로 다른 중개자가 있을 수 있습니다. REST API는 엔드 애플리케이션 또는 중개자와 통신하는지 여부를 클라이언트나 서버가 알 수 없도록 설계되어야 합니다.
  6. 코드 온디맨드(옵션) : REST API는 일반적으로 정적 리소스를 전송하지만, 특정한 경우에는 응답에 실행 코드(예: Java 애플릿)를 포함할 수도 있습니다. 이 경우에 코드는 요청 시에만 실행되어야 합니다.

 

Rest API의 작동 방식

REST API는 HTTP 요청을 통해 통신함으로써 리소스 내에서 레코드(CRUD 라고도 함)의 작성, 읽기, 업데이트 및 삭제 등의 표준 데이터베이스 기능을 수행합니다.

 

Rest API말고 다른 방법은 없는가?

쿼리언어 기반인 GraphQL이 존재합니다.

GraphQL은 Rest API와 다르게 필요한 데이터만을 정확하게 전달할 수 있어서, over-fetching, under-fetching 등의 문제를 해결하고 개발 생산성을 더욱 높일 수 있습니다.

하지만, 쿼리 언어를 사용하기 때문에 학습 곡선이 있으며, 쿼리에 따라서 오히려 성능이슈가 발생할 수 있습니다. 또한, 파일 업로드 지원 등 일부 기능을 처리하는데 제한이 있어서 보다 좋다고 말하기에는 장단점이 명확히 존재합니다.

 

참고자료

restapi 논문 원문 : https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

nhn 기술블로그 : https://meetup.nhncloud.com/posts/92

ibm cloud : https://www.ibm.com/kr-ko/topics/rest-apis

'Frontned Development > WEB' 카테고리의 다른 글

[WebApp] WebView  (0) 2025.01.23
[WEB] Multipart/form-data  (0) 2023.08.04
[WEB] Web server vs Web application server  (0) 2023.06.14
[WEB] CORS 에러와 SOP  (2) 2023.06.13
[WEB] HTTP vs HTTPS  (1) 2023.06.11