일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CollapsingToolbarLayout
- onLayout
- 안드로이드
- 알림
- recyclerview
- AppBarLayout
- BOJ
- notification
- Android
- kotlin
- room
- sqlite
- ViewModel
- activity
- HTTP
- View
- lifecycle
- Behavior
- LiveData
- onMeasure
- 알고리즘
- DataBinding
- 백준
- Navigation
- Algorithm
- hilt
- CustomView
- CoordinatorLayout
- Coroutine
- 코틀린
- Today
- Total
개발일지
CS in A..Z - REST API 본문
REST API
REST 아키텍쳐를 따르는 API를 뜻한다.
* API(Application Programming Interface) 애플리케이션 자료 교환을 위한 통신
REST
인터넷 상의 자원을 HTTP Method를 통해 조작하고 특정한 형태로 표현하는 아키텍쳐 입니다. 자원을 URI로 표현하고 HTTP Method를 통해 조작하며 JSON, XML 등의 형태로 표현하기 때문에 다양한 플랫폼에서 사용할 수 있다는 장점을 갖고 있습니다. 최근 다양한 클라이언트가 등장하며 여러 플랫폼에서 적용할 수 있는 방안이 필요했으며, Client와 Server를 분리하면서 유지보수가 편해진다.
ex)
GET /users/1
==========
{
"id": 1,
"name": "Admin"
}
구성
- 자원 : 서버가 소유하고 있으며 URI로 식별합니다.
- 행위 : HTTP Method로 표현하며 GET, POST, PUT, DELETE 등 적절한 Method를 통해 자원을 조작합니다.
- 표현 : JSON, XML등 다양한 플랫폼에서 사용할 수 있는 형태로 자원을 표현합니다.
특징
Uniform Interface (유니폼 인터페이스)
URI로 자원을 표현합니다.
Stateless (무상태성)
연결을 관리하지 않고 들어오는 요청만 처리하는 단순한 구조입니다.
Cache (캐쉬 가능)
HTTP Method를 사용하기 때문에 HTTP 표준에 따른 Cache를 사용할 수 있으며 요청에 대한 빠른 응답이 가능합니다.
Client - Server (클라이언트 - 서버 구조)
Server는 자원을 소요한 주측이며, Client는 자원을 요청하는 주측입니다. Server는 비즈니스 로직만 담당하고 Client에서 사용자에 대한 인증을 담당합니다. 서로의 역할이 분리되어 의존성을 낮출 수 있습니다.
Self - Descriptiveness (자체 표현 구조)
REST API 메시지만 확인해도 구조를 쉽게 확인할 수 있다.
Layered System (계층 구조)
Client는 서버 내부 구조를 모르며 REST API만 호출할 수 있습니다. Server는 보안, 로드 밸런싱, 암호화 등 여러 계층을 추가할 수 있으며, PROXY, Gateway같은 중간 매체를 사용할 수 있습니다.
디자인 가이드
1. 동사보단 명사를 사용하며 URI에 HTTP Method를 포함하지 않는다. (동사를 최대한 HTTP Method로 바꾸어 사용한다.
잘못된 예
POST /member/delete/1
올바른 예
DELETe /member/1
2. /는 계층 관계를 표현할 때 사용한다.
GET /item/weapon
3. {}를 사용하여 연관 관계를 표현합니다.
REST API
GET /member/{id}/profile
ex) GET /member/1/profile
4. URI는 소문자만 사용하며 _를 사용하지 않습니다. 불가피한 경우 -를 사용하여 가독성을 높일 수 있습니다.
'Computer Science' 카테고리의 다른 글
CS in A..Z - 함수형 프로그래밍 (0) | 2021.10.12 |
---|---|
CS in A..Z - HTTP Response Code (0) | 2021.10.06 |
CS in A..Z - HTTP Method (0) | 2021.10.06 |