RESTful API 쉽게 이해 하기

RESTful API의 핵심은 클라이언트가 서버에 REST 규칙에 따라 요청을 보내는 것입니다. REST 규칙이 무엇인지, API가 무엇인지 이해한다면 추상적으로 느껴질 수 있는 RESTful API의 개념을 좀 더 구체적으로 이해할 수 있습니다.

RESTful API

API(Application Programming Interface)는 하나의 소프트웨어 컴포넌트가 다른 컴포넌트와 어떻게 상호작용할 수 있는지를 정의합니다. 이는 함수 호출, 메시지 전달, 원격 프로시저 등 형태를 갖습니다. 예를 들어, A 시스템과 B 시스템이 서로 데이터를 주고받을 수 있도록 하는 게 API의 개념입니다.

 

RESTful API는 API 중에서도 REST 원칙에 따라 구현된 API를 의미합니다. 접미사 ful은 어떤 특성이나 상태를 가지고 있다는 의미를 나타냅니다. 이제 REST가 어떤 규칙을 알고 있는지 이해하면 됩니다.

 

RESTful API는 HTTP 메소드(GET, POST, PUT, DELETE 등)를 사용해서 동작하고 XML, JSON 형식으로 데이터를 반환하는 특징이 있습니다. 주로 웹에서 데이터를 생성, 읽기, 수정, 삭제 (CRUD)하는데 사용됩니다. 이런 기능은 웹 사이트를 개발하면 반드시 구현되기 때문에 RESTful API라는 용어가 빈번하게 언급될 수밖에 없습니다.

 

restful api
출처=phpenthusiast.com

 

API 개념

API의 개념에 대해 하나 짚고 넘어갈 것이 있습니다. API를 이용한다고 할 때 일반적으로 완전히 다른 시스템에 있는 기능을 가져와서 특정 애플리케이션에 연동하는 구조를 떠올릴 수 있습니다. 예를 들어, 지하철 애플리케이션은 서울도시철도공사의 API를 사용하고, 부동산 애플리케이션은 국토부의 API를 사용하는 것처럼 말입니다. 

 

그러나 API는 꼭 다른 시스템 간 통신에만 국한되는 개념이 아니라 어떤 형태의 프로그램 간 통신이라도 포괄하는 넓은 개념입니다. 같은 애플리케이션 안에서 통신하는 방법도 API라고 부릅니다. 예를 들어, 사용자(클라이언트)가 보는 웹 사이트 UI를 조작하면 백엔드(서버)는 그에 대한 비즈니스 로직을 처리합니다. 이렇게 프론트엔드와 백엔드 사이 통신을 위해 API가 사용되고, 만약 이 통신이 REST 원칙을 따르고 있다면 이를 RESTful API라고 부릅니다.

 

RESTful API 예시)

트위터에서 트윗을 생성, 조회, 업데이트, 삭제하는 과정에서 RESTful API가 사용됩니다. 각 요청과 응답은 JSON 형식으로 이루어집니다.

  • 트윗 생성 (Create): 사용자가 애플리케이션 내에서 새로운 트윗을 작성하고 이를 트위터에 게시합니다. HTTP 메소드 중 POST를 사용합니다.
  • 트윗 조회 (Read) : 사용자의 타임라인에 있는 트윗을 가져오거나, 특정 키워드를 포함하는 트윗을 검색합니다. HTTP 메소드 중 GET을 사용합니다.
  • 트윗 업데이트 (Update) : 사용자가 트윗에 대해 좋아요, 리트윗 등을 합니다. HTTP 메소드 중 POST를 사용합니다.
  • 트윗 삭제 (Delete) : 사용자가 자신의 트윗을 삭제합니다. HTTP 메소드 중 DELETE를 사용합니다.

 

예시 Java 코드)

Spring Boot를 통해 간단히 RESTful API를 만드는 예제는 다음과 같습니다. 이 예제에서는 도서를 표현하는 Book 클래스와 도서에 대한 CRUD 작업을 수행하는 BookController 클래스를 정의합니다.

 

[Book 클래스]

public class Book {

    private String id;
    private String title;
    private String author;

    // getters and setters
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    public String getAuthor() { return author; }
    public void setAuthor(String author) { this.author = author; }
}

 

[BookController 클래스]

import org.springframework.web.bind.annotation.*;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

@RestController
@RequestMapping("/books")
public class BookController {

    private ConcurrentMap<String, Book> books = new ConcurrentHashMap<>();

    @GetMapping("/{id}")
    public Book getBook(@PathVariable String id) {
        return books.get(id);
    }

    @PostMapping
    public Book postBook(@RequestBody Book book) {
        books.put(book.getId(), book);
        return book;
    }

    @PutMapping("/{id}")
    public Book putBook(@PathVariable String id, @RequestBody Book newBook) {
        Book book = books.get(id);
        if (book != null) {
            book.setTitle(newBook.getTitle());
            book.setAuthor(newBook.getAuthor());
        }
        return book;
    }

    @DeleteMapping("/{id}")
    public void deleteBook(@PathVariable String id) {
        books.remove(id);
    }
}

 

이 코드에서 BookController 클래스는 /books 경로에 대해 CRUD 작업을 수행하는 HTTP 메서드를 정의합니다. @GetMapping, @PostMapping, @PutMapping, @DeleteMapping 어노테이션은 각각 GET, POST, PUT, DELETE 요청을 처리하는 메서드를 나타냅니다.

반응형

댓글

Designed by JB FACTORY