REST API 핵심 정리
출처: NHN Cloud Meetup - REST API 제대로 알고 사용하기
REST API(Representational State Transfer API)
REST API란 CRUD Operation 구조를 자원
과 행위
로 표현
해 분산 하이퍼미디어 시스템에서 사용할 수 있는 소프트웨어 아키텍처의 한 형식이다.
웹, HTTP 기술을 그대로 활용해 웹의 장점을 최대한 활용할 수 있도록 로이 필딩이 최초로 소개했다.
REST API 구조
REST API는 위에서 소개 하였듯이,
자원(Resource)
: URI행위(Verb)
: HTTP METHOD표현(Representations)
위 세가지로 구성된다.
REST API 특징
- Uniform Interface
- URI로 지정한 리소스에 대한 조작을
통일
되고 한정적
인 인터페이스로 수행한다.
- Stateless
- 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.
- API 서버는 들어오는 요청만을 단순히 처리한다.
- 서비스의 자유도가 높아지고 구현이 단순해진다.
-
Cacheable
- HTTP라는 기존 웹표준을 그대로 사용하기 때문에 HTTP의 캐싱 기능을 적용 가능하다.
- HTTP 프로토콜 표준에서 사용하는
Last-Modified
, E-Tag
를 이용한다.
-
Client-Server
- REST 서버는 API를 제공하고, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보) 등을 직접 관리하는 구조로 작동한다.
- 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어든다.
-
Self-descriptiveness
- REST API 메시지만 보고도 이를 쉽게 이해할 수 있다.
-
Layer structure
- REST 서버는 다중 계층으로 구성되어 보안, 로드밸런싱, 암호화 계층을 추가할 수 있다.
- PROXY, 게이트웨이 등 중간매체를 사용할 수 있다.
REST API 디자인 가이드
-
자원(Resoruce, URI)는 명사를 사용한다.
- URI는 자원을 표현하는데 중점을 둬야 하며, delete 같은 행위에 대한 표현은 들어가선 안된다.
- 예로
GET /members/delete/1
같은 표현은 잘못된 표현이고,
DELETE /members/1
이 올바른 표현이다.
-
자원에 대한 행위는 HTTP METHOD로 표현한다.
- HTTP METHOD는 GET/POST/PUT/DELETE 등이 있다.
- 회원을 추가하는 URI가 있다면,
GET /members/insert/2
는 올바른 Method와 자원이 아니므로, POST /members/2
라 표현한다.
URI 설계 시 주의점
-
슬래시 구분자(/
)는 계층 관계를 나타낸다.
http://hankyul.com/houses/apartments
http://hankyul.com/animals/mammals/whales
-
URI 마지막 문자로 /
를 포함하지 않는다.
- REST API는 분명한 URI를 만들어 표현해야 하므로, 혼동을 줄 수 있는 요소를 없애는 것이 좋다.
-
하이픈(-
)은 가독성을 높인다.
- 불가피하게 긴 URI를 사용한다면
-
를 사용한다.
-
언더라인(_
)은 사용하지 않는다.
- 경우에 따라
-
은 보기 어렵게 하거나 문자가 가려질 수 있다.
-
URI 경로는 소문자로 표현한다.
- 대소문자에 따라 다른 자원으로 인식한다.
RFC3986
에서 URI 스키마와 호스트를 제외하고 대소문자를 구별하도록 규정되어 있다.
RFC 3986 is the URI (Unified Resource Identifier) Syntax document
-
파일 확장자는 URI에 포함시키지 않는다.
http://hankyul.com/members/soccer/345/photo.png
는 URI의 잘못된 표현이다.
- 확장자를 포함시켜야 할 때는
Accept Header
를 사용토록 한다.
GET / members/soccer/345/photo HTTP/1.1 Host: hankyul.com Accept: image/png
리소스 간의 관계를 표현하는 방법
-
연관관계로 표현한다.
-
/리소스명/리소스 ID/관계가 있는 다른 리소스명
/users/{userid}/devices
(소유 'has'의 관계로 표현)
-
관계명이 복잡하다면 서브 리소스에 명시적 표현한다.
/users/{userid}/likes/devices
자원을 표현하는 Collection
과 Document
Document
- 하나의 객체
Collection
- 객체들의 집합
http://hankyul.com/sports/soccer/players/13
위 URI에서 Collection
은 복수(sports
, players
)로, Document
는 단수(soccer
, 13
)로 표현된 걸 확인할 수 있다.
Collection
과 Document
를 명확히 구분해 사용하면 URI를 이해하기 쉬운 방향으로 설계할 수 있다.
HTTP 응답 상태 코드
-
잘 설계된 REST API는 자원에 대한 응답도 잘 내어줘야 한다.
정확한 응답의 상태 코드만으로도 많은 정보를 전달할 수 있다.
상태코드 설명 200 요청을 정상적으로 수행함 201 리소스 생성을 요청했고, 성공적으로 생성됨 400 부적절한 요청 401 인증되지 않음 403 응답 거부(400, 404 사용할 것 권고, 403은 리소스가 존재함을 뜻함) 405 사용 불가능 Method 이용 301 URI 변경됨(응답 시 Location Header
에 변경된 URI 넣어줘야 함) 500 서버 문제
Author And Source
이 문제에 관하여(REST API 핵심 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@kimh4nkyul/REST-API-핵심-정리
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- URI로 지정한 리소스에 대한 조작을
통일
되고한정적
인 인터페이스로 수행한다.
- 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.
- API 서버는 들어오는 요청만을 단순히 처리한다.
- 서비스의 자유도가 높아지고 구현이 단순해진다.
Cacheable
- HTTP라는 기존 웹표준을 그대로 사용하기 때문에 HTTP의 캐싱 기능을 적용 가능하다.
- HTTP 프로토콜 표준에서 사용하는
Last-Modified
,E-Tag
를 이용한다.
Client-Server
- REST 서버는 API를 제공하고, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보) 등을 직접 관리하는 구조로 작동한다.
- 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어든다.
Self-descriptiveness
- REST API 메시지만 보고도 이를 쉽게 이해할 수 있다.
Layer structure
- REST 서버는 다중 계층으로 구성되어 보안, 로드밸런싱, 암호화 계층을 추가할 수 있다.
- PROXY, 게이트웨이 등 중간매체를 사용할 수 있다.
-
자원(Resoruce, URI)는 명사를 사용한다.
- URI는 자원을 표현하는데 중점을 둬야 하며, delete 같은 행위에 대한 표현은 들어가선 안된다.
- 예로
GET /members/delete/1
같은 표현은 잘못된 표현이고, DELETE /members/1
이 올바른 표현이다.
-
자원에 대한 행위는 HTTP METHOD로 표현한다.
- HTTP METHOD는 GET/POST/PUT/DELETE 등이 있다.
- 회원을 추가하는 URI가 있다면,
GET /members/insert/2
는 올바른 Method와 자원이 아니므로,POST /members/2
라 표현한다.
URI 설계 시 주의점
-
슬래시 구분자(/
)는 계층 관계를 나타낸다.
http://hankyul.com/houses/apartments
http://hankyul.com/animals/mammals/whales
-
URI 마지막 문자로 /
를 포함하지 않는다.
- REST API는 분명한 URI를 만들어 표현해야 하므로, 혼동을 줄 수 있는 요소를 없애는 것이 좋다.
-
하이픈(-
)은 가독성을 높인다.
- 불가피하게 긴 URI를 사용한다면
-
를 사용한다.
-
언더라인(_
)은 사용하지 않는다.
- 경우에 따라
-
은 보기 어렵게 하거나 문자가 가려질 수 있다.
-
URI 경로는 소문자로 표현한다.
- 대소문자에 따라 다른 자원으로 인식한다.
RFC3986
에서 URI 스키마와 호스트를 제외하고 대소문자를 구별하도록 규정되어 있다.
RFC 3986 is the URI (Unified Resource Identifier) Syntax document
-
파일 확장자는 URI에 포함시키지 않는다.
http://hankyul.com/members/soccer/345/photo.png
는 URI의 잘못된 표현이다.
- 확장자를 포함시켜야 할 때는
Accept Header
를 사용토록 한다.
GET / members/soccer/345/photo HTTP/1.1 Host: hankyul.com Accept: image/png
리소스 간의 관계를 표현하는 방법
-
연관관계로 표현한다.
-
/리소스명/리소스 ID/관계가 있는 다른 리소스명
/users/{userid}/devices
(소유 'has'의 관계로 표현)
-
관계명이 복잡하다면 서브 리소스에 명시적 표현한다.
/users/{userid}/likes/devices
자원을 표현하는 Collection
과 Document
Document
- 하나의 객체
Collection
- 객체들의 집합
http://hankyul.com/sports/soccer/players/13
위 URI에서 Collection
은 복수(sports
, players
)로, Document
는 단수(soccer
, 13
)로 표현된 걸 확인할 수 있다.
Collection
과 Document
를 명확히 구분해 사용하면 URI를 이해하기 쉬운 방향으로 설계할 수 있다.
HTTP 응답 상태 코드
-
잘 설계된 REST API는 자원에 대한 응답도 잘 내어줘야 한다.
정확한 응답의 상태 코드만으로도 많은 정보를 전달할 수 있다.
상태코드 설명 200 요청을 정상적으로 수행함 201 리소스 생성을 요청했고, 성공적으로 생성됨 400 부적절한 요청 401 인증되지 않음 403 응답 거부(400, 404 사용할 것 권고, 403은 리소스가 존재함을 뜻함) 405 사용 불가능 Method 이용 301 URI 변경됨(응답 시 Location Header
에 변경된 URI 넣어줘야 함) 500 서버 문제
Author And Source
이 문제에 관하여(REST API 핵심 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@kimh4nkyul/REST-API-핵심-정리
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
슬래시 구분자(/
)는 계층 관계를 나타낸다.
http://hankyul.com/houses/apartments
http://hankyul.com/animals/mammals/whales
URI 마지막 문자로 /
를 포함하지 않는다.
- REST API는 분명한 URI를 만들어 표현해야 하므로, 혼동을 줄 수 있는 요소를 없애는 것이 좋다.
하이픈(-
)은 가독성을 높인다.
- 불가피하게 긴 URI를 사용한다면
-
를 사용한다.
언더라인(_
)은 사용하지 않는다.
- 경우에 따라
-
은 보기 어렵게 하거나 문자가 가려질 수 있다.
URI 경로는 소문자로 표현한다.
- 대소문자에 따라 다른 자원으로 인식한다.
RFC3986
에서 URI 스키마와 호스트를 제외하고 대소문자를 구별하도록 규정되어 있다.
RFC 3986 is the URI (Unified Resource Identifier) Syntax document
파일 확장자는 URI에 포함시키지 않는다.
http://hankyul.com/members/soccer/345/photo.png
는 URI의 잘못된 표현이다.- 확장자를 포함시켜야 할 때는
Accept Header
를 사용토록 한다.
GET / members/soccer/345/photo HTTP/1.1 Host: hankyul.com Accept: image/png
-
연관관계로 표현한다.
-
/리소스명/리소스 ID/관계가 있는 다른 리소스명
/users/{userid}/devices
(소유 'has'의 관계로 표현) -
관계명이 복잡하다면 서브 리소스에 명시적 표현한다.
/users/{userid}/likes/devices
자원을 표현하는 Collection
과 Document
Document
- 하나의 객체
Collection
- 객체들의 집합
http://hankyul.com/sports/soccer/players/13
위 URI에서 Collection
은 복수(sports
, players
)로, Document
는 단수(soccer
, 13
)로 표현된 걸 확인할 수 있다.
Collection
과 Document
를 명확히 구분해 사용하면 URI를 이해하기 쉬운 방향으로 설계할 수 있다.
HTTP 응답 상태 코드
-
잘 설계된 REST API는 자원에 대한 응답도 잘 내어줘야 한다.
정확한 응답의 상태 코드만으로도 많은 정보를 전달할 수 있다.
상태코드 설명 200 요청을 정상적으로 수행함 201 리소스 생성을 요청했고, 성공적으로 생성됨 400 부적절한 요청 401 인증되지 않음 403 응답 거부(400, 404 사용할 것 권고, 403은 리소스가 존재함을 뜻함) 405 사용 불가능 Method 이용 301 URI 변경됨(응답 시 Location Header
에 변경된 URI 넣어줘야 함) 500 서버 문제
Author And Source
이 문제에 관하여(REST API 핵심 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@kimh4nkyul/REST-API-핵심-정리
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Document
- 하나의 객체
Collection
- 객체들의 집합
http://hankyul.com/sports/soccer/players/13
위 URI에서Collection
은 복수(sports
,players
)로,Document
는 단수(soccer
,13
)로 표현된 걸 확인할 수 있다.
Collection
과 Document
를 명확히 구분해 사용하면 URI를 이해하기 쉬운 방향으로 설계할 수 있다. -
잘 설계된 REST API는 자원에 대한 응답도 잘 내어줘야 한다.
정확한 응답의 상태 코드만으로도 많은 정보를 전달할 수 있다.상태코드 설명 200 요청을 정상적으로 수행함 201 리소스 생성을 요청했고, 성공적으로 생성됨 400 부적절한 요청 401 인증되지 않음 403 응답 거부(400, 404 사용할 것 권고, 403은 리소스가 존재함을 뜻함) 405 사용 불가능 Method 이용 301 URI 변경됨(응답 시 Location Header
에 변경된 URI 넣어줘야 함)500 서버 문제
Author And Source
이 문제에 관하여(REST API 핵심 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimh4nkyul/REST-API-핵심-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)