RESTful API란?

henry·2024년 10월 16일

1. REST의 기본 개념

REST는 자원(Resource)을 기반으로 데이터를 처리하는 방식입니다.
자원은 웹의 URL로 표현되고 HTTP 메서드를 사용해 자원에 접근하거나 조작합니다.
예를 들어, 블로그 게시물을 데이터베이스에서 불러오거나 수정할 때
RESTful API를 사용하면 다음과 같은 방식으로 접근합니다.



2. HTTP 메서드와 RESTful API의 동작 방식

RESTful API는 HTTP 메서드를 사용해 자원을 조작합니다.

HTTP 메서드설명사용 예시
GET자원 조회게시물 목록 가져오기
POST자원 생성새 게시물 작성
PUT자원 전체 수정게시물 내용 수정
PATCH자원 일부 수정게시물 제목 수정
DELETE자원 삭제게시물 삭제

💡 예시로 보는 RESTful API

블로그에서 게시물을 다루는 RESTful API를 생각해 보겠습니다.

  • GET /posts : 모든 게시물 목록 가져오기
  • POST /posts : 새 게시물 작성
  • GET /posts/1 : ID가 1인 게시물 가져오기
  • PUT /posts/1 : ID가 1인 게시물 전체 수정
  • DELETE /posts/1 : ID가 1인 게시물 삭제

3. RESTful API의 구성 요소

1) 자원(Resource)

모든 데이터는 자원으로 취급되며, URL을 통해 고유하게 식별됩니다.
예시 : /users, /orders/123

2) HTTP 메서드

GET, POST, PUT, PATCH, DELETE 등을 사용해 자원에 접근합니다.

3) 상태 코드(Status Code)

서버는 요청의 결과를 HTTP 상태 코드로 응답합니다.
200 OK : 요청 성공
201 Created : 자원 생성 성공
404 Not Found : 요청한 자원이 없음
500 Internal Server Error : 서버 오류 발생

4) 표현(Representation)

서버는 자원의 상태를 JSON이나 XML 형식으로 응답합니다.



4. RESTful API 예제 코드

Node.js와 Express로 간단한 RESTful API를 구현한 예시입니다.

GET 모든 게시물 가져오기

app.get('/posts', (req, res) => {
  res.json(posts);
});

POST 새 게시물 생성

app.post('/posts', (req, res) => {
  const newPost = { id: posts.length + 1, ...req.body };
  posts.push(newPost);
  res.status(201).json(newPost);
});

GET ID로 특정 게시물 조회

app.get('/posts/:id', (req, res) => {
  const post = posts.find(p => p.id === parseInt(req.params.id));
  post ? res.json(post) : res.status(404).send('Post not found');
});

PUT ID로 특정 게시물 전체 수정

app.put('/posts/:id', (req, res) => {
  const index = posts.findIndex(p => p.id === parseInt(req.params.id));
  if (index !== -1) {
    posts[index] = { id: parseInt(req.params.id), ...req.body };
    res.json(posts[index]);
  } else {
    res.status(404).send('Post not found');
  }
});

DELETE ID로 특정 게시물 삭제

app.delete('/posts/:id', (req, res) => {
  posts = posts.filter(p => p.id !== parseInt(req.params.id));
  res.status(204).send();
});


5. RESTful API의 장단점

✅ 장점

단순한 설계 : URL과 HTTP 메서드를 사용하여 직관적인 설계를 제공합니다.
언어와 플랫폼 독립적 : 클라이언트와 서버는 서로 다른 기술 스택을 사용할 수 있습니다.
확장성 : RESTful API는 클라이언트와 서버의 변경이 독립적이라 유지보수에 유리합니다.

❌ 단점

복잡한 요청 처리 : *무상태 특성으로 인해 클라이언트가 모든 요청에 인증 정보를 포함해야 합니다.
실시간 통신에 부적합 : REST는 웹소켓 같은 실시간 통신에 적합하지 않습니다.

*무상태 : 각 요청이 독립적으로 처리된다는 것을 의미. 서버는 클라이언트의 이전 요청이나 상태를 저장하지 않고 매번 새로운 요청처럼 처리

0개의 댓글