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.)