API는 서로 다른 다른 소프트웨어나 어플리케이션 간을 연결해주는 매개체이자 약속이라고 볼 수 있다.
API를 작성한다는 의미
- 웹 어플리케이션에서 원하는 기능을 수행하는 URL과 인터페이스를 제공한다는 의미다.
- API에서 원하는 데이터를 받아 DB에 데이터를 저장하고, 저장되어 있는 데이터를 읽어 웹 어플리케이션에 데이터를 제공하는 행위를 통해 사용자가 원하는 목적을 이룰 수 있게 해야 한다.
REST API
- REST는 'Representational State Transfer'의 줄임 말로, 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위해 네트워크 상에서 자원을 쉽고 명확하게 식별하고 조작할 수 있게 도와주는 소프트웨어 아키텍처의 한 형식이다.
- URL, Headers, Method 등 네트워크 표현 수단을 이해하기 쉬운 표현으로 정의하는 것을 말하고, 'REST 아키텍쳐'는 쉽게 이해할 수 있도록 '자원'을 정의하고 이 '자원'을 중심으로 표현을 구성하는 원칙을 제시한다.
- REST API는 HTTP를 통해 웹 서비스의 자원에 접근하는 방식을 'REST 아키텍쳐'의 규칙을 따라 구현된 API라고 생각하면 된다.
REST API의 구성 요소
REST API의 구성은 크게 세 가지로 이루어 진다.
1. 자원 ( Resource ) - URL
- 소프트웨어가 관리하는 모든 것을 자원으로 표현할 수 있다.
2. 행위 - HTTP method
- http method인 GET, POST 등으로 자원에 대한 행위를 표현할 수 있다. ( 예를 들어, GET 메서드는 '조회'와 관련이 있어서 데이터를 읽는 작업을 수행하고, POST 메서드는 '생성'과 관련이 있어서 새로운 데이터를 생성하는 작업을 수행한다. )
- 자원에 대한 생성/조회/수정/삭제를 각각의 method로 나누어 놓고, 이를 보통 CRUD라 한다.
Create : 생성(POST)
Read : 조회(GET)
Update : 수정(PUT),(PATCH)
Delete : 삭제(DELETE)
3. 표현
- 해당 자원을 어떻게 표현할지에 대한 방법으로, 보통 JSON, XML 같은 형식을 이용해 자원을 표현한다.
- HTTP에서는 Content-Type 이라는 헤더를 통해 표현 방법을 서술한다.
REST API 예시
router.get('/books', (req, res) => {
res.json({ success: true, data: getAllBooks() });
});
- 위 예시코드는 /books 라는 URL을 통해 전체 책 목록을 불러와 응답해 주는 역할을 하는 API다.
- http 메서드인 GET은 리소스를 조회하는 역할을 담당하므로, 위 코드는 전체 책 목록을 조회하고, 그 결과를 JSON 형식으로 반환한다. 이렇게 API가 "REST 원칙"에 따라 구현되었으므로, 이 API는 RESTful 하다고 볼 수 있다.
Routing의 이해
Routing은 클라이언트의 요청 조건( http 메서드, 주소 등)에 대응해 응답하는 방식을 말한다.
여기서 말하는 Router는 클라이언트의 요청을 쉽게 처리 할 수 있게 도와주는 Express.js의 기본 기능중 하나다.
- 일반적으로 Router는 아래와 같은 구조를 가진다.
router.METHOD(PATH, HANDLER);
- router : Express.js의 라우터를 정의하기 위해 사용한다
- METHOD : http method를 나타낸다. ( 예 : get, post, put, patch, delete, ... )
- PATH : 실제 서버에서 API를 사용하기 위한 경로를 나타낸다. ( 예 : users, posts, URL, ... )
- HANDLER : 라우트가 일치할 때 실행되는 함수다.
'Javascript' 카테고리의 다른 글
[Javascript][Node.js] Request, Response (0) | 2024.08.30 |
---|---|
[Javascript] API Client ( Insomnia API Client ) (0) | 2024.08.30 |
[Javascript] Module (0) | 2024.08.29 |
[Javascript] Express.js 프레임 워크 (0) | 2024.08.28 |
[Javascript] Node.js (0) | 2024.08.27 |