Notice
Recent Posts
Recent Comments
Link
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 개발 일상 기록

REST API 본문

ETC

REST API

느린 거북이 2021. 7. 5. 09:59

REST API

 

1. Rest란?

  • 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다.
  • 자원은 소프트웨어가 관리하는 모든 것을 의미합니다. 예를 들면 DB안에 들어가 있는 데이터 하나하나, 이미지 하나하나 등을 의미할 수 있습니다.
  • 상태(정보)전달은 데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달하는 것을 의미하는데 일반적으로 JSON 혹은 XML를 통해 데이터를 상태를 전달합니다.
  • REST의 구체적인 개념은 HTTP URL을 통해 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 CRUD 오퍼레이션을 적용하는 것을 의미합니다.

2. Rest 특성

 

- Server-Client(서버-클라이언트 구조)

  • REST Server : API를 제공하고 비즈니스 로직처리 및 저장을 책임집니다.
  • Client : 사용자 인증이나 context(세션, 로그인 정보)등을 직접 관리하고 책임집니다.
  • 서로 간 의존성이 줄어듭니다.

- Statelss(무상태)

  • 세션과 쿠키와 같은 context정보를 신경쓰지 않아도 구현이 단순해집니다.
  • Server는 각각의 요청을 완전히 별개의 것으로 인식하고 처리합니다.

- Cacheable(캐시 처리 가능)

  • 웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용 할 수 있습니다.
  • 캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상시킬 수 있습니다.

- Layered System(계층화)

  • API Server는 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있습니다.
  • 네트워크 기반의 중간매체를 사용할 수 있습니다.

- Code-On-Demand(opional)

  • Server로 부터 스크립트를 받아서 Client에서 실행합니다.

- Uniform Interface(인터페이스 일관성)

  • URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행합니다.
  • 특정 언어나 기술에 종속되지 않습니다.

3. REST API 설계 규칙

  • URI는 정보의 자원을 표현해야 합니다.
  • resource는 동사보다는 명사를, 대문자보다는 소문자를 사용해야 합니다.
  • resource의 Document이름은 단수 명사를 사용해야 합니다.
  • resource의 Collection 이름으로는 복수 명사를 사용해야 합니다.
  • resource의 Store 이름으로는 복수 명사를 사용해야 합니다.
  • 자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE등)로 표현합니다.

 

* resource 원형

  • Document : 1개의 개체를 나타냅니다.
  • Collection : 단일 Resource(document)들의 묶음입니다.
  • Store : client에서 관리하는 resource저장소입니다.
  • controller resource model은 절차적인 개념입니다. Body에서는 controller의 경우 resource를 조작하는 게 아닌 직접 function을 실행하는 것이기 때문에 이런 경우에는 동사를 사용해도 좋다고 합니다. 

4. REST API 설계 예시

CRUD HTTP verbs Route
resource들의 목록 표시 GET /resource
resource 특정 대상 내용 표시 GET /resource/{id}
resource를 생성 POST /resource
resource를 수정 PUT /resource/{id}
resource를 삭제 DELETE /resource/{id}

 

* 응답상태코드

  • 1xx : 전송 프로토콜 수준의 정보 교환 
  • 2xx : 클라이언트 요청이 성공적으로 수행됨
  • 3xx : 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함
  • 4xx : 클라이언트의 잘못된 요청
  • 5xx : 서버쪽 오류로 인한 상태코드

5. REST API를 구글링하는 동안 알게된 부분

 

* API 문서화 (Swagger)

  • 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크입니다.
  • Swagger UI도구를 통해 Swagger를 식별하며 Swagger 툴셋에서는 자동화된 문서화, 코드 생성, 테스트 케이스 생성 지원이 포함됩니다.

* GraphQL

  • GraphQL은 클라이언트가 필요한 데이터의 구조를 지정할 수 있으며, 서버는 정확히 동일한 구조로 데이터를 반환합니다.
  • 불필요한 데이터를 받게 되거나 필요한 데이터를 받지 못하는 문제를 피할 수 있습니다.

Swageer와 GraphQL은 다른 포스트에서 자세하게 다루어 볼 예정입니다.

Comments