나의 개발 일상 기록
REST API 본문
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은 다른 포스트에서 자세하게 다루어 볼 예정입니다.
'ETC' 카테고리의 다른 글
| SockJs을 이용한 1:1 채팅 구현하기 (0) | 2021.07.07 |
|---|---|
| FCM서버 비동기(Asynchronous)로 요청 및 응답 (0) | 2021.07.06 |
| 대용량 트래픽 환경에서 서버 부하를 줄이기 위한 캐싱 적용 (0) | 2021.07.05 |
| AOP 적용하여 부가적인 로직 제거 (0) | 2021.06.29 |
| 서버확장을 위한 SCALE UP vs SCALE OUT (0) | 2021.06.28 |
Comments