REST API

이태곤·2023년 8월 23일
0

Network

목록 보기
23/23
post-thumbnail

1. REST API

  • 웹 서비스 간의 통신을 위해 HTTP 프로토콜과 RESTful한 원칙을 따라 설계된 인터페이스

    • REST (Representational State Transfer): HTTP를 활용하여 자원을 식별하고 해당 자원에 대한 행위를 표현하기 위한 아키텍처 스타일로, URI와 HTTP 메소드를 사용하여 자원과 자원에 대한 행위를 표현
  • 특징

  1. Uniform Interface: 자원들은 독립적인 인터페이스를 가지며, HTTP 버전, 기술, 플랫폼에 종속적이지 않다.

    • URI 자원식별: URI를 통해 자원을 명시
    • 표현을 통한 자원조작: HTTP 메소드(GET, POST, PUT, DELETE 등)을 이용하여 해당 자원에 대한 CRUD 작업을 수행
      • URI에 동사(예: get, delete) 사용을 지양
    • self-descriptive messages: HTTP Header에 데이터 타입 명시
      • 'Content-Type' = 'application/json'
    • HATEOAS: 응답에 페이지와 관련된 링크를 함께 제공하여, 클라이언트가 쉽게 해당 페이지에서 가능한 작업들을 확인할 수 있게 한다.
      • 서버에서 URL을 변경하더라도 링크를 동적으로 생성하여 클라이언트에게 URL 정보를 제공하므로 클라이언트와 서버 간의 독립성과 종속성을 제거할 수 있다.
      • 응답 데이터에 많은 링크가 있을 수 있어 복잡해질 수 있다.
  2. Statelss

  1. Cachable: HTTP는 기본적으로 GET 메서드에 대해 응답을 캐시할 수 있다.

    • Cache-Control 헤더를 사용하여 캐싱 기간을 설정하고, 리소스를 캐시할 수 있다.
    • POST, PATCH, DELETE 메서드는 서버 상태를 변경하거나 삭제하는 작업을 수행하기 때문에, 클라이언트에게 이전에 캐시된 응답을 전달하는 것은 일관성과 안정성을 해칠 수 있어 캐싱을 하지 않는다.
  2. Client-Server 구조: HTTP는 클라이언트와 서버 간에 명확하게 구분된 구조

    • 서버는 API를 제공하고 비즈니스 로직을 처리하며, 클라이언트는 API를 호출하여 요청하고 응답을 받는다.
  3. Layerd System: REST 아키텍처는 계층화된 구조를 따른다.

  • 장점
    1. 하나의 URI로 다양한 CRUD 작업을 할 수 있어 효율성을 높이고 자원을 절약할 수 있다.
    2. URI만으로 자원 접근과 HTTP 메서드를 통한 행위를 파악할 수 있어 가독성이 높아지며, 개발 속도를 향상시킬 수 있다.
    3. HTTP 표준을 따르는 사이트라면 REST API를 모두 호환할 수 있어 상호 운용성이 좋다.
    4. Stateless
      • 확장성: 서버와 클라이언트 간의 상태를 유지하지 않으므로, 서버는 각각의 요청을 독립적으로 처리하여 다양한 웹 브라우저나 모바일 기기와 통신할 수 있다.
      • 유연성: 서버가 클라이언트의 상태를 기억하지 않으므로, 동일한 요청에 대해 서버가 상태를 유지할 필요가 없다.
        이는 서버를 간결하게 유지하고, 클라이언트와 서버 간의 강력한 분리로 인해 유연한 시스템 아키텍처를 제공한다.

2. REST API URI 규칙

REST API URI의 규칙은 다음과 같습니다:

  1. 동작은 HTTP Method로만 표현: URI에 동작 내용이 들어가면 안된다.

    • 예를 들어 "book/delete"와 같이 동작을 나타내는 정보는 URI에 포함하면 안된다.
  2. 확장자 표시 금지: URI에 파일 확장자(.jpg, .png 등)를 포함시키면 안된다.

  3. 명사 사용: 동사보다는 명사를 사용하여 리소스를 표현해야 한다.

    • 예를 들어 "/cafe/getAlluser"보다는 "/cafe/user"와 같이 명사를 사용하는 것이 적절하다.
  4. 계층적 표현: URI는 계층적인 구조를 갖추어야 한다.

    • 예를 들어 "/집/아파트/동/호수"와 같이 리소스 간의 계층적인 구조로 나타내야 한다.
  5. 소문자와 하이픈 사용: URI는 소문자로 표기하고, 길어질 경우에는 하이픈(-)을 사용한다.

  6. HTTP 응답 상태 코드 활용: 적절한 HTTP 응답 상태 코드를 사용하여 응답을 표현하고, 상태 코드를 활용하여 클라이언트에게 필요한 정보를 제공해야 한다.

  • 예시

    • 도서관 시스템 API
  • 쿼리 스트링 혼합 API: 매개변수가 많거나 복잡할 때, 쿼리 스트링을 사용하여 API를 호출

0개의 댓글