API (Application Programming Interface)
소프트웨어나 어플리케이션 간의 상호작용을 가능하게 하는 도구/규약들의 집합
한 프로그램이 다른 프로그램에 기능이나 서비스를 제공하거나 요청할 수 있도록 하는 인터페이스 제공
프로그램 간의 통신에 사용되는 언어/메시지 형태
≫ REST API : HTTP에서 REST한 방식을 따르는 API
HTTP (HyperText Transfer Protocol)
WWW에서 데이터를 주고 받기 위한 프로토콜
클라이언트와 서버 간에 통신을 가능하게 하며, 주로 웹 브라우저와 웹 서버 간의 데이터 교환에 사용됨
클라이언트-서버 모델 사용
- 요청을 보내는 쪽 : 클라이언트
- 요청을 받아 응답하는 쪽 : 서버
- 클라이언트(웹 브라우저)가 서버에 요청을 보내고, 서버가 응답을 돌려주는 방식
비연결성 특징
- 요청과 응답 후에는 클라이언트와 서버 간의 연결이 바로 끊김
- 서버 부하 감소, 더 많은 클라이언트 처리 가능
- 1대1이 아닌 N대N 구조 유지 가능
무상태성 (stateless) 유지
- HTTP는 각 요청을 독립적으로 처리
- 이전 요청 정보가 다음 요청에 영향을 미치지 않음
- 상태 정보 유지는 쿠키나 세션을 통해 가능
HTTP 메서드 사용
- CRUD에 각각 매핑하여 사용
- REST API에서 HTTP 메서드를 사용하여 기능을 기술
- CREATE : POST (데이터 제출)
- READ : GET (데이터 요청)
- UPDATE : PUT (데이터 저장/업데이트)
- DELETE : DELETE
HTTP Status code로 상태 나타냄
- 2XX : Successful
- 200 OK
- 201 Created
- 202 Accepted
- 204 No Content
- 3XX : Redirect (리다이렉트)
- 4XX : 클라이언트 오류
- 400 Bad Request
- 404 Not Found : 리소스를 찾을 수 없음
- 5XX : 서버 오류
버전
- 시간에 따라 발전 : HTTP/1.0, HTTP/1.1 → HTTP/2, HTTP/3
REST (REpresentational State Transfer)
자원을 이름으로 구분하여 상태(정보)를 주고 받는 것
REST의 기본 원칙을 잘 지킨 서비스 디자인 ≫ RESTful
REST 구성 요소
- 자원 (Resources)
- 모든 자원을 구별하는 고유한 ID : HTTP URI
- ex) /groups/:groups_id
- 행위 (Verb)
- HTTP Method
- GET, POST, PUT, DELETE
- 표현 (Representations)
- 클라이언트가 자원의 상태에 대한 조작을 요청하면 서버는 적절한 응답을 보냄
- 자원은 JSON, XML, TEXT 등의 여러 형태로 나타낼 수 있음
REST 특징
- ServerClient 구조
- Stateless무상태
- Cacheable캐시 처리 가능
- Layered System계층화
- Uniform Interface인터페이스 일관성
- CodeOnDemandOptional
REST API
REST API 설계 중심 규칙
- URI은 정보의 자원을 표현
- 자원에 대한 행위는 HTTP Method로 표현
- 회원 정보를 가져오는 URL
- GET /members/1
- 회원 추가
- POST /members/2
- 회원 정보를 가져오는 URL
Client
(HTTP를 통해 요청을 보내는 쪽)
↓
↓ HTTP 메시지 : 를 통해 content를 담아서 요청/응답
↓ (요청) ≫ RESTful API 방식을 통해서 데이터를 요청
↓ HTTP메소드(POST/PUT/GET/DELETE)를 통해 URI를 만들어서 보냄
↓ ex) GET /account (= URI) (GET은 HTTP 메소드 / account는 자원 )
↓ (응답) ≫ HTTP status code (2xx, 3xx, 4xx, 5xx ...)를 통해 요청 처리에 대한 응답
↓ 응답에 관련된 정보들을 Body에 담아서 전달
↓ ex) GET에 대한 요청으로 account 정보들을 담아 전달
↓
Server
(HTTP를 통해 응답하는 쪽)
'spring' 카테고리의 다른 글
타임리프(Thymeleaf) (0) | 2024.09.13 |
---|---|
템플릿 엔진(Template Engine) (0) | 2024.09.13 |
Spring Bean / 생명주기 (0) | 2024.06.14 |
MVC 패턴 (0) | 2024.04.20 |
스프링 프레임워크 / Spring Boot (1) | 2024.04.19 |