REST API
REST
(Representational State Transfer)
월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식
자원(Resouce)과 자원에 대한 상태(State)를 주고받기 위한 아키텍처의 제약조건
REST 디자인 원칙
API는 하나의 애플리케이션이나 서비스가 다른 애플리케이션이나 서비스 내의 리소스에
액세스 할 수 있게 해주는 메커니즘이다.
- 균일한 인터페이스
✔ 요청이 어디에서 오는지와 무관하게, 동일한 리소스에 대한 모든 API 요청은 동일하여야 한다.
➜ 어느 요청이든지 일관성이 있어야함
✔ 각 자원은 각각의 고유한 URI(Uniform Resource Idenfier)에 속함이 보장되어야 한다.
➜ ex)
/post/1
/post/2
/post/3
.
.
각각의 고유한 게시물(자원)을 나타낸다.
- 클라이언트-서버 디커플링
✔ 클라이언트와 서버 애플리케이션은 서로 간에 완전히 독립 적어야 한다.
➜ 클라이언트 애플리케이션이 알아야 하는 유일한 정보는 요청된 리소스의 URI이며, 다른 방법으로 서버 애플리케이션과 상호작용 할 수 없다.
- Stateless(무상태)
✔ 서버가 클라이언트의 상태를 저장하지 않아야 한다. (확장성과 성능향상)
➜ ex)
로그인기능은 일반적으로 사용자의 상태를 유지해야 한다. 하지만 RESE 아키텍처는 서버가 클라이언트의 로그인 상태를 유지하지 않는다. (로그인한 사용자의 인증된 토큰을 포함시켜 서버에 요청을 보내면 유효한지 확인하고 서바가 처리한다.)
- 캐싱 가능성
✔ 서버의 응답을 클라이언트나 중간 서버에 임시로 저장하여 같은 요청에 대한 응답속도를 향상한다. (확장성과 성능 향상)
- 계층 구조 아키텍처
✔ 여러 개의 계층으로 나누어 각 계층이 특정 기능을 수행하도록 설계해야 한다. (유지보수성, 확장성, 재사용성 향상)
➜ ex) 애플리케이션의 예시
프레젠테이션 계층 - 사용자와 직접 상호작용. 입력데이터를 서버에 전달하고 서버에서 받은 데이터를 표시
비즈니스 계층 - 비즈니스 로직을 처리
데이터 액세스 계층 - 데이터베이스나 외부 서비스와의 상호작용을 담당
- 코드 온디멘션(옵션)
✔ 웹 서비스에서 클라이언트가 필요한 프로그램로직을 서버로부터 동적으로 가져와 실행
➜ 일반적으로 클라이언트 측에서는 HTML, CSS, JavaScript와 같은 정적 리소스만 포함되어 있고, 실제 애플리케이션의 로직은 서버 측에만 존재.
Code on Demand를 사용하면 서버가 클라이언트에게 필요한 코드를 제공하고, 클라이언트는 이 코드를 실행하여 추가적인 기능을 확장하거나 구현할 수 있다. 이렇게 하면 애플리케이션의 일부 기능을 서버 측에서 클라이언트 측으로 이동시킬 수 있으며, 클라이언트 측에서 코드를 다운로드하고 실행할 수 있기 때문에 런타임 시간에 동적인 기능을 추가하는 것이 가능해진다.
ex)
사용자가 블로그에 추가적인 기능을 적용하면서 블로그 플랫폼의 유연성과 확장성이 좋아진다. 하지만 악의적인 사용자가 해당코드를 분석하여 보안에 취약점을 만들 수 있으므로 주의해야 한다.
REST Full 한 서비스를 위한 URL 네이밍 규칙
- 명사를 사용
좋은 예 : /food
나쁜 예 : /food-order
동사를 허용하는 경우 : /food/order
- 소문자를 사용
좋은 예 : /food
나쁜 예 : /FOOD
- 계층관계 구분은 / 사용
좋은 예 : /food/3
- 구분자는 "-"을 사용
좋은 예 : /food-info
나쁜 예 : /foodInfo , /food_info
- url의 마지막은 /를 포함하지 않음
좋은 예 : /food
나쁜 예 : /food/
- 파일 확장자는 포함하지 않음
나쁜 예 : /food.jpg
'컴퓨터 탐구' 카테고리의 다른 글
컴퓨터) 스택(Stack)과 큐(Queue) (0) | 2023.07.27 |
---|---|
컴퓨터) 웹 서버(Web Server)와 WAS(Web Application Serviece) (0) | 2023.07.27 |
네트워크) TCP와 UDP (0) | 2023.07.26 |
컴퓨터) Spring MVC 에서의 예외 처리 기법 (0) | 2023.07.20 |
컴퓨터) CPU와 메모리 (0) | 2023.06.21 |