IT/CS 공부

[CS] REST API

박소민 2022. 3. 8. 23:09
REST API
  • 개념
    • REST는 Representational State Transfer의 줄임말
    • 자원(resource)의 이름/표현(representation)으로 구분하여 상태를 주고받는 모든 것을 의미
    • REST API: REST 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스
  • 즉, REST란
    • HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, 
    • HTTP Method(POST, GET, PUT, DELETE)를 통해 
    • 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.
  • 구성
    • 표현(Representations)
    • 자원(RESOURCE) - URI 
    • 행위(Verb) - HTTP METHOD
      • POST : POST를 통해 해당 URI를 요청하면 리소스를 생성 
      • GET: GET를 통해 해당 리소스를 조회 →  리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다.
      • PUT: PUT를 통해 해당 리소스를 수정
      • DELETE: DELETE를 통해 리소스를 삭제

 

REST API 디자인 가이드 
  • 1. URI정보의 자원을 표현해야 한다.
  • 2. 자원에 대한 행위HTTP Method(POST, GET, PUT, DELETE)로 표현한다.

 

  • RESTful하게 API를 디자인 하는 것
    1. 리소스 와 행위 를 명시적이고 직관적으로 분리한다.
      • 리소스는 URI로 표현되는데 리소스가 가리키는 것은 명사로 표현되어야 한다.
      • 행위는 HTTP Method로 표현하고, GET(조회), POST(생성), PUT(기존 entity 전체 수정), PATCH(기존 entity 일부 수정), DELETE(삭제)을 분명한 목적으로 사용한다.
    2.  Message 는 Header 와 Body 를 명확하게 분리해서 사용한다.
      • Entity 에 대한 내용은 body 에 담는다.
      • 애플리케이션 서버가 행동할 판단의 근거가 되는 컨트롤 정보인 API 버전 정보, 응답받고자 하는 MIME 타입 등은 header 에 담는다.
      • header 와 body 는 http header 와 http body 로 나눌 수도 있고, http body 에 들어가는 json 구조로 분리할 수도 있다.
    3.  API 버전을 관리한다.
      • 환경은 항상 변하기 때문에 API 의 signature 가 변경될 수도 있음에 유의하자.
      • 특정 API 를 변경할 때는 반드시 하위호환성을 보장해야 한다.
    4.  서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
      • 브라우저는 form-data 형식의 submit 으로 보내고 서버에서는 json 형태로 보내는 식의 분리보다는 json 으로 보내든, 둘 다 form-data 형식으로 보내든 하나로 통일한다.
      • 다른 말로 표현하자면 URI 가 플랫폼 중립적이어야 한다.

 

REST API의 장단점
  • 장점
    1. Open API 를 제공하기 쉽다
    2. 멀티플랫폼 지원 및 연동이 용이하다.
    3. 원하는 타입으로 데이터를 주고 받을 수 있다.
    4. 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.
  • 단점
    1. 사용할 수 있는 메소드가 4 가지 밖에 없다.
    2. 분산환경에는 부적합하다.
    3. HTTP 통신 모델에 대해서만 지원한다.

 


출처 링크

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Development_common_sense

'IT > CS 공부' 카테고리의 다른 글

[CS] 트리  (0) 2022.06.11
[CS] 해시테이블  (0) 2022.05.01
[CS] Servlet  (0) 2022.04.01
[CS] MVC  (0) 2022.04.01
[기술 면접 대비] Spring Framework  (0) 2022.03.08