목차
- API
- REST API
API
- API는 기본적으로 어떤 소프트웨어가 제공하는 기능과 데이터를 외부에서 접근할 수 있도록 하는 인터페이스이다.
- 쉽게 말하면 한 프로그램에서 다른 프로그램으로 데이터를 주고 받기 위한 방법
- 말 그대로 유저가 코드를 동작시키기 위한 방법이다.
✏️ API의 특징
- 1. 클라이언트와 서버의 상호작용
- 클라이언트(요청자)는 API를 통해 서버(응답자)에게 데이터를 요청하거나 작업을 요청한다.
- 서버는 API 요청을 처리하고 필요한 데이터를 클라이언트에게 응답한다.
- 2. HTTP 요청 및 응답
- 웹 API의 경우, 주로 HTTP 프로토콜을 사용하여 요청(Request)과 응답(Response)을 주고받는다.
- 요청 메서드(예: GET, POST, PUT, DELETE)를 통해 특정 작업을 수행하도록 서버에 요청할 수 있다.
- 3. JSON 또는 XML 형식
- API에서 주고받는 데이터는 주로 JSON 또는 XML 형식으로 교환된다.
- JSON은 가볍고 읽기 쉬운 형식으로 많이 사용된다.
✏️ API 설계를 위해 필요한 구성 요소
- 엔드포인트(Endpoints):
- API가 제공하는 특정 자원에 접근하기 위한 URL이다.
- 예를 들어, https://api.example.com/users는 사용자 목록을 가져오는 엔드포인트가 될 수 있다.
- 어떤 데이터를 요청할 것인지?(웹툰?, 댓글?, 뉴스?, 유저 목록?)
- 요청(Requests):
- API는 요청(Request)을 받아들여서 작업을 수행한다. 요청은 주로 HTTP 메서드와 함께 전달된다.
- 데이터를 달라고 할건지?, 데이터를 보낼것 인지?
- HTTP 메서드는 아래처럼 주로 네 가지로 나뉜다.
- GET: 데이터를 조회할 때 사용.
- POST: 데이터를 생성할 때 사용.
- PUT: 데이터를 수정할 때 사용.
- DELETE: 데이터를 삭제할 때 사용.
- 응답(Response):
- API는 요청에 대한 응답을 JSON, XML 등의 형식으로 반환한다.
- 이 응답에는 주로 상태 코드와 데이터가 포함된다.
- 예를 들어, 200 OK는 성공적인 요청, 404 Not Found는 자원이 없음을 의미한다.
- 인증(Authentication):
- API는 보안이 중요한데, 사용자를 식별하기 위해 API 키, OAuth, 토큰 등을 사용해 인증 절차를 수행할 수 있다.
✏️ API의 종류
- Public API (오픈 API):
- 누구나 접근 가능한 API로, 제3자가 해당 API를 사용해 자신의 애플리케이션에 통합할 수 있다.
- 예를 들어, 구글 맵 API, 트위터 API 등이 이에 해당한다.
- 사용자는 주로 API 키를 발급받아 서비스를 이용한다.
- Private API:
- 내부에서만 사용하는 API이다.
- 회사 내의 애플리케이션 또는 시스템 간에 데이터를 교환하거나 기능을 호출하는 데 사용된다.
- 외부에 노출되지 않기 때문에 보안과 성능이 중요하며, 내부 시스템과의 통합에 주로 사용된다.
- Partner API:
- 특정 파트너에게만 공개된 API이다.
- 예를 들어, 기업 간 협력에서 특정 데이터를 주고받을 수 있도록 API를 제공하는 경우가 해당된다.
- 사용은 제한적이며, 파트너 간의 비즈니스 관계가 있음을 전제로 한다.
REST API
Representational State Transfer의 약자로, 자원(Resource)을 중심으로 설계된 아키텍처 스타일을 따르는 API이다.
REST는 주로 웹에서 HTTP를 사용하여 자원을 조회, 생성, 수정, 삭제하는 방식으로 설계된다.
쉽게 말하자면 이해가 쉽고 관리하기 쉬운 API를 설계하는 방법론이다.
✏️ REST 구성
- 자원(RESOURCE) - URI
- 행위(Verb) - HTTP METHOD
- 표현(Representations)
✏️ REST API의 특징
- 자원 기반
- REST API는 "자원"을 URL로 표현한다.
- 예를 들어, 사용자를 표현하는 자원은 /users, 특정 사용자는 /users/1와 같은 형태로 표현된다.
- HTTP 메서드 활용
- 자원에 대한 액션은 HTTP 메서드를 사용한다.
- GET: 자원 조회
- POST: 자원 생성
- PUT: 자원 수정
- DELETE: 자원 삭제
- 자원에 대한 액션은 HTTP 메서드를 사용한다.
- 상태 비저장성(Stateless)
- 서버는 클라이언트의 요청 간 상태를 저장하지 않는다.
- 각 요청은 독립적이어야 하며, 요청 시 필요한 모든 정보를 포함해야 한다.
- 표현 계층(Representation)
- 클라이언트와 서버 간의 데이터 교환은 주로 JSON, XML 같은 형식을 통해 이루어진다.
- 클라이언트는 서버가 반환하는 표현을 받아 자원 상태를 확인한다.
✏️ REST API를 만들기 위한 조건
- 자원 기반의 URL 구조
- URL은 자원을 명확하게 나타내야 한다.
- 예: /users (사용자 목록), /users/1 (특정 사용자)
- HTTP 메서드 준수
- 자원에 대한 작업은 적절한 HTTP 메서드를 사용해야 한다.
- 데이터를 조회할 때는 GET, 새 데이터를 만들 때는 POST, 수정할 때는 PUT, 삭제할 때는 DELETE를 사용합니다.
- 자원에 대한 작업은 적절한 HTTP 메서드를 사용해야 한다.
- 상태 비저장성 유지
- 클라이언트의 요청은 서버가 요청에 필요한 모든 데이터를 제공받아야 하며, 서버는 요청이 끝난 후 상태 정보를 유지하지 않는다.
- 자원 표현의 일관성
- JSON, XML 같은 일관된 데이터 표현 방식을 사용해 클라이언트가 서버의 응답을 쉽게 해석할 수 있도록 해야 한다.
- URI는 명확하고 직관적이어야 함
- 리소스를 명확히 표현하는 URI 설계가 중요하다.
- URI는 동사보다는 명사를 사용하고, 자원에 대한 행위는 HTTP 메서드로 표현한다.
- 예: /products/ (상품 목록), /products/123 (특정 상품)
- HATEOAS (Hypermedia as the Engine of Application State)
- REST서비스는 자원에 대한 액션을 링크로 포함해 클라이언트가 어떤 작업을 할 수 있을지 명시해야 한다.
- (REST의 고급 개념으로, 일반적으로 필수는 아니다.)
REST API 설계 시 가장 중요한 항목은 다음의 2가지로 요약할 수 있다.
- URI는 정보의 자원을 표현해야 한다.
- 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.
✏️ REST를 제대로 적용하지 않은 URI 예시
GET /members/delete/1
- URI는 자원을 표현하는데 중점을 두어야 한다.
- delete와 같은 행위에 대한 표현이 들어가서는 안된다.
✏️ REST API 예시
- GET /users: 모든 사용자 목록을 가져옵니다.
- POST /users: 새로운 사용자를 추가합니다.
- GET /users/1: ID가 1인 사용자의 정보를 조회합니다.
- PUT /users/1: ID가 1인 사용자의 정보를 업데이트합니다.
- DELETE /users/1: ID가 1인 사용자를 삭제합니다
✏️ REST API와 일반 API의 차이점
설계 철학
- 일반 API는 서버가 제공하는 다양한 기능을 노출할 수 있지만, REST API는 자원을 중심으로 설계된다.
상태 관리
- 일반 API는 세션을 사용하여 클라이언트와 서버 간 상태를 유지할 수 있지만, REST API는 상태 비저장성을 유지하여 모든 요청이 독립적이다.
HTTP 메서드 활용
- 일반 API는 모든 작업을 POST로 처리할 수도 있지만, REST API는 HTTP 메서드의 의미를 엄격하게 따른다.
'Network' 카테고리의 다른 글
[Network] 프로토콜과 OSI 7 Layer (0) | 2024.11.24 |
---|---|
[Network] 멱등성이란? (0) | 2024.11.24 |
[Http] 캐시와 조건부 요청 (0) | 2024.04.28 |
[Http] 일반 헤더 (1) | 2024.04.28 |
[Http] 상태 코드 (0) | 2024.04.26 |