728x90
반응형
먼저 REST API를 알아보기 전에 API란 것을 알아보자
API (Application Programming Interface)
- 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
- 즉, 응용 프로그램끼리 서로 상호 작용을 하게 해주는 것을 의미.
그렇다면 REST API란 무엇일까?
REST (REpresentational State Transfer)
REST 구성
- 자원 (RESOURCE) - URI
- 행위 (Verb) - HTTP METHOD
- 표현 (Representations)
REST의 특징
Uniform (유니폼 인터페이스)
- Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.
Stateless (무상태성)
- REST는 무상태성 성격을 갖는다.
- 즉, 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.
- 세션 정보나 쿠키정보를 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순 처리하면 된다.
- 그렇기에 서비스의 자유도가 높아지고 구현이 단순해진다.
Cacheable (캐시 가능)
- REST의 가증 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 사용 가능하다.
- 즉, HTTP가 가진 캐싱 기능이 적용 가능하다.
- HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.
Self-descriptiveness (자체 표현 구조)
- REST의 또 다른 큰 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 이루어져 있다.
Client-Server 구조
- REST 서버는 API 제공, 클라이언트는 사용자 인증이나 Context(세션, 로그인 정보) 등을 직접 관리하는 구조로 각각의 역할이 확실히 구분된다.
- 때문에, 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 된다.
계층형 구조
- REST 서버는 다중 계층으로 구성될 수 있다.
- 보안, 로드 밸런싱, 암호화 계층을 추가해 구조의 유연성을 둘 수 있다.
- PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 한다.
REST API
- URI는 정보의 자원을 표현해야 한다. (리소스명은 동사보다는 명사를 사용)
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE 등)로 표현해야 한다.
잘못된 예시
GET /members/delete/1
URI는 자원을 표현한느데 중점을 두어야 한다.
즉, delete와 같은 행위에 대한 표현이 들어가서는 안된다.
올바른 예시
DELETE /members/1
HTTP Method의 알맞은 역할
- POST : POST를 통해 해당 URI를 요청하면 리소스를 생성한다.
- GET : GET을 통해 해당 리소스를 조회한다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다.
- PUT : PUT을 통해 해당 리소스를 수정한다.
- DELETE : DELETE를 통해 리소스를 삭제한다.
HTTP 응답 상태 코드
- 1xx (Information responses, 정보) : 요청을 받았으며 프로세스를 계속 진행한다.
- 2xx (Successful responses, 성공) : 요청을 성공적으로 받았으며 인식했고 수용했다.
- 3xx (Redirection messages, 리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요하다.
- 4xx (Client error responses, 클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
- 5xx (Server error responses, 서버 오류) : 서버가 명백히 유효한 요청에 대한 충족을 실패했다.
자주 사용되는 HTTP 응답 상태 코드
상태코드, 이름 | 의미 |
---|---|
200 OK | 기존에 있는 URI에 대한 요청이 성공함, 주로 GET이 사용됨 |
201 Create | 신규 URI에 대한 리소스 생성이 성공함, 주로 POST가 사용됨 |
202 Accepted | 요청은 접수되었으나 리소스 처리는 완료되지 않음 |
204 No Contents | 요청은 성공했으나 제공할 콘텐츠가 없음 |
300 Multiple Choice | 요청한 URI에 대해서 여러개의 리소스가 존재함 |
301 Move Permanently | 요청한 URI가 새 위치로 옮겨갔음, 새 위치는 Location 헤더에 명시됨 |
304 Not Modified | 요청한 URI의 내용이 변경되지 않음 |
400 Bad Request | 요청이 정상적이지 않음, API에서 정의되지 않은 요청이 들어옴 |
401 Unauthorized | 인증오류 |
403 Forbidden | 접근금지, 권한 밖의 접근을 시도함 |
404 Not Found | 요청한 URI에 해당되는 리소스가 존재하지 않음 |
500 Internal Server Error | 서버(클라우드) 내부 오류 |
503 Service Unavailable | 서비스 이용 불가, 일시적으로 서버측에 과부하가 걸리거나 다운됨 |
URI 설계 시 주의점
- 슬래시(/)는 계층 관계를 나타내는 데 사용
http://restapi.example.com/company/worker http://restapi.example.com/animals/tiger
- URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
http://restapi.example.com/animals/tiger # 올바른 예시 http://restapi.example.com/animals/tiger/ # 틀린 예시
- URI에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며
- URI가 다르다는 것은 리소스가 다르다는 것이고, 역으로 리소스가 다르면 URI도 달라져야 한다.
- 하이픈(-)은 URI 가독성을 높이는데 사용
- 불가피하게 긴 URI경로를 사용하게 된다면 하이픈을 사용해 가독성을 높일 수 있다.
- 밑줄(_)은 URI에 사용하지 않느다.
- URI 경로는 소문자가 적합하다.
- 대소문자에 따라 다른 리소스로 인식하게 되기 때문에 URI 경로에 대문자 사용은 피하도록 해야 한다.
- 파일 확장자는 URI에 포함시키지 않는다.
728x90
반응형
'1.프로그래밍 > Java' 카테고리의 다른 글
[Java] Collection에 대해 (Collection, Map, HashMap) (0) | 2021.12.03 |
---|---|
[Spring Boot] Logback 설정 (DB log) - Log4jdbc (2) | 2021.11.29 |
[Spring Boot] Thymeleaf 란? 타임리프 문법 정리 (1) | 2021.11.21 |
[Spring Boot] Annotation 정리 - 2 (0) | 2021.11.21 |
[Java] Java 8 date/time type `java.time.LocalDateTime` not supported by default (1) | 2021.11.19 |