1. Rest

  1. [설명]
    1. Representational State Transfer의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 말합니다
    2. HTTP URI를 통해 자원(Resource)을 명시하고 HTTP Method(POST, GET, PUT, DELETE, PATCH등)를 통해 해당 자원(URI)에 대한 *CRUD Operation을 적용하는 것을 말합니다
    3. CRUD Operation
      1. CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 말하는 것 입니다
      2. Create : 데이터 생성을 말합니다
        1. PSOT
      3. Read : 데이터 조회를 말합니다
        1. GET
      4. Update : 데이터 수정을 말합니다
        1. PUT, PATCH
      5. Delete : 데이터 삭제를 말합니다
        1. DELETE
  2. [구성]
    1. 자원(Resource)
      1. HTTP URI
    2. 자원에 대한 행위(Verb)
      1. HTTP Method
    3. 자원에 대한 행위의 내용 (Representations)
      1. HTTP Message Pay Load
  3. [특징]
    1. On-Demand Code(온디맨드 코드)
      1. REST 아키텍처 스타일에서 서버는 소프트웨어 프로그래밍 코드를 클라이언트에 전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정할 수 있습니다
      2. 웹 사이트에서 등록 양식을 작성하면 브라우저는 잘못된 전화번호와 같은 실수를 즉시 강조 표시합니다
      3. 서버에서 전송한 코드로 인해 이 작업을 수행할 수 있습니다
    2. Stateless(무상태)
      1. REST 아키텍처에서 무상태는 서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법을 말합니다
      2. 클라이언트는 임의의 순서로 리소스를 요청할 수 있으며 모든 요청은 무상태이거나 다른 요청과 분리가 됩니다
      3. REST API 설계 제약 조건은 서버가 매번 요청을 완전히 이해해서 이행할 수 있음을 말합니
    3. Cacheable(캐시 처리 가능)
      1. RESTful 웹 서비스는 서버 응답 시간을 개선하기 위해 클라이언트 또는 중개자에 일부 응답을 저장하는 프로세스인 캐싱을 지원합니다
      2. RESTful 웹 서비스는 캐시 가능 또는 캐시 불가능으로 정의되는 API 응답을 사용하여 캐싱을 제어합니다
    4. Layered System(계층화)
      1. 클라이언트는 클라이언트와 서버 사이의 다른 승인된 중개자에게 연결할 수 있으며 여전히 서버로부터도 응답을 받는 것을 말합니다
      2. 서버는 요청을 다른 서버로 전달할 수도 있습니다. 클라이언트 요청을 이행하기 위해 함께 작동하는 보안, 애플리케이션 및 비즈니스 로직과 같은 여러 계층으로 여러 서버에서 실행되도록 RESTful 웹 서비스를 설계함을 말합니다
      3. 클라이언트에 보이지 않는 상태로 유지됩니다
    5. Uniform Interface(인터페이스 일관성)
      1. 모든 RESTful 웹 서비스 디자인의 기본입니다
      2. 서버가 표준 형식으로 정보를 전송함을 말합니다
      3. 형식이 지정된 리소스를 REST에서 표현이라 말합니다
      4. 서버 애플리케이션에 있는 리소스의 내부 표현과 다를 수 있습니다
      5. [4가지 아키텍처 제약 조건]
        1. 요청은 리소스를 식별해야 합니다. 이를 위해 균일한 리소스 식별자를 사용합니다
        2. 클라이언트는 원하는 경우 리소스를 수정하거나 삭제하기에 충분한 정보를 리소스 표현에서 가지고 있으며, 서버는 리소스를 자세히 설명하는 메타데이터를 전송하여 이 조건을 충족합니다
        3. 클라이언트는 표현을 추가로 처리하는 방법에 대한 정보를 수신하고, 이를 위해 서버는 클라이언트가 리소스를 적절하게 사용할 수 있는 방법에 대한 메타데이터가 포함된 명확한 메시지를 전송합니다
        4. 클라이언트는 작업을 완료하는 데 필요한 다른 모든 관련 리소스에 대한 정보를 수신하고, 이를 위해 서버는 클라이언트가 더 많은 리소스를 동적으로 검색할 수 있도록 표현에 하이퍼링크를 넣어 전송합니다
  4. [장점]
    1. HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없습니다
    2. HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해줍니다
    3. HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능합니다
    4. Hypermedia API의 기본을 충실히 지키면서 범용성을 보장합니다
    5. REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있습니다
    6. 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화 할 수 있습니다
    7. 서버와 클라이언트의 역할을 명확하게 분리해줍니다
  5. [단점]
    1. 표준이 자체가 존재하지 않아 정의가 필요합니다
    2. HTTP Method 형태가 제한적입니다
    3. 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구됩니다
    4. 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많습니다

2. Rest API

  1. [설명]
    1. Rest의 원리를 따르는 API를 말합니다
  2. [요구사항]
    1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 합니다
    2. 마지막에 슬래시 (/)를 포함하지 않습니다
    3. 언더바 대신 하이폰을 사용합니다
    4. 파일확장자는 URI에 포함하지 않습니다
    5. 행위를 포함하지 않습니다

3. Restful API

  1. [설명]
    1. Rest의 원리를 따르는 시스템을 말합니다
    2. Rest Api의 설계 규칙을 올바르게 지킨 시스템을 Restful 하다라고 말하며, 모든 CRUD기능을 PSOT로 처리하는 API or URI규칙을 올바르게 지키지 않을 경우 API는 Rest Api의 설계 규칙을 올바르게 지키지 못한 시스템은 Rest Api를 사용했지만 Restful 하지 못한 시스템이라고 말합니다
  2. [이점]
    1. 확장성
      1. 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 크기 조정할 수 있습니다
      2. 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없기 때문에 서버 로드를 제거합니다
      3. 일부 클라이언트-서버 상호 작용을 부분적으로 또는 완전히 제거합니다
      4. 성능을 저하시키는 통신 병목 현상을 일으키지 않으면서 확장성을 지원합니다
    2. 유연성
      1. 완전한 클라이언트-서버 분리를 지원합니다
      2. 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리합니다
      3. 서버 애플리케이션의 플랫폼 또는 기술 변경은 클라이언트 애플리케이션에 영향을 주지 않습니다
      4. 애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상시킵니다
      5. [예시]
        1. 개발자는 애플리케이션 로직을 다시 작성하지 않고도 데이터베이스 계층을 변경할 수 있습니다
    3. 독립성
      1. API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있습니다
      2. 통신에 영향을 주지 않고 양쪽의 기본 기술을 변경할 수 있습니다